Series
Consulting and Craft
The practice of building software, and the lessons that keep turning up. Direct essays on engineering practice, plus shorter pieces from the kitchen that turn out to be about software too.
Consulting and Craft · In Practice
The Value Is in Ideas, Not Code
LLMs have made code implementation almost trivial. The bottleneck has shifted from writing code to knowing what to ask for. Your library of patterns, concepts, and hard-won experience is now your competitive advantage.
Read articleConsulting and Craft · Through the Kitchen
The Quiet Jar in the Fridge
My last sourdough starter died through a quiet chain of postponed feeds. I'm starting a new one today. Most of what I'm learning as I begin again, I wish I'd known a decade earlier about codebases.
Read articleConsulting and Craft · Through the Kitchen
The Knife in My Hand
A sharp knife is safer than a dull one. Pick the right tool for the job, then put in the practice. Speed comes from practice, not pressure. A few focussed, well-maintained, well-practised tools will more predictably take you further than the latest beautiful shiny offering.
Read articleConsulting and Craft · Through the Kitchen
The Salt in the Dish
There are four kinds of salt in my kitchen drawer and they are not interchangeable. This post is about salt. Most of it is actually about dependencies, and about the discipline of knowing what you're putting into the dish before you put it in.
Read articleConsulting and Craft · In Practice
The Price of Everything
Pricing isn't a finance decision; it's a product decision. The journey from a gut-feel launch number to validated unit economics is one of the hardest things a small team has to do, and one of the most consequential.
Read articleConsulting and Craft · Through the Kitchen
The Probe in the Meat
I own four kitchen thermometers, each for a different kind of cooking, and the differences between them are the differences between the kinds of decisions they help me make. Most of what I've learned about observability, I could have learned from a brisket, a vat of hot oil, a batch of caramel, and a steak.
Read articleConsulting and Craft · In Practice
Technical Debt Is a Loan, Not a Crime
Calling something 'tech debt' is usually an accusation. It shouldn't be. Used deliberately, debt is a tool: ship something imperfect, learn from the market, pay it back with what you learned. Used carelessly, it compounds until the interest swallows the principal.
Read articleConsulting and Craft · Through the Kitchen
Resting the Meat
You take the steak off the heat and the hardest part begins: doing nothing. Most of what I've learned about shipping software, I learned from a piece of resting beef.
Read articleConsulting and Craft · Hands On
Triaging Maintenance Requests with a Bedrock Classifier
The first pilot out of an AI envisioning session is usually a classifier, because classifying is the cheapest, most measurable thing a model does. We take one pick, routing a property agency's inbound maintenance requests, all the way to code: a Bedrock Converse call that returns structured JSON, a schema you can trust, PII guardrails, a confidence threshold that hands the hard ones to a human, and an eval set that tells you whether any of it works.
Read articleConsulting and Craft · Hands On
Answering Tenant Questions from the Lease with Bedrock
The second pick from an AI envisioning session is a retrieve-and-answer pilot: let tenants ask questions and answer them from the lease and handbook, with citations to the actual clause. We build it on Bedrock, and most of the work isn't the model. It's making sure each tenant only ever sees their own lease, that the answer is grounded in a real clause, and that the system says 'I'm not sure, I'll pass this to your property manager' instead of inventing a notice period.
Read articleConsulting and Craft · In Practice
The Language of Tests
Your test says 'should return 200.' RFC 2119 says 'should' means 'there may exist valid reasons to ignore this.' If it's actually a hard requirement, your test has a specification bug, and the LLM that wrote it doesn't know the difference.
Read articleConsulting and Craft · Hands On
Keeping an AI Pilot Honest After It Ships
Launching an AI pilot is the start of the measurement, not the end of it. Models change under you, the inputs drift, and a guardrail that held last quarter quietly stops holding. This is the unglamorous machinery that keeps a shipped pilot trustworthy: the eval set as a merge gate, drift you can see, an adversarial suite you run on purpose, a human-feedback loop that improves the data, and a calm path for when something goes wrong.
Read articleConsulting and Craft · Hands On
Catching Rent Arrears Without a Model
The most useful outcome of an AI envisioning session is sometimes the idea it sends away. A property agency wanted to 'predict' which tenants would fall into arrears; the honest answer was a rule, not a model. This is the boring, reliable thing built in full: a query over the ledger, a few thresholds, an escalation ladder, and the reasons it beats the model nobody needed.
Read articleConsulting and Craft · In Practice
Code Is Read More Than It Is Written
The Law of Demeter says don't chain through objects you don't own. The real reason isn't about object-oriented purity, it's that order.Customer.Address.City is a sentence that forces the reader to hold four concepts in their head to understand one line of code.
Read articleConsulting and Craft · Hands On
Extracting Lease Terms with Bedrock
An envisioning session parked this one with a single note: no gold answers. Pulling structured terms out of lease PDFs is a clean extraction job, but you can't ship what you can't measure, and there was nothing to measure against. So the build starts where the parking note pointed, building the gold set, and only then wires up the model: structured output, field-level confidence, and a human confirming anything the model isn't sure of before it touches the system of record.
Read articleConsulting and Craft · Hands On
Reading Inspection Photos with a Multimodal Model
The last parked idea from the envisioning session was the most tempting and the least ready: read routine inspection photos and flag the problems. It was parked because thousands of photos sat unlabelled, with no ground truth to measure against. The build turns that weakness into the plan, using the model itself, under a human's eye, to bootstrap the labelled set it lacked, while keeping anything that touches a tenant's bond firmly in human hands.
Read articleConsulting and Craft · Through the Kitchen
Mise en Place
Everything in its place before the first flame. Professional kitchens prep for hours before service. The ones that don't prep are the ones that burn the food.
Read articleConsulting and Craft · Hands On
Monitoring a Bedrock Pilot in Production
Keeping an AI pilot honest is a principle; this is the plumbing. SageMaker Model Monitor watches a tabular model by capturing its traffic to S3 and running a scheduled job that scores it against a baseline. Claude on Bedrock isn't a SageMaker endpoint, so you rebuild the same shape by hand: capture every invocation, replay a golden set on a schedule, measure the live traffic against a profile, and turn the movement into CloudWatch alarms. Here's the wiring at Lodgewise.
Read articleConsulting and Craft · In Practice
The Discovery Ledger
Event storming produces walls. Walls produce photographs, transcripts, and a wiki that starts lying within a month. On a recent engagement everything folded into one sequential table instead: one row per card, reading top to bottom walks the timeline, and every open question is a red row sitting beside the thing it questions.
Read articleConsulting and Craft · In Practice
Scaling Knowledge: From One Person's Head to Twenty-Five People's Practice
The hardest scaling problem isn't technical, it's knowledge. How domain knowledge moves from implicit to explicit to embedded, and which techniques unlock each step.
Read article