An AI-Ready Architecture for Business Applications
Agentic AI is changing how we build software. AI is no longer just a helper that writes small code snippets. It can reason about requirements, generate larger parts of a system, validate behavior, and keep code consistent over time.
Spec-driven Development is not Task-driven AI
Spec-driven development is suddenly everywhere. Many AI tools claim to support it, and many teams say they are already doing it. But when I look closer, what I often see is something very different. The typical flow looks like this: requirements -> plan -> tasks The requirements are quickly translated into a plan, and the [...]
Why User Stories Are a Poor Fit for Spec-Driven Development
User stories are popular in agile teams. They are short, readable, and focused on user value. For many teams, they help with planning and coordination. However, when the goal is Spec-driven Development, user stories show serious limitations. They push teams to create plans and task lists before the real requirements are clear. This makes them a [...]
The Human Perspective: Why “Empower the Team” is a Definition of Success in 2025
The fifth chapter, Empower the Team, is arguably the linchpin upon which all the other Lean principles depend. In the conclusion of my previous exploration of rapid delivery, I noted that a team’s speed is not achieved by working harder, but by systematically designing a process for the team that flows. But who designs that [...]
SPAs Are the New Client/Server Applications
Single Page Applications promise modernity. But in reality, they bring back all the classic client/server problems. With Vaadin, we can avoid them.
Deliver as Fast as Possible: Why this Imperative is more Critical than Ever
In their book, Lean Software Development: An Agile Toolkit, Mary and Tom Poppendieck present rapid delivery not as a reckless rush to the finish line, but as a strategic capability that unlocks immense business value for you and your team, and enables the other principles to function effectively.
Why Vaadin Is Perfect for AI-Driven Development
AI-driven development is changing how we build software. Instead of writing every line of code by hand, developers increasingly use AI tools and agents to generate, test, and even maintain applications. But to turn this into real business value, you need a secure technology stack.
The Power of Intelligent Patience: Why We Should “Decide as Late as Possible”
In today’s world of software development, the pressure to make fast decisions can significantly weigh on you and your team. And conventional wisdom often dictates that early decisions lead to clear plans and predictable outcomes. However, in their groundbreaking book, Lean Software Development: An Agile Toolkit, Mary and Tom Poppendieck challenge this notion with their [...]
Spec-Driven Development with AI: A New Approach and a Journey into the Past
The software development world is buzzing about AI-assisted coding. Tools like GitHub Copilot and Claude Code promise to make us more productive. But most approaches focus on generating code faster – they’re still code-centric. What if we took a different approach? What if we made requirements the source of truth and let AI handle everything downstream?
Amplify Learning: An Up-to-Date Look at an Important Principle of Lean Software Development
Every project is different: Software development, at its heart, is less like assembling a predictable machine on a factory line and more like navigating uncharted territory. The inherent uncertainty in software development journeys is addressed by the second principle of Lean Software Development: Amplify Learning.
Balcony Architecture: A Symptom of Fear and Confusion in Legacy Code
In many legacy systems, you can see something I call “Balcony Architecture”. It is not an official pattern, but it describes a real problem I often see in modernization projects.
Why I Don’t Use Mocking Frameworks and Why You Might Not Need Them Either
“I never use mocking frameworks like Mockito. Why? Either I have my test data under control, or I write the methods in a functional way.” When I say this, it usually provokes strong reactions. Mocking has become such a standard part of unit testing that it seems almost rebellious to suggest otherwise. But after many [...]


