Writing
Blog
Things I got wrong first, written up once I understood why. Mostly notes from shipping real systems: domain modelling, testing what fails silently, and picking defaults that fail in the direction you can live with.
A rule enforced in one place is not enforced
One rule about client money ended up in four places — the domain, a database trigger, a repository translation, and the ordering of two writes. Each answers a different question, and removing any one leaves a system that passes its tests and is wrong on a busy afternoon.
The failures that cost the most are the silent ones
Two chart bars drew in nothing on a page whose figures had already been checked in a browser. A sign-in refusal rendered as ordinary body text. Neither threw, neither logged, and neither was findable by looking — so I started parsing the stylesheet in a test.
The default is the control, not the flag
Making a public demo's affordances conditional took an afternoon. Deciding which way the condition should fail took longer and mattered more — because one direction is a dull afternoon and the other publishes a one-click administrator login.