How Decisions Get Made: Approval Chain or Single Signature?
Companies don't fail at going fast or going slow — they fail at matching the speed to the decision. A reversibility frame, and three desks to view it from.
Blog
My writing, videos and posts across platforms on software architecture, PHP, DevOps and product development.
Companies don't fail at going fast or going slow — they fail at matching the speed to the decision. A reversibility frame, and three desks to view it from.
What separates company types isn't headcount — it's where decisions are made and how much of the reasoning gets written down. Four axes, and three desks to view them from.
TypeScript's compiler rewritten in Go, and why a fast feedback loop is so valuable for developers.
Lost events from dual-write pushed me to a transactional outbox, at-least-once delivery to idempotent consumption. Then I encrypted the GDPR fields at the row level with x-gdpr-sensitive. Notes from a real project.
Architecture decisions stay true on the wiki and rot in the code. I built archlint: a standalone Go CLI that enforces the layer boundaries in architecture.json on every commit — with go/parser, no model, in CI. Here's why I built it this way.
In a polyglot repo, 'domain must not import infrastructure' is the same rule in every language — only how the import resolves differs. I added TypeScript and Python to archlint: one architecture.json enforces all three in CI.