Essays

Positions on software engineering, Engineering leadership, architecture and AI-enabled development — ideas shaped by years of building systems and teams rather than tutorials or trend summaries.

One Company, Two AI Adoption Ladders

One Company, Two AI Adoption Ladders

AI adoption is not one maturity ladder. It is two — how AI changes the way you build, and how it changes what customers get. Each needs its own roadmap.

The Return of Dogfooding

The Return of Dogfooding

How AI is turning an old product-testing practice into an accessible product-creation strategy — and why real usage still beats imagined demand.

Why Teams Fail at Implementing DDD

Why Teams Fail at Implementing DDD

DDD rarely fails because the patterns are hard. It fails because teams treat it as a technical task instead of a bridge between business and tech.

The Best Architecture Is the One You Can Replace

The Best Architecture Is the One You Can Replace

Great architecture is not defined by the latest trends. It is defined by how cheaply you can change your mind later.

Building systems that enable teams

Building systems that enable teams

Technical architecture is team architecture. The systems you build shape how people work.

The inner loop of agentic development

The inner loop of agentic development

Where the real work happens in AI-assisted coding. Understanding the loop is key to designing better tools.

Clean Code Still Matters — But for Different Reasons

Clean Code Still Matters — But for Different Reasons

Why AI-Generated Code Makes Discipline More Important, Not Less

Prompt Isn't King — Context Is

Prompt Isn't King — Context Is

Real agentic development is not chatting with an AI. It is architecting the context agents consume and the double loop that keeps humans accountable.

Autonomous agents vs pair-programming agents

Autonomous agents vs pair-programming agents

Two models for AI-assisted development. One replaces you, one amplifies you. The difference matters.

Design patterns after AI

Design patterns after AI

Which patterns survive the shift to AI-assisted development? Which need to evolve?

The Myth of 100% Test Coverage

The Myth of 100% Test Coverage

Coverage measures what your tests touch, not what they verify. Chasing the last percent costs more than it protects.

The Art of Unlearning and Relearning

The Art of Unlearning and Relearning

Staying relevant in software is not only about acquiring new skills. It is about letting go of outdated knowledge and revisiting what you thought you knew.

The 8 Lean Wastes of Software Development

The 8 Lean Wastes of Software Development

Working hard but not making progress? Lean names eight wastes that quietly drain software teams — and each one has a countermeasure.

Code Reviews That Make Teams Better

Code Reviews That Make Teams Better

Done right, code reviews catch bugs, raise quality and build teams. Done wrong, they create frustration. The difference is mostly mindset.

DDD Is a Paradigm Shift for the Whole Team

DDD Is a Paradigm Shift for the Whole Team

Domain-Driven Design is not a set of coding techniques. It is a mindset shift that only works when the entire team — including the business — makes it together.

Agile Is Not Scrum

Agile Is Not Scrum

Agile is a mindset; Scrum is one framework for it. Confusing the two is how teams end up doing Zombie Scrum — all the rituals, none of the value.

The Greenfield and Tiger Team Trap

The Greenfield and Tiger Team Trap

Dream projects with elite teams and a blank slate often falter. The missing ingredient is almost always early integration and real feedback.