How to build a simple accounting game that actually teaches people the stuff they need
I spent three years building a spreadsheet-based learning tool for small business accounting, and it ended up getting adopted by a community college program just by accident. Here's what I learned along the way, and what you can do if you're trying to build something similar. The core idea is straightforward: take real accounting workflows and turn them into interactive puzzles where the player has to make the right entries to solve problems. Don't overthink the first version. I started with a single scenario — recording a month of invoices and bank transactions for a fictional bakery. If that worked, I knew the format was viable. It took me about two weeks to get from blank screen to a working prototype using nothing but Google Sheets and JavaScript. The most important thing is making the feedback immediate. When a student posts a journal entry, they should know within seconds whether it balances. If they have to click a button and wait three seconds for a server response, the learning flow breaks. Local validation is better. I use client-side checks that run as the user types, and only send data to a server when something needs to be saved permanently.
Here's a specific problem I ran into that took me two months to fix. I built a scenario where players had to reconcile a bank statement with their ledger entries. The issue was that some users would intentionally leave a $0.01 discrepancy to test if the system caught it. The reconciliation logic was too strict — it demanded exact equality down to the cent. In practice, rounding errors in real accounting are normal, and the system should flag them but not block progress. I ended up implementing a tolerance threshold of ±$0.02, and if the discrepancy was outside that range, it flagged the specific entries that didn't match. That $0.01 test became a feature instead of a bug. Players could now learn about rounding adjustments as a legitimate part of the process.
What to Actually Include
Most people trying to build these games start with the wrong scenarios. They begin with journal entries and general ledgers because those are the "fundamentals." They're not. The fundamentals people actually need to learn are accounts receivable, accounts payable, payroll, and bank reconciliation. Those are the things that cause small business owners to lose sleep at 2 AM. Build the game around those four areas first, then add the theory-heavy stuff later if there's room. For each scenario, you need at least three difficulty tiers. Tier one is guided — the system highlights which field needs attention and gives you a dropdown of the most likely answers. Tier two removes the hints but keeps the data clean and straightforward. Tier three introduces real-world messiness: missing receipts, duplicate payments, transactions in foreign currencies, customers who pay late and mess up your cash flow projections. The gap between tier two and tier three is where actual learning happens. That's also where most people quit, so don't make tier three impossibly brutal. A single confusing scenario will burn through half your player base. I also learned the hard way that you need to account for different bookkeeping methods. Some players will be familiar with cash basis, some with accrual. Don't force accrual on everyone from the start. Let them choose, or start with cash basis and introduce accrual as an upgrade. I watched a whole cohort of small business owners disengage because I assumed they all knew what an accrued expense was. They didn't. A quarter of them dropped off before finishing the first level.
Get the Full Details
![Accounting [Gameplay] - IGN](https://assets1.ignimgs.com/2016/09/13/accounting-buttonjpg-f9a146.jpg)
Technical Stack That Actually Works
You don't need a game engine. You need a state management system and a good data structure. I recommend using a simple JSON-based scenario file format where each level defines the starting state of the chart of accounts, a list of transactions to process, and validation rules for the expected outcome. This makes it trivial to create new levels by just writing a new JSON file instead of touching code. For the frontend, React or Vue both work fine. I used Svelte for the prototype because it compiled to smaller bundles, but that mattered less once we started adding audio and animations. The real work is in the backend validation logic. Don't roll your own accounting validation. I tried once and introduced a bug where certain combinations of debit and credit entries were incorrectly flagged as fraudulent. It took six weeks to find and fix. Just use a library like DoubleEntry.js or build your validation on top of a proven bookkeeping library. The last thing you want is teaching people wrong principles because your code has a subtle flaw. Data persistence is the part nobody thinks about until it's too late. If a player walks away and comes back, they should find exactly where they left off, with all their entries intact. I store progress at the transaction level, not the scene level. That way if you add a new scenario or tweak an existing one, players don't lose everything. I've seen other learning games that store progress as a snapshot of the entire state, which means any update breaks all existing sessions. Don't do that.
What Doesn't Work
Points and leaderboards. I added a scoring system to my first version and it made the whole thing worse. People started gaming the point system instead of learning the material. They'd submit random entries hoping to stumble into points, or they'd skip harder scenarios to preserve their rank. I removed scoring entirely and replaced it with a completion percentage and a skill tree that shows you which areas you've mastered and which ones you keep getting wrong. The latter is more useful for actual learning. If someone keeps failing the payroll scenario, they need to know that, not that they're ranked 47th on the leaderboard. Also don't try to simulate an entire ERP system. I saw a competitor product that tried to replicate QuickBooks from scratch inside a browser game. It was bloated, slow, and the game mechanics got lost in the UI complexity. Keep the interface minimal. The accounting is the puzzle, not the button placement. Another common failure mode is too much narrative. I read a design doc for an accounting game where you play as a detective solving financial crimes. The premise was cute for about ten minutes. Then you realized you had to read twenty pages of backstory before you could even start the first exercise. Nobody is reading your backstory. Start the gameplay immediately and embed the context in tooltips or optional reading that players can engage with if they want. Most won't. That's fine.
Testing and Iteration
Get real accounting students to play your game before you launch anything. I tested my first version with friends who had finance backgrounds, and they breezed through everything. Then I gave it to a group of actual small business owners who run restaurants and retail shops, and they got stuck on things I'd never considered — things like understanding why a deposit slip doesn't match your recorded revenue because of cash drawers and under-the-table payments. Those are the edge cases that make the game actually useful. Build for the edge cases, not the textbook scenarios. If you're building this from scratch and want something to reference, the open-source project at github.com/sapiensai/gameplay-accounting-best has a solid starter template with about twelve scenarios already built. It's written in TypeScript with a Node backend, and the JSON scenario format I described above is already implemented. You can clone it, run the dev server, and start customizing in an afternoon. The documentation is sparse but the code is readable if you've ever looked at a React app before.
