01
Find the problem under the problem
The brief is almost never the problem. A marketplace for car parts was a trust problem before it was a catalogue problem. A way for parents to pay fees was a question about what happens when nobody can tell which child a payment belongs to. A system for choosing names turned out to be a question about whether the premise behind it held at all. None of that is missing because anyone was careless. It is not visible from where you are standing at the start. So the first week is spent looking for it, not estimating the thing you already described.
Ask what has to be true for this to work at all, and build outward from that instead of from the feature list.
Visible in: A marketplace with escrow, built end to end→02
Build the difficult part first
There is usually one piece that decides whether the rest is worth writing, and it is rarely the piece that demos well. Escrow decides whether a marketplace is a marketplace. The rule for an unattributable payment decides whether a ledger is trustworthy. Everything else is downstream of it and cheap to change: the screens, the admin, the reporting. Doing it first means the expensive discovery happens in week one, not week nine, while it is still a design conversation and not a rewrite.
Whatever is most likely to invalidate the plan gets built before the things that depend on it.
Visible in: School fees, reconciled across many schools at once→03
Decide what the software is not allowed to do
Before the capability, the limits. Which decisions must stop and wait for a person, and which are safe to make alone. The rule we use is where the cost of being wrong lands: automate where a mistake is cheap and reversible, involve a person where the cost is borne by someone who did nothing wrong. This gets decided while it is still cheap to decide, because the moment the capability exists, every argument for restraining it starts sounding like an argument against shipping.
Write the stop conditions before the feature, not after the first incident.
Visible in: An agent that researches sales prospects on its own→04
Make the important rules enforceable, not intentional
Every team has rules that everyone agrees with and nobody can point at. One customer must never see another's data. This service must not import that one. The system must run offline. Those survive exactly as long as everyone remembers them, which is until the week someone is in a hurry. So the ones that matter get enforced where they cannot be forgotten. Tenant isolation is enforced twice, once in the application and once underneath it, so a single mistake in one layer is not enough to leak anything.
If a rule matters, it is enforced in code or in the build. Otherwise it is a preference with good PR.
Visible in: An entire business, taken into software→05
Test it against reality, and let reality win
A design is a hypothesis. The point of building it is to find out where it is wrong, which means the result has to be allowed to overrule the plan, including when the plan was ours and the result is inconvenient. One system we built produced, on its first real engagement, a finding against the premise the whole thing rested on. We changed the design, not the finding. This is the part most projects skip, and it is skipped long after somebody first saw the evidence.
When the system disagrees with the idea that produced it, the system is usually right.
Visible in: Infrastructure for research that keeps itself honest→06
Keep what you checked apart from what you assumed
In writing, as you go. After a week the two feel identical, and by then decisions have been built on top of both. Every week of an engagement you get a short written update measured against the agreed scope: what moved, what we confirmed, what we are still assuming, and anything that turned out to be wrong. Not a status meeting. A record, so that when someone asks in month four why a thing was done that way, the answer exists and is not a reconstruction.
Say which of the two a statement is, at the moment you make it. Later is too late.
Visible in: Infrastructure for research that keeps itself honest→