MSP Tycoon is LOG-002 because it’s the second time we’ve shipped something and meant it — and because it’s a rebuild, not a first draft. The first attempt was called IT Empire Idle. This is what happened between that and where it is now.
The ask
We wanted an idle game, in the Cookie Clicker mold, themed around running an MSP: close tickets, hire staff, buy the tools of the trade, sell the company, do it again. The first build had the right idea and the wrong foundation — two separate timers driving the game loop, state getting read back out of the DOM instead of tracked properly, balance numbers baked into the save file so changing anything broke everyone’s progress. Rather than patch a structure that fought us at every turn, we scrapped it and rebuilt from a blank file.
The build
One interval owns the whole simulation now. One currency, one verb — closing a ticket earns revenue, revenue buys staff, staff close tickets while you’re not looking. Eight staff tiers, thirteen upgrades, and a prestige loop: sell the company, bank permanent reputation, start the next run faster. Config — staff, upgrades, pricing — is never written into the save file, just counts and flags, merged field by field with unknown ids dropped. That one decision means we can change the economy freely without breaking anyone’s progress, which is exactly the thing that made the old build painful to touch.
What actually broke
The best bug was the dumbest one. Moving the prestige button onto its own tab meant it stopped existing in the page’s static markup — it gets built by the store’s own render function now, only while that tab is open. One leftover line from before that change still tried to wire a click handler to it at startup. Looking up something that doesn’t exist yet returns null, and calling a method on null throws — which killed every line of setup below it. No canvas sizing, no floor animation, no game loop, nothing.
What made it worth writing down: the symptoms didn’t look like one bug. No background — because the canvas never got sized. No income from staff — because the game loop never started. Staff appearing only after switching tabs — because the tab-switching code happened to be wired above the crash, so it survived and called the render function that everything else needed. Three unrelated-looking complaints, one dead lookup. We added a visible error banner for anything that throws from here on, since this is exactly the kind of failure that shouldn’t get to hide.
Teaching the game to teach itself
A number on screen doesn’t explain itself. Every store row now carries a tooltip with the numbers that actually justify buying it — output, share of payroll, seconds to pay for itself — and a five-step tour walks a new player through closing a ticket, hiring someone, watching the rate climb, buying an upgrade, and finally selling the company, each step clearing when you actually do it rather than on a timer. On a phone, where there’s no hover to carry a tooltip, that same information gets printed straight onto the row instead.
One thing the tour had to say outright: early on, clicking earns more than your entire payroll. A rate readout of “$0.1/s from staff” sitting next to a “+$1” click reads as broken if nothing tells you otherwise — so now something does, and the crossover point where payroll actually overtakes a click is a real, calculated number, not a guess.
Where it plays
Browser, phone included — the store panel docks to the bottom of the screen on a small viewport instead of sitting a full page-scroll below the action. It’s also installable now: a manifest and a service worker mean Chrome and Edge offer a real “Install” option, and it plays offline once it’s been opened once. No app store, no review process — just the parts of the web platform built for exactly this.
It’s still early. Balance across a full run hasn’t been tuned end to end, there are no achievements yet, and the brand mark is still a placeholder. You can play it anyway if you want to watch it get better in real time — that’s kind of the point of a log. Source is at github.com/kylechrisking/msp-tycoon.