Findings, Lessons, and Notes from the Work
What the work teaches us — with the numbers attached, and the costly true thing left in.
What a Code Audit Actually Covers
A code audit answers one question: whether your system can carry the weight you are about to put on it - ten times the traffic, an enterprise security review, a due diligence. It reads three things: how the team works, what you actually own, and how the system behaves under load. Not whether the code is “good”.
How We Made Design QA Measurable
Unit tests prove the logic. End-to-end tests prove the flow. Neither notices that a column header renders in the wrong weight, or that a row grew two points taller. This is the layer we added so something would, and what it changed.
How AI Changes Every Step of Building Software
AI didn’t change how software gets built - it changed what each step costs. Across all seven steps, from strategy to monitoring, work that used to need a budget line now takes hours: research, prototypes, tests, pipelines, reporting. If your team pays for AI tools and you feel no difference, the gap is in the steps, not the tools.
Self-Learning Apps: What It Takes for Software to Improve Itself
Software that improves itself is buildable sooner than most founders think, but it is not a model you train. It is three levels of readiness: a system agents can operate safely, processes written down instead of living in people’s heads, and a codebase disciplined enough to let an agent ship changes.
Test It or Document It: The QA Trade That AI Ended
For years QA made the same quiet trade on every project: test the product, or document it - never enough time for both. Six months of AI ended that trade for our four-person team. On one production project, written test cases went from 100 to 460 in two months; the judgment at the center of testing stayed manual.
How to Choose a Software Vendor in 2026: The Complete Checklist
You will never judge a vendor’s code before you sign — but everything around the code, you can. Seven questions before signing, four things that must be in writing, three signs of a healthy engagement, and three rules for when the vendor leaves. It’s the standard we run our own engagements to.
Stabilize, Rebuild, or Start Over? How to Decide What to Do With a Legacy Codebase
When a codebase starts holding the business back, you have more than two options. There are four: continue as is, stabilize, strangle incrementally, or a full rebuild. Which one is right has less to do with how bad the code is, and more to do with whether you can change the system while it keeps running. So measure first, then choose.
Why Software Keeps Breaking — and How It Should Be Built
Software rarely breaks because your developers are bad — it breaks because there’s no process around the code. This is the Software Delivery Flow: the seven stages, from strategy through monitoring, that turn “hand it to a developer and hope” into a product the business can actually see and steer.
From Task Breakdown to Product Ownership: Project Management After AI
The AI conversation is stuck on speed. On our recent AI-first builds, the change that mattered more was to project management itself: the unit of work moved up a level, one developer now owns a whole product deliverable (data, API, UI, infra), and detailed planning moved into the middle of the build. Here’s what we’ve seen shift, and the one thing that didn’t.
What AI Changes in a Software Estimate, and What It Leaves Alone
AI compresses how fast software gets built, but not the manual verification that confirms a high-stakes output is correct. The old “QA is a third of dev” rule would have badly under-budgeted it. Scope QA from the product, not from dev hours.
If One of These Sounds Like Your System, start with a call.
A short discovery call scopes the honest next step. For a system that's fighting you, it's usually the fixed-price audit: a diagnosis of the code you actually have before you commit to anything further.
Notes on Building High-Quality Software
A short founder’s note and a digest of what we’ve published, sent only when there’s something worth the inbox.