Engineering

Building software that outlasts us

4 min read

Most software is built to pass a handover, not to be handed over. Here is how designing for the next engineer changes week one of a project, and why it is the cheapest decision you will make.

Walk into most codebases a year after launch and you find the same thing: the software works, and exactly one person understands why. That person is the bottleneck, the risk, and usually the reason the next change takes three weeks instead of three days. The code did not fail. The handover did, because it was never designed.

We build and run our own products, which means we are frequently the next engineer inheriting our own past decisions. That changes how we start a project. We do not design software to pass a handover at the end. We design it to be handed over from the first commit.

The difference shows up in week one

The instinct on a new project is to get something on screen fast. That is fine, but the decisions that decide whether the system survives are made in that first week, quietly, before anyone is watching:

  • What the core nouns are called, and whether that name will still make sense in a year.
  • Where the boundaries sit, which parts know about which, and which deliberately do not.
  • What the data model refuses to allow, so bad states cannot be represented at all.

None of that is visible in a demo. All of it is what someone new runs into on their first real change. Get the names and boundaries right early and the system stays legible as it grows. Get them wrong and no amount of later documentation rescues it.

Software that only its author understands is not an asset. It is a liability wearing a deadline's clothes.

Document the why, not the what

The common failure is documenting the wrong layer. Teams write pages narrating what the code does, which the code already says, and skip the one thing that is actually lost: the reasoning.

The next engineer can read a function. What they cannot recover is why the boundary is where it is, which three approaches you tried and rejected, and what you already know breaks at ten thousand users. That context lived in your head during the build and evaporates the day you move on. So we write it down where it belongs: a short architecture note per system, decision records next to the code, and comments that explain intent, not mechanics.

The goal is not more documentation. It is the minimum that lets someone act without asking us.

Boundaries are a kindness to the future

A clean boundary is not an aesthetic preference. It is the thing that lets someone change one part of the system without understanding all of it. When everything can reach everything, every change is a whole-system change, and only the author can make it safely. When boundaries hold, a new engineer can work in one corner on day one, because the blast radius of a mistake is small and visible.

This is why we spend real effort on system edges early: clear inputs and outputs, no reaching across layers for convenience, and interfaces that say what they promise. It is slower to write and far cheaper to own.

Why this is the cheapest decision you make

Designing for handover feels like a tax when you are moving fast. It is the opposite. The expensive part of software is not writing it; it is the years of changing it afterward, usually by people who did not write it. A system that one person holds in their head has a single point of failure with a salary and a notice period. A system built to be handed over keeps its speed as the team changes, because understanding does not leave when a person does.

We build this way for a selfish reason as much as a principled one: we are the ones on call when our products break, often long after we have forgotten the details. The documentation and the clean boundaries are not for a mythical future team. They are for us, at 2am, reading our own code with fresh eyes.

See how we build and run software

Build for the next engineer and you get a system that outlasts the people who made it. Build only for the demo and you get something that works right up until the one person who understands it walks out the door. We would rather hand our work over cleanly than hold it hostage, even from ourselves.

Good to know

Does designing for handover slow the project down?

Slightly, in week one. You spend time naming things well, writing down decisions, and keeping boundaries clean. It pays back the first time someone new touches the code, and every time after that. The cost is front-loaded and small; the alternative compounds.

What actually needs to be documented?

The why, not the what. Code already says what it does. What the next engineer cannot recover is why a boundary is where it is, which options you rejected and for what reason, and what breaks at scale. Write those down; skip the line-by-line narration.

How do you know a system is genuinely handoverable?

The honest test: a competent engineer who has never seen it can make a safe change on their first day using only the repo and its docs, without needing to ask the original author. If that is not true, it is not handed over, it is lent.

We engineer ideas into working software.

Tarka · logic · Shila · stone

Carrying a problem worth solving?

We design, build, and run software end to end. Tell us what you're building or where you're stuck, and we'll tell you honestly whether we're the right team for it.

Start a conversation