UI states: design loading, empty and error before the happy path
Your designs are three happy-path screens. The states a user actually meets on a bad day get invented in the last two days of the sprint, by whoever is holding the ticket.
I write about getting real leverage out of AI coding assistants: turning the decisions a model makes differently every time into checks that always give the same answer. I also help engineering organisations put that into practice.
Practical pieces on AI-assisted engineering and architecture. Most of them come out of something going wrong, and link to the code where it did.
Your designs are three happy-path screens. The states a user actually meets on a bad day get invented in the last two days of the sprint, by whoever is holding the ticket.
Your reviews are not slow because there are too many pull requests. They are slow because your reviewers keep re-deciding things a gate already decided, and it buries the one co...
You have an OpenAPI file, both sides are generated from it, and your services still broke each other. The spec was never lying. It just permits more than anybody relies on.
A small Spring Boot API with a React front end. I use it to try things on something real, and most of the examples in the posts come straight out of it, so you can read the actual code instead of a snippet I tidied up first. It's on GitHub.
Both sides are generated from it. Rename a field and three things fail before anyone reviews anything.
Architecture rules, mutation testing, contract tests. All of it runs from one script, and the same script runs in CI.
Eighteen notes on things that cost me an afternoon, with what to do instead. Several of them are posts here.
Rolling out an assistant is a purchasing decision. Getting value from one is an engineering-practice decision, and that is where most rollouts stall.
Acceptance rates and lines generated are vanity metrics. Without a baseline tied to delivery outcomes, you cannot tell leverage from noise.
Output volume rises faster than review capacity. Teams start approving code nobody fully understands, and the cost surfaces months later.
Assistants amplify whatever structure they find. Tangled boundaries do not just persist, they get replicated faster than before.
From a two-hour masterclass to hands-on implementation, up to the board-level conversation about what this technology actually changes. Scope and pricing are on each page.
AI adoption across a whole engineering organisation: leadership, engineering practice and architecture moving together, over several quarters.
For teams that already rolled out assistants and stalled — a diagnostic that establishes what's actually happening, then the work to fix it.
Independent answers for the people accountable for the AI strategy — briefings, written assessments, and ongoing advisory without the vendor spin.
A two-hour masterclass taking your team end to end across the five levels of AI engineering maturity — tailored to your context from an intake questionnaire, and available with hands-on implementation attached.
Distributed systems, event-driven design and JVM platform work — the foundation that decides whether AI-assisted development pays off or just accelerates the mess.
Thirty minutes, no pitch. If I'm not the right person for the problem, I'll say so, and point you at someone who is.