· Engineering · 9 min read

The Invoice Is a Lie — And Your Spreadsheet Is in on It

Option A costs $10, Option B costs $30. Case closed — except the invoice is lying to you, and the real bill arrives later with your name on it. Unmeasured cost isn't zero cost. It's just cost your spreadsheet has decided to hide.

Option A costs $10, Option B costs $30. Case closed — except the invoice is lying to you, and the real bill arrives later
with your name on it. Unmeasured cost isn't zero cost. It's just cost your spreadsheet has decided to hide.

In business, we love comparing line items. It feels clean, quantifiable, and vaguely responsible. Option A costs $10, Option B costs $30, therefore Option A saves us $20. Case closed. Let’s go get coffee and celebrate our fiscal genius (god forbid anyone notices that two cups of overpriced cafeteria coffee just wiped out the savings).

Things only get hilarious when you stop looking at invoices and start calculating the total cost of organizational existence.

(And yes, I am about to use three examples — and no, it’s not because an LLM forced a rule-of-three outline on me. Oh, and I actually used an em-dash in that last sentence. Sue me ;P)

The Missing Column

Here’s the thing: these analyses aren’t wrong because people can’t do arithmetic. Most of the engineers and managers I’ve seen build them can multiply just fine. Most of them can even spot a trend line. Some — brace yourselves — can calculate derivatives! They’re wrong in a much more boring, much more systematic way.

Open any cost comparison spreadsheet. The invoice gets a column. The license fee gets a column. Hourly rates, instance prices, the one-off implementation estimate — all neatly lined up, summed, and conditionally formatted in a reassuring shade of green. Now look for the column labeled “3 a.m. pager wake-ups.” Or “what happens when Dave goes on parental leave.” Or “the slow erosion of everyone’s will to live.” You won’t find it. Not because anyone decided those costs don’t exist, but because nobody knew what number to type into the cell — so the cell stayed empty, and an empty cell sums to zero.

That’s the whole trick. Measurable costs get a column. Unmeasurable costs get rounded down to nothing, and then the spreadsheet confidently presents the result as fact.

This habit of quietly skipping whatever is hard to measure even has — of course it does! — its own catchy name: the McNamara Fallacy. It deserves a full post of its own, though, so I’ll get to it someday™.

Unmeasured cost isn’t zero cost. It’s just cost your spreadsheet has decided to hide.

The three exhibits below are the same mistake wearing three different outfits.

Exhibit A: The $10 VPS Flex

Let’s start with a classic debate that never fails to spark a flame war on Reddit: cloud hyperscaler vs. bare-metal/VPS self-hosting. I can’t count how many cost-benefit analyses I’ve seen where someone smugly demonstrates that running an app on a $10/month VPS is vastly superior to paying $30/month for an EC2/Azure/GCP instance. And they are right… in the most technical, useless way possible.

Because the moment you factor in more durable storage, automated snapshots, replaceable instances, managed network controls — and how much easier the platform makes adding actual HA and disaster recovery — that extra $20 stops looking like a simple markup. It looks like the bargain of the century. You aren’t paying $30 for compute; you’re paying $20 for the privilege of sleeping through the night. The VPS spreadsheet simply has no row for “who restores the database when the disk dies on a Sunday,” so that cost quietly defaults to zero.

Now, regular readers might raise an eyebrow here. Didn’t I just spend an entire post complaining that companies are wildly overpaying for cloud — and that agentic AI is speedrunning the same mistake? I did, and I stand by it. But look closely and it’s the same missing column, just pointing the other way. With cloud and AI, the invoice is real but nobody owns the spreadsheet that watches it compound — pennies per hour become six figures a month, and a $21 bibliography experiment turns out to be a $200 one. And when the token bill does get noticed, the next hidden column shows up: the new “AI Platform” team you now need just to keep the prompts from breaking. The price tag was never the problem. The problem is whatever cost didn’t get a cell.

Exhibit B: The 5-Minute Automation Trap

Speaking of maintenance: picture a minor operational task that takes 5 minutes every Monday. The immediate, reflexive instinct of every DevOps engineer (myself very much included) is: “Automate it. Script it. Eliminate human toil.”

Out come the napkin calculations. Writing the script takes 2 hours (maybe less if you throw an AI coding agent at it). In 24 weeks, the script pays for itself! Efficiency unlocked! Notice what’s on that napkin: build time, and nothing else.

Except code isn’t a static statue you carve once and admire forever. Code is a needy pet. You have to update dependencies, fix broken pipeline steps, handle API deprecations, add logging, and test it when the OS updates. Suddenly, that 2-hour one-time investment quietly morphs into 3 to 5 hours of routine maintenance every single month. The AI agent made the build column cheaper; it did absolutely nothing for the maintenance column, which wasn’t on the napkin to begin with.

Let me give you a real one. Every week, I have to pick someone from the team for a certain type of duty. Once a quarter I build the rotation list in a boring spreadsheet (as we all know, that’s the ultimate corporate management tool), and then I spend about a minute every Monday letting the chosen one know. Naturally, my inner nerd immediately piped up: “Automate it! Think of all the toil you’ll save!”

And then my inner Mr. Grumpy walked in — the destroyer of all fun — and started asking questions. How much time will you spend keeping the list of brave volunteers up to date? How much goes into integrating the script with Slack, including storing the API tokens securely? What about checking the calendar, so the chosen one isn’t on vacation that week? Suddenly, a simple automation had turned into a mini-project.

Not a hard one, mind you. But the implementation alone would cost enough to push the ROI to roughly a year and a half — and that’s assuming zero maintenance. Factor in the inevitable little fixes, and the ROI settles at a cheerful “never.” I don’t even want to talk about the pile of nice-to-haves that had already started forming in the back of my head.

Now, a single automated script is a neat little time-saver. But two hundred unmaintained “time-saving” scripts are just a fragile, undocumented custom framework that eventually requires hiring a full-time engineer just to keep it from collapsing under its own weight.

Exhibit C: The €100 Vacuum Cleaner

Let’s step out of the server room for a second. “Why on earth would I pay a cleaner €100 to spend three hours on my apartment when I can just clean it myself for free?”

Sounds logical, right? That word “free” is doing a lot of heavy lifting, though. Those 3 hours spent mopping floors are 3 hours you can never use for anything else. And no, I’m not talking about grinding out more billable hours — we aren’t productivity robots. We need rest, recovery, and downtime to keep our brains from frying. A guilty-pleasure Netflix binge, a few rounds on the console, or — heaven forbid — actually meeting up with friends isn’t a crime against productivity. It’s the kind of relaxation our psyche needs like a parched field needs rain.

If you spend 3 hours scrubbing tiles, you didn’t save €100. You traded 3 hours of irreplaceable life — time that could have gone into a nap, a walk, or playing with your kids. Your personal budget has a line for the cleaner; it has no line for your Saturday afternoon. Rest is an operational requirement, whether you clean before it or not.

Context Is Everything (Or: Don’t Fire Your VPS Just Yet)

Here is the twist: I am not telling you to always pick the expensive option. Adding the missing column doesn’t mean the expensive option wins. It means you finally get to see the actual race.

A two-person startup counting every dime might be vastly better off on a $10 VPS. If everyone can fix a broken server and the cost of downtime is measured in bruised egos rather than lost revenue, take the cheap server. At a mid-sized company, that balance shifts toward managed services. And the math shifts again at massive enterprise scale, when you hit 1,000 tiny apps and automating backup retention becomes tool #1001, with non-linear scaling costs.

The same goes for the other exhibits. A script that saves 5 minutes might still be a brilliant move if it prevents the one person who knows how to run the manual process from burning out and quitting — that’s a hidden column too, and this time it votes for the automation. And as for cleaning your own flat? Maybe you literally don’t have €100 to spare. Or maybe puttering around with a vacuum cleaner while wearing noise-canceling headphones and listening to synthwave is your personal form of active meditation.

Every scenario is different. Every organization’s risk profile is unique. There are no universal silver bullets — only spreadsheets that are honest about what they left out, and spreadsheets that aren’t.

The Bill Always Arrives

Price tags are easy to read. Real costs require you to actually look at the gears turning underneath — and then do the deeply unfashionable thing of adding a column for them, even if the best number you can put in the cell is a rough guess. A rough guess is still infinitely closer to the truth than the zero your spreadsheet was going to assume.

Because the invoice isn’t lying on its own. It just has an accomplice.

P.S. For the pedants in the audience twitching to drop industry terminology in the comments, here is your cheat sheet: TCO, Maintenance Drag, Cognitive Overhead, Recovery Time, The Automation Paradox, Opportunity Cost. Consider matching them to the sections above an exercise left to the reader ;)


A first, somewhat more chaotic version of this text landed in the Systems & Sarcasm newsletter a few weeks ago. If you’d rather get these rants hot off the press — rough edges included — consider signing up.

Back to Blog

Related Posts

View All Posts »
Tesler's Law: Complexity's Enduring Burden

Tesler's Law: Complexity's Enduring Burden

Larry Tesler gave us cut, copy, and paste. He also gave us an uncomfortable truth: complexity never disappears. It just moves. The only question is who gets stuck with it.