Every internal tool has the same origin story: a spreadsheet that worked fine until it didn't. Here's how to tell when you've outgrown it.
Every internal tool has the same origin story. Someone needed to track something -- customers, tickets, inventory, candidates -- and a spreadsheet was the fastest way to start. For a while, it works. Then it doesn't.
It rarely fails all at once. It fails as a slow accumulation of small problems: a cell someone overwrote without noticing, a formula that quietly broke three rows up, a tab nobody's allowed to touch because only one person understands what it does. That person becomes a single point of failure without anyone deciding that on purpose -- they're just the one who remembers why column J exists.
Once two people need to update the same spreadsheet at the same time, you're one overwritten cell away from losing real data.
The moment a row needs to move through stages -- new, in progress, done -- a spreadsheet can hold that information but can't enforce it.
Nested IFs, VLOOKUPs chained three deep, a tab nobody's allowed to touch -- these are signs you're already building software, just in the wrong tool.
Moving off the spreadsheet feels like a project -- one with a start date, a budget line, and a person who has to own it. Staying costs something too, but that cost is invisible and distributed across everyone who deals with a broken formula or a stale row, which makes it easy to defer indefinitely. "We'll fix it after this quarter" is a sentence a lot of teams say more than once about the same spreadsheet.
Don't try to migrate everything at once. Pick the one workflow causing the most pain -- usually the one two people are editing simultaneously, or the one an external customer indirectly depends on -- and move just that. A real tool built around one working slice is more useful, and far less risky, than a half-finished attempt to replace the whole spreadsheet in one go.
None of this means the spreadsheet was a mistake. It was the right tool for testing whether the problem was real before spending real effort on it. The mistake is staying there after the answer is clearly yes.