Your Project Is Not Small

And programming takes a long time.

8/17/2014

Introduction

"I have a great idea for a game, would you or someone you know be able to write it for me?"

I get some variant of this every week or so. An idea for either a game or some sort of Phone app. Every time I try to impress upon them the enormous amount of work that goes into even a trivial game or phone app, and every time it seems that my words fall on deaf ears. I can see the subtle signs of doubt in the corners of their eyes. I can tell that they don't believe me.

This week I got two such questions. One for an iPhone game and one for an iPhone app. Both of them, while seemingly simple, are easily over 100 hours of work. Because I get asked this so often, as I'm sure other programmers do, I figured I'd do a proper write up on the topic and hopefully educate intrepid app designers.

How would I know?

I have been writing software for about 18 years. I have 3 completed games, and I have written more business software than I care to remember.

Details

There's a lot of 'em.

Off the top of my head I am going to enumerate the steps necessary to get a simplistic game onto the iPhone. By no means is this list exhaustive.

That's 15 things off the top of my head that need to be done. I'm sure I'm leaving off a bunch, and of course it's silly to have one item simply be "write game." But even still, even if we assume a hilariously low estimate of 1 hour per item, we're already at 15 hours of developer time for an app that simply prints "Hello" on the screen.

Most developers I know have a "friend price" of about $50 per hour. The "non-friend" price typically ranges between $70 and $90 per hour. So, at the market rate, you're looking to pay -- at best -- $750 for the most simple game imaginable. And that's at an impossibly low time estimate of 15 hours.

For some perspective, I spent about 400 hours on my last game project. (More on that later)

Server-Side

Things get hairy.

Things get much more complicated when you have any form of server-side component to your game or app. Games are often simply stand-alone, but almost every app idea I hear is dependent on a dedicated server to host and collect data. Many of the ideas I hear are some form of product tracking using UPC codes, and those always require a server-side implementation. So, to follow our above simplistic work breakdown, I will create an additional one for a typical server-side implementation.

Once again, using our simplistic (unrealistic) model of 1 hour per task, we add another 10 hours. So now for an app that basically prints "Hello" on the screen and connects to a server, we are looking at 25 hours of work, or $1,250 at "friend prices."

As I stated before, it's obviously absurd to think that this can actually be done in 25 hours. But the point of this exercise is to demonstrate that even in an unrealistically optimistic model, you're still looking at spending $1,250 for the most mundane of apps.

Iteration

You WILL iterate.

You may believe that you have given the programmer all of the information he needs to produce the app. You may believe that your design spec is 100% flawless and leaves no details out. But no matter how effective a communicator you are, and no matter how competent the programmer is, what the programmer produces initially will not be what you want. If you are professional software analyst or project manager and have done this before, I'm not talking to you. I'm talking to the typical person with no real software development experience that finds themselves in a position of telling a programmer what they want built.

You don't realize how much knowledge about your project is in your head that you consider too obvious or unintuitive to document. Additionally, you don't realize how many details are needed to finish the project that never occurred to you.

I could share with you literally hundreds of anecdotes from my career regarding this. Hundreds of times that customers have said things like, "Well of COURSE it has to ahere to the Phorgen act of 1917!" I have had this happen to me in retail point-of-sale design, in web design, in game design, insurance, and many many other areas where, as a programmer, I am not an expert. While your programmer may be an expert on games, they are not an expert on your game idea. There will be many many many details that you forget to tell the developer. Many of them because you never actually thought about them.

So what?

Iteration burns time. It's a necessary evil, but going back and forth eats time, and therefore money. On my last game project I had to do two separate major refactors of the core game logic because of player expectations that were never explained to me. In fact, nobody on the project actually realized that it was a player expectation until the feature wasn't present. It was something inherent in the competing games that nobody actually thought about, and was only consciously noticed when it was not present.

If the programmer tells you that he will be able to program your idea in 80 hours, then you need to triple that estimate. Not because he's wrong, but because when he's done with that 80 hours of work you are going to tell him to change so much stuff it's going to take him another 80. And after he's done with that, you're going to do it again. In 18 years of software development, I have never built anything of any significance that was just out-of-the-box accepted immediately by the client. Not once.

Roadblocks

They will happen.

As I said before, I spent about 400 hours on my last game project. That was by no means a complex game. Granted, a great deal of this time was spent fighting with hardware issues, but that's the point: EVERY software project ends up swallowing tons of time dealing with issues that were unforeseen. If it isn't hardware issues, then it's file format incompatiblities, or texture transparencies breaking on a particular device, or issues with going to sleep, the list goes on and on. Every platform, every game type, every language and SDK all have their own special gremlins that pop out at the most inopportune time and eat hours and hours of development time.

Here's a great example that is fresh in my mind. On my last game I purchased a bitmap font program so I could have pre-rendered fonts. I spent a ton of time working on an importer, but no matter what I did I couldn't get the fonts to render properly. After about 12 hours of work I just shelved it.

Last week I decided that I really wanted to get that bitmap font generator working in my new project. After about 8 more hours of work I finally figured out what was wrong: The Lua exporter on the tool wasn't exporting the data the way the documentation said it was supposed to. I switched to the XML export and I was able to get a renderer working. It is impossible to plan for roadblocks like this. They just happen.

What to do?

If you still really want somebody to write a game/app for you...

Educate yourself.

If you are serious about your project, then you need to manage it properly. It's your project, and you are now the project manager. While a software project manager isn't necessarily expected to know how to write software, they certainly understand the technologies involved, and unquestionably know the logistics necessary to bring a project to completion. If you are serious about your project, you should be able to look at the two bullet lists above and understand what each one means, and what is necessary to complete them.

I will go even further and suggest that if you are serious about your project, then you should gain a decent working knowledge of how the development tools work. If your project will need a server-side component, then you will also need to familiarize yourself with those technologies.

It is important to note that if you plan on developing a phone app that communicates to a dedicated server, it is possible that you will need to hire two separate developers: One for the game and one for the server-side web app. Generally those are two separate skillsets.

Do your own legwork.

Anyone with reasonable computer skills should be able to perform several of the steps above on their own. With a little bit of research, you should be able to get a developer key, provision a phone, and get a simple "Hello world!" app onto a phone.

Here are the first steps I think you should attempt before finding a programmer.

I haven't mentioned source control yet, but it's extremely important. Using a cloud based source control tool such as bitbucket or github allows you to quickly pull down new copies of your app's source code as soon as the developer makes changes. This will allow you to immediately see progress as the app is being developed, and allow you to give feedback early and often on its progress. To a non-technical person the above list may seem daunting, but I believe it is well within the ability of most competent computer users.

I am using iPhone development as an example, but the same basic steps apply for Android. (One difference is that on Android you can copy your app to your phone without purchasing a developer key).

I would also recommend some sort of cloud-based issue tracking and/or project management tool for coordination of tasks. I don't have any experience with any of the cloud-based offerings, but a lot of people like Jira: https://www.atlassian.com/software/jira/pricing. I personally use an older version of Mantis: https://www.mantisbt.org/

If you find yourself saying, "I don't know enough about computers to do any of that! That's ridiculous!" Then I have to ask you: What makes you think that you have any business designing a piece of software? I certainly wouldn't contract an engineer to build a car because I don't know anything about cars. Software is no different. If you have absolutely no computer skills, then you really shouldn't be attempting to have a piece of software built.

Server-side legwork.

Things on the server-side can be a bit trickier. Not because it's necessarily more difficult, but just sticking a server out on the Internet without a systems administration background opens you up to hacking attempts. And this leads to another important point: If your app has a server-side requirement, somebody is going to have to maintain that server and keep it up-to-date with security patches.

Doing all of this is a bit out of the realm of most peoples' abilities, and paying someone to do this for you can be expensive. Therefore, if you are going to maintain a server for your app, I'd recommend using managed hosting at Rackspace: http://www.rackspace.com/managed-cloud/. Prior to paying a developer to work on the server-side aspects of your app you should:

Money Money Money

How much will all of this cost?

This is what you really want to know, but I put it at the end so you had some context for the costs involved. Simply put, if I didn't have a bare minimum of $5,000 to devote to my project, I wouldn't even consider it. I wouldn't waste anyone's time talking about it. Even if it gets done, nobody is going to be happy. Either you'll be unhappy with the results, or your programmer will be unhappy that he got roped in to a flat-fee project that took him 100 more hours than he expected, or you'll end up putting stuff on your credit card because your budget got out of hand.

My budget for my current project is $5,000, and I'm doing 100% of the programming and 1/2 of the art myself. My budget is entirely devoted to paying a character artist, a web designer (artist, not programmer), and a video demo reel. Note that none of this was even on my above lists!

I think that if your game/app is going to have a server-side requirement, then you need to bump that budget up to a minimum of $10,000. To somebody not "in the business," this may seem like a lot of money, but trust me, this is a pitifully small amount of money when you consider the cost of most software projects.

Realistically, I think between $20,000-$40,000 is a pretty reasonable expectation of the cost of a smallish game/app. If this sounds like a lot of money to you, I encourage you to Google some game postmortems, particularly indie game postmortems. The world is littered with people who lost a LOT of money on trying to build their dream game. Check out this link for one fresh in my memory. The short version of the story is that this guy burned $200,000 writing Catch the Monkey.

Closing

Thanks for raining on my parade, dude.

With the literally millions of apps on the various app stores, it may seem like you can just snap your finger and write a game. And in some cases such as Flappy Bird, you can. But behind the vast majority of those apps is a lot more work than you realize. Take a look at Catch the Monkey. If you hadn't been told, would you have believed that it cost $200,000 to write?

Software development is hard, and it almost always takes more time than expected. Even seemingly simple projects end up being complex. Going from an idea to an actual implementation takes a lot of time and effort, and if you don't have a software development background then this very fact will make the project take longer.

Before you talk to anybody about your idea you need to figure out what your budget is. "Revenue sharing" is not a budget. Revenue sharing is shorthand for "work for free." After you establish a budget, you need to do the legwork to get the project started. You need to write a comprehensive design document to present to the developer so they can determine whether the proposed budget is realistic. You will need to be actively engaged in the development process, and understand that even if you think the task is simple, it isn't. Finally, for your project to be successful, you will need to learn to be a good software development project manager, because as soon as you decided to pay to have software written, that is what you have become.