Game Design, Programming and running a one-man games business…

Rethinking the game dev productivity gap

Its really only in the last six months I’ve realized this, and I’ve been an indie for twenty+ years and coding for 39 years, so yeah…this took a while to sink in.

I am frustrated on a CONSTANT basis by the lack of productivity of almost everybody in the universe. I am especially irritated by the low productivity of most people in game development, and most indie devs. I almost never read about the development schedule of a game, (mostly through post-mortems, interviews or chatting to actual humans), without being shocked at how long it took to do stuff.

For most of the time, I have attributed this to an attitude. I work pretty much every day, and for most of the day, although my schedule these days is deliberately lighter than the early years. I’m prone to going out for lunch or to coffee shops, but then I’m prone to working all day Saturday and Sunday, so YMMV. I also often reply to forum posts, youtube posts, blog posts and emails in the evenings from my laptop. I’m often thinking about code when I’m not writing it.

Because of this, I find talking to people with a less work-centric attitude to be infuriating. It boggles my mind how long it takes most devs to add what seem like easy and simple features to games. I am constantly told that I am woefully inefficient because I don’t use unity, but still seem easily capable of working faster in terms of adding features & content than the very people who berate me for not using such productive tools.

So yup, I often think such people are just lazy. Or do not have the same attitude as me, or do not realize just HOW HARD it is to compete in this industry. In other words I think that their mindset is less focused, and its a personal weakness on their part, because yup…i’m a bit obsessed.

But now..I’m thinking there are two other things that explain the disparity better.

First thing: Lack of distractions. I have 3 cats, and live with my wife and these 3 relatively-low-maintenance pets, but no kids. I have a hobby of playing the guitar, which I make myself do a bit each day, but thats it. I am not having to take time out to walk the dog, pick kids up from school, drop kids at school, answer questions from kids, sort out other stuff for kids, walk the dog again, and so on. My wife is a writer, so has the same introverted ‘happy to be alone with a keyboard’ daytime work schedule as me.

Nobody ever phones me, unless its an elderly relative. I have a call screener device to prevent phone spam, and we live in the middle of nowhere. Nobody knocks on our door trying to sell us anything. There is very little noise. Its the perfect set up for zero distractions. If you possibly can do ANYTHING to reduce the distractions in your day, do it.

The second thing: experience.

This is the big one. I’ve been coding for 39 years. Thats an AGE. When I first started learning computer programming, this person was US president:

Image result for jimmy carter

Yup, exactly.

That means any silly mistake you can make when designing code…I’ve done in thirty times. 95% of my conversations with fellow devs when I’ve hit a bug go like this:

“Could be a memory-bounds issue…?”

Me: “Nope”

“Could it be that you deleted the object?”

Me: “Nope”

“…Maybe its a multi-threaded synch issue?”

me: “Nope”

…and so on.

Now that sounds super arrogant, like I think I’m the bees knees at C++. Actually I am not. I am not that good an all-round programmer *at all*. I am VERY good at learning in excruciating detail about the elements of C++ that I use, and nothing else. Because I work for myself I have no marketable need to be an all-rounder. I don’t need to learn ‘agile’ or ‘scrum’ or ‘.NET’ or RubyOnRails or whatever the hell jobs ask for this week/month/year. Its irrelevant to me, so I can be VERY good at VERY few things. This is hugely efficient.

Plus… again, trying to put my arrogance in context here… language proficiency is language proficiency, whether its English or C++. C++ is way less forgiving than English, but still…how good at English were you when you had been speaking it for just five years…versus thirty years? Hardly an exact comparison I know, but I think its a good mental exercise. I get better at C++ every year, but in a way that is not exactly how you would think:

I do NOT know more ‘clever tricks’ than a newcomer to C++. I do NOT have a better memory of the syntax of C++ than a newcomer. I do NOT type *that* much faster. I do not make use of a wider range of the standard C library than anybody else. I don’t do any of those things. What I *do* better, is that I have just learned from my mistakes.

A lot of mistakes.

I used to take the odd coding test in job interviews back in the day. These tests are good for one reason: to see if the candidate has any clue about syntax. Thats pretty much it. The amount of code required otherwise renders the test pretty much useless.

The trouble with C++ is that it attracts hotshot coders. These are people who think a super-complex algorithm, or the algorithm that uses the most clever combination of features will somehow get them more sex/money. This is predictable and sad, but not useful in terms of real productivity.

The best code, is the combination of three things:

Simplicity, Performance, Readability.

A lot of really, really good code looks fairly boring, because boring is often simple, fast and readable. The worst possible insult you can get from a senior/lead programmer with experience is this:

“That looks a bit over-engineered”

Its truly a damning insult, but you only really realize how insulting it is after about thirty years of writing crappy code. I wish I knew of an easy way to help people fast-forward those thirty years and develop the skills you have at the end of it, without those thirty years but I don’t think I can. The only advice I can offer is this:

  1. Write as much code as you can. Not over-engineered nonsense, but just code a lot. Put the hours in. At least the thousand obviously, but likely way, way more.
  2. Get a job with a really experienced coder and ask for criticism of your code. Only someone who works with you all the time will read enough of your code to really give you structural, high level advice on why your code sucks.
  3. Read code-complete at least twice, if you have not done so already.
  4. Get cats not dogs. Cats don’t need a walk.

Hope that helps someone :D

13 thoughts on Rethinking the game dev productivity gap

  1. I would guess that your still not using a game engine, therefore you have complete control of your code and bugs.

    Could I suggest that you try using a modern game engine:

    Unity : You just need to adapt your C++ knowledge to C# and get up to speed with Entity Component Systems.
    Unreal : Great you already know C++ now learn the API or Unreal way of game development, remember every game is really an FPS…

    This will introduce you to the modern world of game development for most game developers. Maybe you could do it as a bus mans holiday and report back your findings?

  2. Cats have the habit of sleeping on keyboard, not practical, and probably think your mouse is real hence try to rip off your arm when you move it plus they have this new tendency of looking at your code with that condescending look, nah get a plastic duck, put it on your desk and try to explain to it what your code does, if it blinks it”s time to call it a day an go to sleep.

  3. I respect you a lot, and I think you are right, you have more experience than a lot of people.

    And yet.

    Not that long ago, you were puzzled by an “impossible bug”[1].

    Yet a lot of us with less experience than you (and kids, and a lot of other distractions) had encountered this particular problem many times, to the point of people dedicating entire websites to the problem.

    This doesn’t invalidate everything that you just said on this blogpost. But, you know. Stay on your toes, old man ;).

    [1] I’m talking about: , if you must know. But that’s not relevant to my point.

  4. Writing single-platform code really helps productivity too.
    My project is on (counts…) seven separate platforms, so every time anything at all changes it’s a reasonably high chance that one of them won’t like it, and it certainly won’t be the one you’re currently looking at. Today it was stencil buffer crashing only on DirectX, and it took at least an hour just to notice.

    “That looks a bit over-engineered”

    Oh man, I put this on a code review this week. I was trying to be tactful. Hope they don’t read this.

  5. I think have complete control over your code is important. It makes me mad that every indie these days uses Unity without thinking about it telling you they are more productive only to fight all the game around specific engine details that doesn’t fit their project well (which isn’t probably Unity’s fault at all – they need to be a general engine so they have to abstract things which probably is not the best solution for YOUR problem right now) or constantly fighting with updates / breaking api changes. In my opinion they also don’t value their own code, because they taking the risk that in the (probably far) future, they not able to build their game out of the box anymore or porting it to an exotic platform unity doesnt support and so on).

    I also think that modern game/software development really hurts productivity while promising the opposite. When I worked in a big game company many years ago I was also thinking that all this stuff is great (because I’ve learned it that way from people that I thought were clever) and I’m so grateful and thankful that I stumbled upon people like Casey Muratori or Jonathan Blow who opened my eyes in that regard.

    The same is for project management models. While I don’t know it for sure, because that stuff really doesn’t interests myself, I think probably the problem is that big companies like Google probably need to have such models because of their size / because teams are made up rather randomly. But nowadays everyone thinks if Google does it, we also need to do it the same way (although the conditions are completely different).

    People nowadays are just reading some random (unproved) stuff and applying it without thinking about the consequences at all. I think this is also the problem why the software industry is in a rather bad state nowadays with projects taking forever, software being buggy and/or slow as hell and no one even cares about it.

  6. There’s a ton of truth to this.

    I currently work as a software dev manager for a bank, but I spent considerable time in the games industry. My last role was as lead programmer on a mobile game, built on Unity.

    I spent half my time pushing back on people trying to add MORE complexity / dependencies to the codebase. UI developers wanting to incorporate the latest UI plugin. Producers wanting 3rd party libraries integrated with the client and server for metrics. External dependencies everywhere.

    Add in two platforms (iOS and Android), and an ever evolving engine, and there was literally never a time where something was not broken somewhere. We had to run just to stand still.

    Now, in Finance tech, I spend my days arguing against the latest fad in “enterprise architecture”. People wanting to use Apache Spark when they have tiny data volumes. People splitting everything into dozens of microservices, so now to understand the true code flow you need to run 7 processes on your machine. An unthinking obsession with object orientation that splits logic between hundreds of classes, such that your object graph looks like someone vomited on a UML diagram.

    People can’t help themselves. It drives me insane. Write something simple that works and fits your known use cases. Limit your external dependencies, because each one is a source of bugs / pain. Evolve / iterate from there.

  7. another good post.. thanks!

    Yeah, I see this a lot, it frustrates me seeing young programmers being encouraged to use a script engine.

    Well, here’s an analogy, using a 3rd party engine is like using porn… if you’ve never had sex and you get addicted to porn, you’ve missed the point.

  8. Being the project manager, the product owner, the “business analyst” and the single programmer combined in one person, helps multiple magnitudes for productivity.

    Lots of productivity is lost in syncing with other people, be it on a technical or business level. Not getting lost in translation from business/idea to programming logic or the other way around, will make everything easier.
    A large portion of my time is spent talking to POs and sitting in meetings where the requirements are presented and estimated, so features can be planned.
    Not to forget the last minute change, because someone, somewhere in the higher management wanted it differently.

    Another large portion of my time is spent reading old code that nobody has any knowledge on anymore. We have a lot of legacy application code, game studios have a lot of existing engine code that they hadn’t written.
    It’s as much experience that matters as knowing literally everything about your codebase.

    Then again, how much time in big studio game development is really spent on writing code? Nowadays I think the focus is much more on content creation (models, scripts, textures, dialogs, etc) via tooling, than hardcore engine coding.

  9. The time I lose comes not from coding, but from spending time figuring out solutions to problems that must be solved before I can even start coding. The solutions always turn out to be so simple, I get angry at myself that I didn’t figure it outright away. Surely there must be a method that helps people solve problems faster?

  10. Walking the dog could be good to your productivity, outside time will boost your creativity, walking helps keeping the blood flowing (sitting 10 hours is a lot) which improve spine health. Plus, there is the unconditional love you receive from this cute companion.

    As a popular saying goes:

Comments are currently closed.