Engineering Practices

I Prefer Cold Toast. And You Probably Ship Software the Same Way.

I Prefer Cold Toast. And You Probably Ship Software the Same Way.

There. I said it. Cold toast. Not warm. Not the golden, buttery, fresh-from-the-toaster kind that the whole point of toast is meant to be. Cold. A bit chewy. Faintly depressing if you think about it too hard, which you should not.

And honestly? I have made my peace with it.

It started with kids. You know how it goes. You pop two slices in, the toaster pops, and then someone needs their juice poured, someone else has lost a shoe, and the cat knocks your toast off the counter and stares at you while doing it. By the time you sit down, the toast has been sitting there for eight minutes. It is cold. You eat it anyway because you are hungry, and also because hot toast is just not your life anymore and at some point you stopped caring about that.

So What Has This Got to Do With Software?

Everything. It has got everything to do with software.

Cold toast, it turns out, has genuine merits. It holds its structure better. It does not go soggy under toppings. It travels well if you are eating it standing up over the sink like the dignified adult you are. It is not what toast is supposed to be, but it gets the job done. And once you have eaten enough of it, you stop noticing the difference.

That last part is the problem.

Here is the analogy: you designed your architecture for hot toast, but your system has been serving cold toast for years, and everyone has quietly adapted.

Think about the last legacy system you worked with. Someone designed it originally with a clear vision. Clean separation of concerns. A sensible data model. Maybe even some genuinely elegant patterns in there if you squint. That was the hot toast phase. Fresh out of the toaster. Lovely.

Then the kids arrived. In software, the kids are: changing requirements, a tight deadline in Q3 2019, that one developer who left and took all the context with them, a business pivot that nobody quite anticipated, and approximately forty-seven hotfixes applied directly to production between 2:00am and 3:15am on a Tuesday.

Now nobody remembers what the toast was supposed to taste like. The entire team has normalised cold toast. The workarounds have workarounds. The patch on top of the patch has been there so long it is now load-bearing. Nobody touches it. There is a comment in the codebase that just says // DO NOT CHANGE THIS with no further explanation, and that comment is six years old, and the person who wrote it is now a director of something somewhere and definitely not answering your Slack message.

The Danger Is Not the Cold Toast. It Is Forgetting the Toast Was Ever Hot.

When I eat cold toast, I know I am eating cold toast. I remember what hot toast is. I could make hot toast right now if I wanted to. It was a choice, not a surrender.

The problem in software is when teams lose track of what they originally intended. When the workaround becomes the pattern. When “this is just how it works” replaces “this is a known compromise we made in 2021 because of X, and we should revisit it when Y.” When the cold toast becomes the product spec.

This is how you end up with microservices that call each other synchronously in a chain seventeen steps long, because someone needed to “just quickly” get some data from another service and then that pattern got copy-pasted across the entire organisation. A database schema with a column called data2 next to a column called data, and nobody alive knows what the difference is. Event-driven architecture where all the events are consumed synchronously because the original consumer was written before anyone understood what “async” was supposed to mean in this context.

None of these things were designed. They accumulated. Cold toast, every single one of them.

That is when the technical debt stops being a debt and starts being the business model.

Make the Trade-Off Visible

Cold toast is sometimes the right call. You are six weeks from a launch. The workaround works. The team is tired. Ship the cold toast, note it down, revisit it next quarter. That is pragmatism and it is a genuine skill.

The engineers who create the real problem are not the ones who ship workarounds. It is the ones who ship workarounds without leaving any trace that a workaround was made.

Write the ADR that says: “We are doing this synchronously for now because of X. The trade-off is Y. We should revisit this when Z.” Add the TODO with a ticket number, not just a vague // fix later that will outlast all of us. Say in the pull request review: “This is intentionally not the long-term solution, here is why, here is what the long-term solution looks like.”

Keep the memory of hot toast alive, even while you eat the cold stuff.

One Sentence. This Week.

Next time you are about to merge something that you know is not quite right, take sixty seconds and write one sentence about it somewhere that is not just a comment in the code. A ticket. A Confluence page. A note in the PR description that gets linked from the ticket. Something.

“We are doing X instead of Y because of Z. This creates risk around W. When we have capacity, we should revisit.”

You are not committing to fixing it now. You are just leaving a note for the version of your team that exists in eighteen months, who will otherwise have no idea why any of this is the way it is.

Because one day the kids will be a bit older, the school run will calm down, and you will have a quiet morning to yourself. You will make toast. You will eat it hot. And it will be completely transformative because you never forgot what it was supposed to be.