Skip navigation

Every single person who has ever played a video game has also come up with a great idea for their own game. Usually it’s a clone of something else, because let’s face it, by now virtually every major “style” of game that will probably be created has been created (puzzle, RTS, FPS, adventure, MMO, open-world, sidescroller, RPG, etc..). But still, style is only the first decision in a long list of decisions that create a kick-ass game.

Anyone with programming experience (and more often those who don’t) has probably, at one time or another, dabbled with the idea of sitting down and churning out a kick ass game in their spare time.

Here are the reasons that it actually happens in only 1 out of millions of times.

1.  Game programming is hard.

There’s no other way to say it.  Game programming is some of the most challenging programming there is, and it’s not for the faint of heart.  The problem is that nobody realizes this until they start.  If I had a nickel for every time somebody thought to themselves, “I want to make a video game, so I guess I will have to code.  Let me learn a programming language so I can do it!” and then quit 2 weeks in, I’d be a millionaire.

It isn’t even remotely enough to “learn a language” to get involved in any kind of game programming.  I am a senior-level professional software developer with B.S. in Computer Science with several enterprise platform applications on the market.  My code has generated literally millions of dollars in revenue for my company over the last few years.  If I think game programming is hard, what should you think, having never written a line of anything in your life?  You’re going to do a couple of Hello World tutorials in C++ and ship a game, huh?!  Yeah right.

I know that going in, of course, but most people who decide to start creating their game don’t.

2.  Game programming is hard.  No, really, it is.

I really can’t stress this enough.  Let me explain why it’s hard.

First, you need to master graphics programming – and these days, the vast majority of people with video game ideas imagine their games in 3D.  2D graphics programming is not easy.  3D graphics programming is extremely intimidating especially for people who don’t understand programming in the first place.  The typical aspirant will read the warnings – and everyone who writes on this topic gives them, including me, because I’m about to do it – that you need to understand vector and matrix math to have a prayer of doing any kind of 3D programming.  The typical aspirant immediately brushes this off thinking, “how hard can it possibly be?” and then downloads a couple of tutorials online that breeze over the material.  They compile and run and think, “gee, this is easy!”  Then they try to do something as basic as move the camera in the plane orthogonal to the LookAt vector and are stumped, particularly because the typical aspirant doesn’t quite understand the concept of a plane in 3D space let alone what “orthogonal” means.

I took senior level courses in college including such titles as MATH240: Linear Algebra, Math434: Math for Comptuer Graphics, and CS427: Computer Graphics.  Even after all of that, I still find it hard.

But that’s just graphics, and when most people think about graphics, they think about world rendering.  They entirely forget that they’ll have to do all of the UI work as well, and UI’s are a pain in the ass to create when you’re using well-established APIs like WinForms or WPF that have already implemented all of the drawing, all of the event handling, and provide you with convenient classes like “button” and do things for you like “scrollbars.”  Guess what?  Unless you buy UI framework for DirectX or OpenGL or XNA or whatever technology you want to use – and the typical hobbyist aspirant person is not going to be able to afford the several hundred $’s these typically go for on a project they may or may not continue – you’re going to have to write all of that crap by hand – that means drawing it, that means trapping mouse events, that means creating an object model to work with behind the scenes so you can respond to UI commands, etc.  Just think for a minute how you’d create, for example, a modal dialog in a DirectX game, or create a menu window that you can scroll.  Now make sure it scales correctly with different viewport sizes, resolutions, full screen… it’s mind boggling.

Once you’ve gotten all of that work done, you can actually start focussing on the game logic.  AI is not trivial.  Pathing is not trivial.  State management is not simple.  Designing a data structure for a game save is not trivial.  Combining all of that with your graphics layer so you can actually display “things” that are happening in your game program space is not trivial.  Even APIs that are designed to help you “make games” like XNA offer virtually nothing in this area.  The XNA “game” gives you a couple of things for free, namely a class with some virtual methods like “update” and “draw” but beyond that they offer very little guidance.

Even if the enthusiast overcomes all of the mighty challenges faced in rendering things that look OK, if he doesn’t have solid background in good app design he’s going to come up with a monolithic piece of crap with 6,000 line methods and spaghetti code everywhere.  That’s no good.

It’s virtually guaranteed that you are going to need to implement at least one of the classic algorithms of computer science like a shortest path, or a minimum spanning tree, because graph programming is going to come up in your game – there’s almost no way around it.  I’ve had to crack open my CLRS tome on multiple occasions.  If you don’t know what CLRS is and don’t have a copy, I hope you’re good at googling.  You’ve got a lot of learning to do!

Oh, you want your game to be multiplayer?  Xbox Live, you say?  So now you’re going to become an expert in network programming too.  Have fun learning threading and understanding semaphores.  I’ve been doing it for 10 years and I still have a hard time understanding it because the human brain is not designed to think in parallel the same way a computer does.  Critical sections and thread-safe objects are tricky stuff for the veteran programmer let alone the beginner.

3.  Game programming is really hard.

Because of all of the above, most would-be game programmers give up once they get in water slightly deeper than what is covered by the free online code samples that guys who write tutorials put online.  It’s difficult enough writing a LOB ASP.Net app that maybe has a database and a checkout system.  That’s easy by comparison to even minor aspects of game programming.  Coming up with the vertices of a geodesic dome challened me mentally at least as much as anything I did for the enterprise software that I shipped last year which has now sold over 1,000,000 seats.

The bottom line is that even putting aside programming experience, most people are not smart enough to program games.  It’s a shame that so kids these days were brought up with the notion that they can do anything if only they try their best.  I hate to break it to these kids, but in reality there are quite a few things that you can’t do, and if you’ve ever tried programming a 3D video game, you might have already discovered that undisputable tautology already.

4. Most people aim way, way too high.

One of the biggest problems with video game development is that people imagine that it’s a lot like playing games – e.g., fun.  The truth is that video game development is really fun but only if you enjoy the act of building a video game for its own sake.  I write video game code in my spare time not because I want to make a video game per se, but rather because I enjoy programming.  I’m one of those fortunate guys who happens to also get paid to write code, but the truth is that the code I write at my day job is boring.  That brings me to an aside-

The video game industry sucks.  If you think that you like to program but you don’t want to write boring business apps and you’d rather program “what you love”, you should realize that you are not the only one who thinks programming video games is more fun than programming online store fronts for department stores.  In fact, since the comorbidity between video game enthusiasts and nerds who like to program is virtually 100%, you can rest assured that every single programmer has fantasized about writing games at one time or another.  The end result of this is that the supply of people who want to write “fun” code is about 10 times larger than the demand.  If you are smart enough to work in this field you should realize that working in a field where you are a dime a dozen is going to mean that you get treated like crap and turned over a lot.  When you add to the fact that 10% of games make 90% of the money, if you didn’t happen to land the World of Warcraft team or write the code for the Halo UI you’re pretty likely to get fired when that game (your “passion”) that you put 80 hours a week in on for 2 years ships and doesn’t sell.  Stay away.

But, back to the main point, you as an individual, or you as a small team, are not going to compete with the AAA titles who spend literally $50m on their titles and have an army of programmers, QA, artists, sound engineers, composers, and voice actors.  If you try to make a Halo clone or the next Modern Warfare or the next (LOL) World of Warcraft you’re going to fail miserably.  When you look at the “Indie” developers who have any success, their games are simple.  Take Braid or Super Meatboy for example.  Both of those games are, at their heart, simple platformers whose graphics consist of some 2d sprites, but in each case, they came up with a new gimmick that makes it interesting – in the former, the concept of real-time rewinding (and integrating that into moving forward – really cool idea, actually), whereas in the latter, it’s just really super hard but they get you back into the game so fast you barely noticed you died, so you can try that jump a hundred times in quick succession.  But what really makes that game is the fact that it records all your attempts and then replays them all at the same time so you get a screen filled with exploding meat.  Who ever would have thought those games would make money?  Which leads me to…

5. “If it’s not as good as an AAA title from EA, no one will play it, so why bother?”

One of the most discouraging facts faced by the hobbyist game developer is the knowledge that you will never be able to produce something as good as a major studio in any reasonable timeframe – it would take the average person 10 years of serious work to do everything that a team of 20-50 people can do in the typical game dev cycle.  By the time you’re done, you’re using a platform that has been retired for 5 years, because the tech moves so fast.

Faced by this, most people just give up, which is a shame.  Most of my favorite games were put out by tiny teams using relatively bad graphics – in some cases the games don’t even have graphics.  It’s true that the standards for video games these days are high, but it’s also true that often times a unique idea, or even an elaboration on an existing idea, is more powerful than brute force, which is something a lot of publishers, particularly EA, uses.

Any time I think this thought, I remind myself:

  • That I’m doing it because I like building it, not because I care how many people will fall in love with it and give me tons of money.  Hey, it would be nice, but that’s not the goal.
  • I am not an AAA title developer with a staff of 50.  Why on earth should I expect voice acting?  Is it admirable considering 1 guy is making the game?
  • Some of my favorite games were made by as few as 3 guys.
  • EA publishes Harry Potter: The Movie: The Video Game.

The last one is really the one that motivates me.  Yeah, sure, major game studios make a lot of awesome stuff, but they also churn out tons and tons of crappy titles every year.  Even without a high poly model of Emma Watson done by a professoinal 3D artist, I can make a better game than Harry Potter.  No matter how bad Harry Potter is at least one person is going to buy it, and since I don’t have a staff or any expenses because I’m doing it for fun, if I had made Harry Potter I’d probably make enough money to put my kids through college.  If someone will buy Harry Potter the video game, someone is going to buy what I make.

6. You have to put in hundreds or thousands of hours of work before you see results.

It takes so much infrastructure code before you get anything even remotely “playable.”  Game development, like any development, lends itself to iterative development, but the first construction iteration – where you build your “engine”, and believe me, even if you use an open source graphics engine, you still need your own “engine” because you need to write code to put things on the screen – that takes a long time.  You will need to solve a lot of basic problems before you can get going on an actual game.

Most people don’t have the patience to go through the early construction phases.  Most people who fantasize about making video games imagine that all they really need to do is the actual game work.  In the industry, the game work is called “design” and is done by those guys who were hired by the company and immediately issued a giant silver spoon to take rectally.  These are the guys who usually don’t program or create art (although to be fair, most of them used to do one of those jobs before they won the game industry lottery and became designers).  They get to sit around all day and work on things like game “balance” and “lore” and “world” and all of those other fun things that most people imagine is game development.  Don’t get me wrong – I guarantee Ghostcrawler over at Blizzard works overtime trying to balance World of Warcraft and that game owes a big part of its success to that effort and he deserves every penny and every stock option he gets, but my point is only that game “design” is the job everyone wants, both inside the industry and in the world of the hobbyist.  Very rarely does the amateur game developer stay awake at night fantasizing about all the neat code he’s going to get to write or all of the neat 3d models he’s going to have to steal from 3d art sites because he’s not a 3d artist and 3d art probably takes even more time than programming does.  No, he stays awake at night designing hs game.

So, when he’s faced with the idea that he’s going to have to put in many, many, many hours of mentally exhausting grueling work before he can actually put to life any of the ideas that inspired him to start working on a game in the first place, 99 times out of 100, he gives up before he starts.

Like I said, if you don’t enjoy the actual building phases – namely doing the programming and the content creation for its own sake – you will never get beyond this hurdle.

7.  Most people have either programming skills or art skills – rarely both, often neither.

This is another daunting problem.  Most would-be game developers believe that anyone can learn how to program and that’s where they start, imaging that it’s easier to learn than 3d modeling.  Plus, programming tools are free and 3DS Max costs hundreds or thousands of dollars or whatever it is these days.  Even if the would-be developer learns how to write some C#/++ and makes a game engine, he’s probably using the graphics that came bundled with the tutorials he downloaded and there’s that nagging question that bites his ankles every time he writes a line of code:

Where the heck am I going to get art for this game (without stealing it from a copyrighted work?)

If you’re flying solo and have no art skills, this question is really tough to avoid.  It’s another big reason that people give up on their games.  If they can’t make the game look good, they don’t want to do it.  This is a particularly frustrating aspect since everybody can imagine what they want their game to look like, but only artists have the ability to translate their imagination into usable pixels.

The best advice I can give on this particular problem is this: start by stealing it.  If you can’t find royalty-free models, steal commercial models if you can and use them as placeholders.  If you are one of those people who has to be impressed by the way your work-in-progress looks in order to stay motivated, then make yourself impressed.  If and when that day comes where you are ready to publish your game Indie-style (phone, XBox Live, etc) and try to make some money, and you’re still using commercial models, I guarantee that you’ll be able to find a person or person(s) with 3D art skills who would love to help you put what really amounts to the finishing touches on the game in exchange for a cut of the proceeds, because it’s a lot harder to create a video game when 3D modeling is the only skill you have, because somebody has to code the damn thing.

When it comes down to it, the only time art really matters is when you’ve gotten far enough to where you’re seriously considering a release.  And hey, if you’re at the point where your hobby game is going to be released, you’ve already succeeded

8.  Daydreaming is way more fun than doing.

Ultimately, it usually comes down to the fact that most aspirant game developers enjoy fantasizing about their ideal game but don’t actually enjoy the process of making a game because as anyone who works in the game industry will tell you, building a game is a lot different than playing one – or imagining one.  Games don’t get made because making games isn’t fun for most people.

This, my friends, is what it takes to make a game.  Very few people have what it takes, because very few people look like this IRL:

… and that’s what it takes.



  1. I dream of a dream – That I’m gonna make a AAA title all by myself and you’re gonna lose a nickel

  2. I really enjoyed reading this. Obviously, I love video games. I have a great imagination, (well, I’m always told I do. That’s not really something you can judge yourself on.) but most importantly, I actually enjoy math. I doubt enjoying math is the only thing that one needs in order to enjoy coding. but, it’ll be fun to fantasize about until another downer like your self crushes my dreams.

    • Just the facts, ma’am.

        • Tristan
        • Posted November 5, 2012 at 1:42 am
        • Permalink

        Yes, we get it video games are hard. I totally agree, there are many people who are intellectually unequipped to conceive the programming and developing that goes into making a game. This article is, in it’s own nature, a deterrent to would-be future developers, that’s no good. The only way for this mega industry to grow as fast as possible is to have as many people involved in it as possible, yes many will lose interest and give up, but the few who didn’t, even if they only end up coding like you, will take the spot of someone more talented and imaginative so they can be promoted to something more useful to the industry. By writing this you could have possibly turned away the key person to full immersion VR or just prolonged it for twenty more years. Why do you care if a persons dream isn’t what they thought it would be, that’s life and your “facts” are soaked in negative opinions that give rise to suspicions that you yourself are one of those naive boys who discovered your dream game idea would never become a reality and have had to try to convince yourself that you are lucky because you “like” to code even while watching those designers take for granted what you have groveled over. You should be encouraging everyone to take on the challenge. I speak on behalf of all gamers, we don’t care about the hardships of the industry, we just want great video games from a thriving video game industry. A hospital patient wants the best and cheapest treatment, they do not care about the hardships of becoming a doctor. they just want it to be done right and for there to always be a flourishing healthcare industry. So quit complaining and instead encourage anybody with the slightest interest to contribute to the video game industry whether be an indie work or a collaborative team effort. Thank you for sacrificing your dreams for the sake of my entertainment, I hope you keep passionately doing it, until the day you die.

  3. This post might indeed be a bit of a downer for most people. But rightfully so. People don’t realize how much effort goes into making a game. It’s really quite like making a movie. Just watch some making of featurettes on DVDs/Blu-Rays, and you’ll start getting a grasp how much work and planning goes in to making something you can enjoy on a screen.

    I have no illusion it’s gonna be hard, but I’ve made small steps already, and am very confident I can take on any challenge that I’m going to meet. Also, I -love- indie games, and that’s exactly my goal. Actually, I think I buy about 10-20 indie games for every major title (last one was Portal 2, and now Diablo 3).

    I think art, sounds and music are becoming more accessible through stock sites as well, so that may be of great help. I’m not a great graphic designer, but I think I’ll be able to make some decent looking sprites/interfaces when I need to. As for 3D modelling, I’ve done that for years (as a hobby), so that’s not gonna be a big problem either. And I’m musical too.. lol.. got a midi keyboard and love mucking around with MixCraft.. tho I’m not really good at making music (yet), and it doesn’t help much I put crazy high standards on myself.. so I hope I’ll be able to use some existing music instead (no idea how much a band or composer asks when you want to use one of their songs?).

    But I totally agree it comes down to enjoying the process. I’ve been programming in PHP for about 10 years now.. and it wasn’t until I started playing around with C#/XNA that I realized that I don’t really enjoy PHP anymore.. prolly because I’m getting bored with it. It’s fun to be challanged and learn something new again!

    In the end, I just wanna make games I would really enjoy (tho I prolly won’t by the time I put 1000 hours of testing in to it 😉 ).. and hopefully my friends and some other people too. And I think I can do it, because I’ve been playing games most of my life, so I dare to think I know what makes a game fun to play.

  4. I’m going to be back and say that I was successful in selling a game made by me and a friend in 2 years from now and yes I’m a beginner.

  5. Nice read. I’m currently making a game, selling it on pc, android and ios. I’m blooging about it and recording my progrress.

  6. One of the best articles i’ve ever read and i did read it 2 years ago (for the 1st time). I hope that you will continue with this blog again at some point! Cheers.

  7. The person that wrote this hits it right on the head. game programming is hard. i always wanted to design a video game myself then i can to realize i cant do it all by myself you need a team at least 3 guys. i can make the graphics for the game but i dont know crap about programming i tried to learn and the only thing i can do is basic programming and lets face it with out the programming you just have art on the screen. if you really want to create a video game best bet is to come up with the idea go to a college ask around for a team of computer science majors that have programming skills and get some graphic artists and ask them to help you with your idea you might have to pay them or list them in the end credits. you still have to keep in mind that it will take at least a year for you to even get a beta verison of your game. then you have to get some testers to play your game dont just get your buddies to test you will need pros so they can give you detailed lists of all the bugs and help figure the right and cheapest way to fix them. then you have to find some one to publish and distruibute the game and thats another beast all on its own. it might be different with apps or pc games im talking about console games. some people may think i dont know what im talking about but this is what ive done, i hit a brick way with the publishing and ditruibuting of the game.

One Trackback/Pingback

  1. By Studying - Which College To Choose on 28 Mar 2011 at 1:25 pm

    […] building games might be an avenue in the future Oh, sure, I mean how hard can it be. Last edited by Skurm; Today at 03:23 PM. Reply With […]

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: