Why in Spec-Driven Development the Spec Must Be Readable for All Stakeholders
In Spec-Driven Development (SDD), the specification is at the center. It is not just a document for developers or architects. It is the shared foundation for everyone who works on the product. And here is the key point: if the spec is only understandable to technical people, SDD misses its purpose.
How and Why to Trace Use Cases and Tests
When you build business software, the same question keeps coming back: why does this code exist? The honest answer is almost always: because some business person needed it. A clinic user needs to register a new pet owner. An accountant needs to close the books. A clerk has to approve a request. Every line of code in a [...]
Use-Case 2.0: The Forgotten Practice That Solves What User Stories Can’t
Many teams today treat user stories as the only way to capture requirements. But there is an older, proven technique that scales better and provides something user stories lack: context. It is called Use-Case 2.0, and it deserves a second look, especially in the age of AI-assisted development.
Why Spec-Driven Development Tools Fail in the Enterprise
The spec-driven development (SDD) movement is gaining momentum. Tools like Amazon Kiro, GitHub Spec Kit, and BMad Method promise to bring structure to AI-assisted coding. And they deliver on that promise, as long as you start from scratch.
A Small App, a Complete Process: Demoing AI Unified Process with a Feedback App
When people hear about AI-assisted software development, they often imagine code generation first. I think that is the wrong place to start.
AI Tools for Developers Are Not Enough
Why are we putting so much energy into tools for the part of software development that is most likely to be automated? Why are we not building much more AI support for the rest of the software development lifecycle?
BMAD vs. Spec-Driven Development: Why AI Needs Better Specifications
AI is not only accelerating coding. It is shifting the center of gravity in software development. Implementation is becoming easier. Specification is becoming more important. Teams that continue to rely on vague requirements may generate code faster, but they will also generate incorrect behavior faster.
AI Makes Coding Cheap. Requirements Are Now the Bottleneck
A recent article by Geoffrey Huntley argues that software development is becoming extremely fast and cheap because of AI. That observation is correct. Code that once took days can now be produced in minutes. Entire features can be scaffolded almost instantly. But this is only half of the story.
A Chief Engineer’s Intuition: Why “Build Integrity In” Is Still the Standard for Excellence in 2026
In my article series, we have now journeyed quite a great deal through the tactical and strategic landscapes of lean software development. In my previous articles, we explored the discipline of “Eliminating Waste,” the curiosity of “Amplifying Learning,” the strategic patience of “Deciding as Late as Possible,” the operational imperative to “Deliver as Fast as [...]
Use Cases vs User Stories – Same Content, Different Outcome
In many discussions, I hear the statement: “Use Cases and User Stories can contain the same information.” At first glance, this sounds reasonable. Both describe requirements. Both describe behavior. Both are used in modern software development. But what happens if we take a real, non-trivial example and try to express it in both forms?
Why Self-Contained Systems Are a Perfect Fit for AI-Driven Development
AI is rapidly changing how we build software. Many teams already use AI to generate code, write tests, or analyze changes. Yet, despite all this progress, there is often a feeling that AI does not fully deliver on its promise. It helps, but it does not feel reliable. It accelerates some tasks, but slows down [...]
How I solved SMTP Timeouts with Mailpit and JavaMail
When I started testing email sending in my Spring Boot app with Mailpit and Testcontainers, I ran into a frustrating problem: sending mail locally to localhost often hung for many seconds before failing.


