Today’s guest post is by Cuthalion (Why do I do I keep wanting to pronounce it Cthulian?), AKA Yo’el, AKA Joel Moore. Joel offers some insight into the twisty little world of game development, some lessons learned – as most are – the hard way, by actually making games and making mistakes. I hope you enjoy this as much as I did! — Jay

For the last year or three, I’ve been involved in a little project we’ve taken to calling Records of Ur: The King. It’s going to be a tactical RPG. Exciting! But there are a lot of challenges. Here are, in no particular order, some of the things I’ve learned on this project so far. Take these with a hefty grain of salt — I’m still new at this!

1. Teamwork. If you’re working with other people, who you work with on what is critically important. I’m very extroverted and tend to naturally take over groups (for better or worse), so the idea itself of working as part of a team wasn’t too scary. But I was surprised how much of a difference the individuals involved made. For example, for a long time, I stubbornly resisted the idea of adding a second coder to the project. (I’m the “technical director”, which in this case means I do the programming, give input on game mechanics, and say “no” to the producer and creative director a lot.) I had done a pretty poor job of working with the one team member that was interested in adding coding to their responsibilities, and I’d gotten paranoid about letting other people with Other Ideas into the code while I was still figuring out how it all worked myself. I was insecure about the choices I’d made and didn’t want anyone to see it until I could say, “Look, I know you took all those computer science classes that told you this was bad, but it already works!” As it turns out, this was a little silly. The other two leaders eventually twisted my arm into adding an acquaintance of theirs, and we’ve worked together swimmingly since.

2. Temper. I mentioned I’d done a poor job of working with one other team member. As it turns out, being professional means keeping your temper in check, even when you are so sure that the other person is Wrong. If you don’t, it gets awkward.

3. Training. I’ve started a ‘t’ theme here, so let’s stick to it and talk about training. This is not something you need a computer science degree for. Nor an art, English (or Arabic, or Japanese, or Polish, etc.), or any other degree. This is something you can just do, and learn how while trying. College classes can certainly streamline that process — they did for me — but game developers can come from anywhere. The tools are out there, and Google can lead you down a lot of dead ends, but if there’s one thing I’ve learned in my brief life so far, it’s that once you accept the fact that you can learn pretty much anything that anyone else has already learned, you can learn pretty much anything anyone else has already learned. My degree was in “Broadcasting and Digital Media”, with audio and miscellany focuses. It was great for learning those things, but only taking a handful of programming classes hasn’t prevented me from learning how to cobble together a game on my own.

4. Time. Some games take a long time to make. Learning takes a long time to do. When you’re making a game before you know how to make it, it takes longer than you’d expect. Yes, even longer than that doubled estimate you came up with to compensate for how unexpectedly long it would take. So, do yourself a favor and don’t do what I did: don’t push for a big, complex game with lots of content and features. The Rampant Coyote has a lot of experience behind him, and even he has written many times about the scheduling troubles he’s encountered making something as big as Frayed Knights, along with all of its creeping features. My time log tells me that since I started keeping track a few months ago, I’ve spent an average of three hours a week on this. I’ve probably spent about 200 hours, grand total, maybe half of that actually programming. I tell myself that, if I just keep swimming, I’ll be done eventually.

5. Tools. There are a lot of tools out there designed to make game development easy. Unity, LWJGL… I didn’t use many of them. Don’t do that.

6. Learn. I couldn’t think of a ‘t’ for this (but I will as soon as I’ve already submitted this), but one of the most rewarding aspects, for me, has been all the things I’ve learned. When I started this project, I had done a bit of coding in a handful of classes and on my own, and even helped a friend in his intro C++ class (which is a point unto itself — I knew very little C++, but much of what I’d learned about Java and programming in general let me help him out!). But I had never really made a full game before. I had never dealt with, from scratch, putting a picture on the screen before. In fact, this is one of the reasons I was so stubborn about getting help — I wanted to learn it all myself! It’s been a frustrating, infuriating slog. But oh, it feels so good. You’ll learn a lot about things you didn’t know you needed to know. Enjoy it!

7. Pragmatism. Cold, hard pragmatism. I read an article once by John Carmack (of id Software fame) that made me feel a whole lot better about my programming. I can’t remember the name of the website I found it at, but the gist of the article was that the perfect is the enemy of the good. There is a point at which you can stop worrying about whether you’re doing it capital-R Right and just do what you can figure out. Maybe my collision detection isn’t very efficient. Maybe things aren’t encapsulated as neatly as they should be. But, you know what? If I take the time to make everything perfect, I’ll never finish. I have limitations. The joy is in getting something to work and play anyway. So, I try to do my best to use good programming practices for whatever context I’m working with, without worrying about getting it perfect, knowing that next year I’ll realize a better way to do things no matter how meticulously I do them now. As I said, I still try to program as well as I know how — that closes the door on so many potential problems down the line — but I try not to let myself get stuck on it. My future self will scoff at whatever I do now anyway, so I might as well get to Future Me sooner.

8. Enjoy! I haven’t always had fun making this thing. I’m nowhere near finished. Right now, I’m still trying to make sure I’ve ironed out all the glitches in jumping from tile to tile and figuring out what needs to be drawn in front of who in front of who in front of what. But, it’s very satisfying. I’ve learned so much. In the end, the game may or may not be good, but I’ll have, on the whole, enjoyed making it. And I hope you will, too. ^_^