I recently released my first iOS & HTML5 game Zombie Holiday. Along the way I learned quite a bit and I wanted to share what I learned with anyone else who may be working on their first game.

1. Double whatever time you think you’ll need getting the game ready for release!

  • Plan for feature creep. Your game will evolve as it is developed and it can turn into a real monster.  One thing you can do to help to combat this is to define an M.V.P. (Minimally Viable Product) and stick to it. Don’t allow yourself to re-define what the M.V.P. is without seriously considering the consequences of how it will impact your deadline.
  • You’ll run into problems you've never seen before. When running into these new challenges, you’re either going to spend hours working through them yourself, waiting on responses from a forum, or more likely a combination of both.
  • You’ll likely lose at least a week along the way trying to solve strange errors. This isn't a problem if you give yourself a cushion up front in your planning.
  • Look at my three reasons above and then consider- that’s just for the code. Now you need to tack on time for…
    • Art graphics that people will want to pay money for, not those things you ripped off Google images
    • Sound
    • A webpage
    • Marketing media such as A YouTube trailer
    • And promoting your game
 

2. Test game on your target platform as soon as possible.

Don’t finish the game in the browser and then port to iOS at the end like I did. I say this for two reasons:
  • You will undoubtedly run into problems. I ran into two major technical problems only weeks before our target release date because I waited until the end to finally port it to iOS. There were framework compatibility issues that I just couldn't have known would be there until trying it.
  • Seeing your game run on your target platform will provide the much needed gust of wind in your sails and re-ignite your excitement about what you’re creating.
 

3. Everyone wants to test your game. No one wants to test your game.

You’ll find that all of your Facebook friends will say they want to test your game. But what they really mean is they want to try it until they are bored and will likely provide no usable feedback. This isn't true for everyone but just plan that if you put your game out there to 100 people, you’ll probably receive valuable feedback from less than 20.

4. Be a lazy programmer!

There are lots of ways you can save yourself a lot of time coding your game without cutting corners. Here are two ways I felt worth mentioning.
  • Write code that helps you accomplish tasks like level generation or upgrades. Anything that is pattern driven, you can likely write code to save you the time of hand crafting each and every piece of the puzzle. In the case of Zombie Holiday, that is exactly what we did. Levels 1-10 were hand crafted to help bring the user up to speed on how to play the game. Levels 11-50 were generated via level generator that we wrote which scaled the game at the rate that we thought felt right. Too slow and the user is going to get bored of a game because it’s too easy. Too fast and the user is going to get frustrated by a game that’s too hard.
  • Use tools that are out there to lessen the workload on yourself. For Zombie Holiday we utilized the ImpactJS framework to build the initial HTML5 version of the game.  We then used the Ejecta framework to essentially port our HTML5 game to iOS. This saved us the grueling effort of trying to optimize the execution of our JavaScript on the iOS platform. Without these two tools I believe the development of the game would have taken at least 10 times longer than what it ended up being.
 

5. Recruit others to help out.

You don’t have to do it all yourself! You’re writing code for video-games, so there should be no shortage of people who would be willing to at least try to help you. Having others on the team helps you crank out code faster. It helps to have another set of eyes on the game providing insights that you may not have thought of. Also you’ll find that having others working on the project will keep you accountable. When you lack the drive to keep going, you’ll have others there to encourage you with the new features they are cranking out.

6. Utilize your analytics!

There are a couple gaming-analytics companies out there like Playtomic.com and Playnomics who will log game-data about your users and help you uncover and quantify their behavior.  A really good example about how I used this data was when I monitored the number of times our users failed different levels. I found that the failures spiked at level 5 and 13. This happened because at these levels, we were turning up the difficulty, either by introducing new enemies or increasing the enemy health pool. I saw this spike as a potential problem as it would clearly be frustrating to the user to continuously fail a level over and over. Increasing the difficulty can make a game more fun, but making it too hard would ruin the experience of the player. My solution to this problem was to remind the user on these levels that they have money to spend on upgrades which will in turn make the game easier. We also used the analytics to see at what levels game-play was dropping off. We then used this data to determine the optimal point at which to introduce the next game-play element or new challenge.

7. Cross Pollinate – Release your game everywhere you can.

One of the best things I did to promote the iOS version of the game was to release the game on Google Chrome Store. Because our game was initially written as an HTML5 game, the transition into the chrome-store was a natural one. It took very little time, yet the benefit from it was huge! The first day the game hit the Chrome Store we had 10,000 impressions and 46 installs. That’s 10,000 people that we were able to put our game in front of, and 10,000 opportunities to make a sale. Since release we've averaged about 2,500 impressions and 20 installations per day. I look at each of these views/installs as a chance to sell the game. I think it’s extremely important to get your game out there in as many channels as possible. We still plan to push the game out to Android, Windows 8, and other platforms as we have time. Since the game is written in HTML5 / JavaScript, it can just about be ported to anything with a browser.

8. Get involved in a forum! Ask questions often.

One of the greatest resources I used when working on my game was the ImpactJS Forum. If I was just trying to find answers for bugs in general web-development, Google is king. But when working in a framework or something very niche, you’re better off getting to know a forum and returning often. Initially you might feel like a nuisance asking “noob” questions, but after some time spent asking questions and reading others’ posts, you’ll learn an awful lot very quickly. Before you know it you’ll be helping others solve their problems. I can’t tell you how many times I’d run into a problem and thought “OOH I read that in the forum a couple weeks back and I know just where to find the answer!”.

9. Break the game up and set early deadlines.

I cannot stress how important it is to practice good time management. If you want to release by Christmas, try to be done by November 1st. As I stated before you’re inevitably going to run into problems which are going to push your release back. Padding your schedule for this will keep you from releasing your Christmas themed game on Valentine’s Day. Getting done early just means more time to test and polish the things that were bugging you but you just didn't have time to get to. The benefit to breaking the game up into smaller chunks is that you’re going to know more quickly when you’re getting behind schedule. Recognizing it early can help spark the motivation you need to put in the extra time and get caught up. There’s nothing worse than having to completely abandon your social life the last month before release because you didn't plan accordingly and you have too much work to do, and too little time.

10. Buy lots of coffee!

You’re going to have late nights. These aren't always a bad thing. Many of the late nights for me came when I was just on the verge of solving a big problem and refused to quit, or knocking out a really cool feature that I was excited about. If you stay organized and plan ahead, hopefully these will be the only types of late nights that you have.

11. Don’t plan to make $10k-$100k

It’s OK to be optimistic and hope you get rich from your game. But certainly don’t count on it. Here’s a good article to put your expectations to check in regards to how much you’ll likely make on your iOS indie game! Hoping you’ll get noticed and make it big time is like playing the lottery. 

To date, Zombie Holiday hasn't made enough to cover our art, sound, and game-engine costs. Obviously it didn't cover any of the time the developers put in. But I don't consider that a fail. We all worked on the game for fun. We all learned a lot of valuable skills. And I believe the next game we work on will be significantly more successful. I'd do it over again in a heartbeat!

Update: The year after we released Zombie Holiday, it was picked up by the Chrome Web Store and promoted in their Holiday themed games section. As a result we made a couple thousand in AdRevenue of the span of a couple weeks. I didn't even realize it had happened until Google Ads emailed me to say they were cutting a check. It was a complete suprise to myself and the team. I was happy to send them a surprise check for Christmas!