Writing on software, systems, and hard-won lessons.
Writing on developer experience, systems thinking, and the mistakes behind both - covering AI workflows, continuous improvement, and the mental models that drive better decisions.
A new starter, second week on the job, pushed a change with an undefined variable. It passed testing and passed code review. Then the service team's phones started ringing because users couldn't log in. It's easy to blame the new starter or code reviewer, but an undefined variable in a 500 line PR is easy to miss and trivial to catch with static code analysis. We were asking humans to do what CI tests can do.
We're all the GOAT at making mistakes sometimes, so let's make it easier for ourselves.
Rubber stamping vs. nitpick purgatory. After a prod bug, people overcorrect. Then the "days without accident" number creeps up and they get lax again. Aim for a middle ground that doesn't swing.
The goal isn't less rigour, it's better distributed rigour.
| Role | Question | Responsibility |
|---|---|---|
| Coder | "Does this match requirements?" | Self-review first and passes PR checks. |
| QA/Testing | "Is this ready for live?" | Requirements met and working as expected. |
| Reviewer | "Could I work on this later?" | Scan for red flags and verify maintainability. |
| Automation | "Beep-boop?" | Static code analysis, test coverage, security scans. |
Here's a real request from our team that worked well:
Afternoon team, wondering if you three would be available to code review this PR [redacted link and PR summary one liner]
@tom @dick If you're able to do a regular PR of the feature
@harry If you're able to have a look at the logic around scoring/template fetching, I've left comments in the PR
Let me know if you guys have any questions Thank you!!
Different people, different focus areas. Nobody has to review the whole thing deeply.
Run these as part of the pull request, no pass? no merge.
suggestion:, nitpick:, kudos:) or severity tags ([Important], [FYI]) so coders know what's blocking vs optional.calculateTotal() or sumLineItems()."When the reviewer isn't spending cognitive load on things the coder or CI should have caught, they can go deeper on the things that need human judgment.
AI coding agents are fast, but they don't know what you know. Without upfront planning, an agent will confidently scaffold an entire architecture around the wrong assumptions. And you won't notice unt...
Antifragility is my goal for developer experience. When something breaks, I want the fix to make it harder for that same thing to happen again.