What running game jams taught me about shipping software

March 18, 20265 min readBy Harman Kamboj
Game devBuilding in public

The first time I ran a game jam, I watched a dozen talented people spend Friday night arguing about engine choice and lose the whole weekend to a project nobody finished. That weekend changed how I think about shipping. A game jam is a brutal little laboratory for the one skill most engineers are bad at, which is finishing something inside a hard deadline. I have run a fair number of these now, and the lessons carry straight back into how I ship real software at work.

A game jam is a forced lesson in shipping

The whole format is built around a clock. You get a theme, you get 48 or 72 hours, and at the end there is a hard cutoff where something either runs or it does not. There is no sprint extension, no moving the date, no negotiating with a product manager. That constraint does something useful to your brain. It strips away the comfortable lie that you will polish it later, because there is no later.

What I have seen over and over is that the teams who win are almost never the ones with the best idea on Friday. They are the ones who picked something small enough to actually build and then spent their remaining hours making it feel good. The idea is cheap. The finishing is the entire game.

Scope is the only thing that kills you

Every failed jam project I have watched died the same way. The team fell in love with a vision that needed a week, and they had a weekend. By Saturday afternoon they had a half-built inventory system, no actual gameplay loop, and a slowly dawning panic. Nothing got cut in time because cutting felt like admitting defeat.

The teams that finish treat scope as a living number they revise every few hours. They ask a simple question. If we stopped adding features right now, would what we have be playable start to finish? If the answer is no, they do not add anything new until the answer is yes. That single discipline is worth more than any framework.

  • Pick one mechanic and make it the whole game, not feature number four
  • Build the smallest version that loops from start to a win or loss state
  • Cut anything that does not make that loop more fun
  • Leave real time for bugs, because they always cost more than you think

Finishing is a separate skill from building

Most engineers are good at building and bad at finishing, and a jam exposes the gap instantly. Building is the fun ninety percent where you write new code and watch things come alive. Finishing is the unglamorous last stretch where you fix the crash on level two, write the title screen, make the controls explainable in five seconds, and export a build that actually runs on someone else's machine.

That last part trips people up constantly. A game that only runs on the author's laptop is not shipped. I have learned to do a real build and test it on a fresh machine hours before the deadline, not minutes. The same rule applies to production software. A feature that only works on your branch with your local database is not done, and the gap between those two states is where most schedules quietly bleed out.

Constraints make better decisions

There is a counterintuitive thing about working under a tight clock. The constraint usually produces better work, not worse. When you have unlimited time you keep all your options open, which sounds good but means you never commit to anything hard enough to learn from it. A deadline forces commitment. You pick a direction because you have to, and committing early gives you time to react to what you learn.

I bring this into normal engineering by timeboxing the messy parts. Instead of an open question like how should we architect this, I give myself two hours to build the dumbest version that works and see what hurts. The dumb version almost always teaches me more than another day of whiteboarding would have. You cannot think your way to the right design as fast as you can build your way to it.

Small wins compound, and so does momentum

The other thing jams teach is the value of a working build at every stage. Good jam teams get something on screen in the first hour. A box that moves. A click that does anything. Then they keep it runnable the entire weekend, adding one small thing at a time. Their game is always playable, just less complete than it will be.

Teams that go dark for ten hours building some grand system in isolation almost always come back to a pile of code that does not integrate, with no time left to fix it. This is the exact failure mode of long-lived feature branches in real work. Integrate constantly, keep main green, and you trade a few dramatic finishes for a lot of boring successful ones. After enough jams, boring and finished starts to look like the most impressive thing in the room.

The deeper point is that shipping is a habit you build through reps, and a game jam is a concentrated dose of reps. You make scope calls, you cut your darlings, you fight an export bug at 2am, and then you actually release something to other humans. Do that a few times and the fear of finishing real software gets a lot smaller, because you have practiced the hard part in fast forward.

Building something where this matters?

I am open to senior full-stack, Web3, or AI engineering roles, fully remote and any timezone. If the hard part of your product is fighting you, that is the work I like.

Get in touch →