The Gentle Sunset
Every behaviour you ship, even the ones you never meant to promise, becomes somebody's load-bearing wall. You do not get to just knock it down.
Field notes on building software for the way minds actually work: tired, distractible, ordinary, and now partly machine.
Every behaviour you ship, even the ones you never meant to promise, becomes somebody's load-bearing wall. You do not get to just knock it down.
A retrospective that ends in a document has produced a story. The only one worth the hour is the one that produces something that re-runs without you.
An unreproducible report is a rumour with a timestamp. Triage is the work of turning the rumour into something you can actually rank.
Put six reviewers on one enormous change and you do not get six reviews. You get none, and a queue of people each quietly certain someone else did the reading.
You do not have to understand a bug to find it. You have to be willing to cut the haystack in half, and then in half again, until one straw is left.
Stop asking who made the mistake. Start asking what the system let them make.
The bug your angriest customer is emailing about and the bug wrecking the most lives are almost never the same bug.
You can build every house on the street to code and still hand someone a neighbourhood that seizes the first time everyone leaves at once.
The job of a code review was never to find your bugs. It is to drag what one person understood into the open, before it sets like concrete.
One lock is not security. It is a single point of failure you have not yet watched fail.
Your test suite is a museum of bugs you have already killed. The live ones are hiding in the inputs you were too sensible to type.
A good design makes the right thing the easy thing and the dangerous thing take visible effort, so a tired person falls into doing it right.
You do not have a failover. You have a failover you have never triggered, which is a different thing with the same name.
Every shiny new database is a promise to learn, at three in the morning, exactly how it breaks.
The rule that let everything on the internet talk to everything is the same rule that means nothing can ever be cleaned up.
The most reliable systems in the world stopped trying not to fall over, and got very good at standing back up.
Past a certain point a system does not slow down, it falls off a cliff, and the only kindness left is to refuse work you cannot finish.
Two machines, two clocks, and a question about order that physics says you are not allowed to ask.
Your most dangerous attacker never gets a key. They find someone who already has one and ask nicely.
Everybody has a backup. Almost nobody has a restore. The difference is the whole story.
The ugly working system you want to delete is a scar map of every wound it has survived, and you are about to throw the map away.
Two functions can match to the last character and still be two different things.
Types and tests guard the ground inside the compiler; past its edge, the only thing between you and disaster is a process someone bothered to build.
Every value that crosses into your code arrives wearing a disguise, and the dangerous ones are dressed impeccably.
Every resource you open is a promise to close it, and the bill for a broken promise always arrives at the worst possible hour.