Quick answer: Small game teams want the simplest thing that keeps main shippable: work in short-lived feature branches (days, not weeks), merge back fast, and let main be the build you'd hand a playtester any day. Long-lived branches are where game projects go to suffer — binary assets make big merges miserable, so the strategy is really 'merge before merges get hard'.
Small game teams want the simplest thing that keeps main shippable: work in short-lived feature branches (days, not weeks), merge back fast, and let main be the build you'd hand a playtester any day. Long-lived branches are where game projects go to suffer — binary assets make big merges miserable, so the strategy is really 'merge before merges get hard'. That's the short version — the sections below get into the how, the why, and the mistakes worth dodging.
Main is the playable truth
The one rule worth enforcing: main always builds and runs. Playtests come from main, builds come from main, panic-day rollbacks come from main's history. Everything else — branch naming, PR ceremony — is negotiable, but a broken main stalls the whole team and erodes the trust that makes shared code work.
Cheap enforcement: a CI job that builds the game on every merge, and the social contract that breaking main means dropping everything to fix it. Two-person teams need this exactly as much as ten-person teams; they just find out later.
Short branches because game merges hurt
Code merges are solvable; scene, prefab, and binary-asset merges often aren't — two people editing the same Unity scene for two weeks produces a conflict no tool untangles. The mitigation is duration: branches that live days touch less, conflict less, and merge trivially. The week-plus feature branch accumulating dozens of asset changes is the standard self-inflicted wound.
For genuinely long features, merge main into the branch frequently and slice the feature into landable increments (feature flags or just disabled content). Teams also adopt soft file ownership — 'I'm in the boss scene today' — because the cheapest merge conflict is the one avoided by a Discord message.
Release branches when shipping makes you need them
Pre-launch, main alone suffices. Once builds go to players, a release branch earns its place: cut it at feature freeze, stabilize and cherry-pick fixes onto it while main moves on, ship from it, tag what shipped. It's the mechanism that lets 'fix the live bug' and 'build the next update' coexist without shipping half-finished work.
Tag every shipped build regardless of strategy — when a player reports a crash 'in 1.2.3', checking out exactly 1.2.3 should be one command, not an investigation.
Your future self is a stranger — leave notes
Six months from now you will not remember why that magic number is 0.73 or which scene is safe to delete. Project knowledge that lives only in your head evaporates on contact with a break, a jam, or a day job crunch.
Keep one running NOTES file: decisions made, things that look unused but aren't, how to do the fiddly release steps. Five minutes of writing per week buys you days of re-discovery later.
Boring tools are a superpower
Every hour spent fighting your own pipeline is an hour not spent on the game. The goal of tooling isn't sophistication — it's that builds, backups, and versioning become so boring you forget they exist. Set them up once, automate them, and let them run.
The test is simple: if your machine died tonight, how long until you're working again? If the answer is 'an hour', your tooling is good. If it's 'I'd lose a week', fix that before adding any feature.
Close the loop with real players
Advice gets you to a sensible starting point; only real player behavior tells you if it worked. Ship the change, then watch what actually happens — the reports that come in, the errors that spike or vanish, the place sessions end.
Make that loop short. When a player can report a bug in ten seconds and you see it with logs attached, you stop guessing what to fix next. Tight feedback loops are the closest thing indie development has to a cheat code.
Putting it to work
Don't try to act on all of this at once. Pick the one change that costs you the least and pays the most this week, do it, and see what actually happens before reaching for the next.
Most of this rewards steadiness over intensity. A small improvement made every week, checked against how real players respond, outruns any single burst of effort — in this corner of game development and every other one.
If your machine died tonight, you should be working again by morning. Build toward that.