Quick answer: A spreadsheet is the best balance tool most indies never formalize: model your numbers (damage, costs, XP curves, drop rates) in sheets where formulas expose relationships, see entire systems at a glance, and pipe the data into the game via CSV/JSON export so the sheet is the source of truth — tune in the sheet, reload, test. The point isn't the math; it's making consequences visible before players find them.
A spreadsheet is the best balance tool most indies never formalize: model your numbers (damage, costs, XP curves, drop rates) in sheets where formulas expose relationships, see entire systems at a glance, and pipe the data into the game via CSV/JSON export so the sheet is the source of truth — tune in the sheet, reload, test. The point isn't the math; it's making consequences visible before players find them. That's the short version — the sections below get into the how, the why, and the mistakes worth dodging.
Why sheets beat in-engine tweaking for systems
In-engine, each number is edited in isolation and consequences hide; in a sheet, the whole system is one screen — every weapon's DPS computed alongside its cost, time-to-kill against every enemy tier, XP-to-level plotted as the curve it actually is. Outliers become visually obvious ('why does the bow out-DPS everything at half cost?'), and a global question like 'enemies die 15% too fast' becomes one multiplier cell instead of forty hand edits.
The discipline scales down: even a ten-enemy action game benefits from one afternoon building the sheet, because the sheet is where you discover the design's actual shape.
Derived columns are the design tool
Raw stats (damage, attack speed, cost) matter less than their derivatives: DPS, damage-per-resource, effective HP, time-to-kill matrices, gold-per-minute. Build those as formula columns and balance against them — designs are about experienced ratios, not raw numbers. Charts earn their keep here: an XP curve as a line instantly shows the grind cliff that a column of numbers hides.
Keep reference anchors: a 'baseline' row (the standard sword, the level-1 enemy) every other row is implicitly measured against. Most balance chaos is the absence of an anchor.
Close the loop: sheet to game data
The upgrade from 'calculator' to 'pipeline': export sheets as CSV/JSON the game loads at startup (every engine reads these trivially), so the spreadsheet is the data — no transcription, no drift between model and build. Tuning sessions become edit-export-reload, fast enough to iterate live with playtesters.
Version the exports with the project and stamp builds with a data version: balance changes become diffable, revertible patch-note material. The endpoint of this road is mod-friendly data files and a designer (you) who never recompiles to retune — both free side effects of one good habit.
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.
Automate the step you dread
Whatever release step you dread — building all platforms, uploading to Steam, updating version numbers — is the step you'll postpone, and postponed releases mean slower fixes and staler feedback. Dread is a signal: that step wants a script.
You don't need a DevOps team. One shell script that builds and uploads is 90% of the value. Each manual step you remove makes shipping a small patch feel routine instead of risky — and teams that patch easily, patch often.
Plan for the bugs you won't see coming
Whatever else you take from this, build yourself a way to hear about problems. Once your game is on other people's machines, most failures happen out of sight: the crash on hardware you don't own, the save that corrupts once in fifty exits, the bug players mention in a review instead of a report.
A lightweight crash and bug reporting setup — even just Bugnet's free tier wired into your engine — turns that silence into a fixable list. The devs who look calm at launch aren't luckier; they just see their problems earlier.
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.