A Million Emails a Month Is an Operations Problem At college volume, mail is not a notification helper. It is a queued product with scheduling, identity, failure isolation, and a reputation you can lose on a Tuesday. ARCHITECTURE · September 3, 2026 · 18 min read
The Feature Worked. The Work Did Not Get Smaller. A ticket can be correct, tested, and live, and still leave staff doing the same week in a spreadsheet. Technical completion is not the same as operational relief. TECHNOLOGY · August 12, 2026 · 16 min read
Do Not Automate a Decision You Cannot Describe Most automation fails because it copies a form, not a judgement. Use AI first to watch how people actually decide, then write the rule they can still stand next to. AUTHOR · March 24, 2026 · 20 min read
The Dashboard Was Green and We Still Did Not Know Uptime is a narrow kind of knowledge. Observability is being able to ask the next question — including the operational one — when the boxes look fine. INFRASTRUCTURE · January 27, 2026 · 16 min read
The Rows Moved. The Truth Did Not. Copying data into a new schema is the easy afternoon. Proving that the new rows still mean what the old world meant is the actual migration. ENGINEERING · November 4, 2025 · 17 min read
The Permission Was Correct. The Business Rule Was Not. Most serious holes I have had to think about were not missing middleware. They were accurate roles attached to the wrong idea of who may do what in a workflow. ENGINEERING · September 9, 2025 · 16 min read
The Risk Lives Outside Your Repository Every payment, bank, mailbox, and accounting API you call is a contract you did not write. The outage is only the loud version. The quiet version is a change you hear about from operations. ARCHITECTURE · July 29, 2025 · 17 min read
A Team That Needs You on Holiday Does Not Have a System The highest-leverage work on a small team is not the hard pull request. It is reducing the number of facts that only exist in one person's head. LEADERSHIP · June 25, 2025 · 16 min read
You Cannot Debug What You Cannot Reconstruct When the bug will not come to your laptop, the work is not guessing. It is building a timeline from incomplete evidence until a next measurement is obvious. ENGINEERING · May 13, 2025 · 16 min read
The Phone Will Keep the Contract You Already Broke Web deploys in an hour. A Flutter build lives in the wild for months. The backend has to survive both, or you will call a store release an incident. PRODUCT ENGINEERING · March 18, 2025 · 16 min read
The Decisions a Tech Lead Cannot Delegate The job is not to be the best developer in the room. It is to own a small set of decisions that, if left ownerless, turn into accidents the whole team has to live with. LEADERSHIP · February 11, 2025 · 16 min read
Green Checks Are Not the Same as a Safe Release A pipeline that is green can still be a bad way to change production. Delivery is risk management: what you proved, what you can undo, and who is allowed to be surprised. INFRASTRUCTURE · January 21, 2025 · 16 min read
The Cache That Lied Faster Than the Database Caching is a second copy of the truth with a shorter memory. If you cannot say when it becomes false, you have not made the system faster. You have made it more confident. ENGINEERING · December 3, 2024 · 16 min read
When the API Becomes Someone Else's Infrastructure An endpoint that only your webpage uses is a function. An endpoint a phone, a partner, or last year's app still calls is a product with a compatibility bill. SYSTEM DESIGN · October 15, 2024 · 17 min read
A Migration the Business Can Survive Rewriting a long-lived product feels clean until you try to do it while invoices, logins, and term dates keep moving. The real design problem is the path, not the destination framework. ARCHITECTURE · August 27, 2024 · 18 min read
The Tenant Is Not a Column You Remember to Add Shared tables and a tenant_id will carry a product a long way. They will not carry a leak, a noisy neighbour, or a restore you cannot explain. ARCHITECTURE · June 4, 2024 · 17 min read
We Did Not Need a Bigger Database When a page is slow, the first offer is often more hardware. Most of the time the application is asking the database a foolish question, and a larger instance will only answer it faster for a while. ENGINEERING · April 16, 2024 · 16 min read
The UI Will Invent the Business Rule You Did Not Write If the API will accept a state the screen refuses, the real product is whichever client is in a hurry. That is how frontend assumptions become policy. PRODUCT ENGINEERING · March 6, 2024 · 16 min read
Every Retry Is a Decision About What Failure Means Putting work on a queue does not make it reliable. A retry without a theory of failure just repeats the accident with better timing. ENGINEERING · January 18, 2024 · 16 min read
The Payment Cleared. The Month Still Wouldn't Close. A charge can succeed and still leave finance unable to trust the books. The hard part of payments is not capturing money. It is explaining the same money in three systems. ENGINEERING · November 8, 2023 · 17 min read
An ERP Is a Record of How the Business Works Back-office platforms fail when they are designed as forms on tables. They have to hold history, exceptions, and the argument the organisation is still having with itself. TECHNOLOGY · August 16, 2023 · 17 min read
The System Gets Hard to Change Long Before It Gets Hard to Run Most production systems still serve traffic. The real decay is quieter: every change starts needing archaeology, because knowledge and coupling have already escaped the code. ENGINEERING · June 21, 2023 · 16 min read
"Add an Approval" Is Never Just a Boolean The ticket says add a tick box. The domain says who may act, what happens if they are away, whether yesterday can be rewritten, and who lives with the record. ENGINEERING · May 9, 2023 · 16 min read