Blog
Thoughts on architecture modernization, Domain-Driven Design, AI-assisted development, and building software that lasts.
Dev Workflows as Code
I've reached a point where I've automated the development process for a single feature. Claude Code will take a github issue, implement it…
Coding Agent Development Workflows
I’ve been playing around with software development workflows for AI agents. here’s everything I know (it’s probably wrong)
Code Quality Foundations for AI-assisted Codebases
There are a few basic techniques you can use to increase the quality of code produced by AI coding assistants. These are easy techniques…
Auto-Reviewing Claude's Code
A well-crafted system prompt will increase the quality of code produced by your coding assistant. But it's not enough for quality code.
Composable Claude Code System Prompts
Each time I improve my workflow with Claude Code I hit the next source of friction which needs improving. At the moment, I’m starting to…
Minimalist Claude Code Task Management Workflow
I decided to create my own claude code task management worfklow because the world does not have enough of those already.
Software Architecture as Living Documentation Series Index Post
This is a series of posts exploring how to automatically extract software architecture and domain concepts from a codebase to have 100%…
Defining a DSL for Extracting Software Architecture as Living Documentation
Wouldn't it be great if you could automatically generate any architecture diagram you wanted from an existing codebase and the diagram was…
Enforcing Software Architecture Living Documentation Conventions
This series of posts is a journey into the world of living documentation for software architecture. Our goal is to be able to generate all…
Enterprise-wide Software Architecture as DDD Living Documentation
Can the architecture of our company's entire software architecture be a living documenation?
Extracting your software architecture with ts-morph
Humans and AI work better when we understand more about the complex systems we're dealing with
Reverse Engineering your Software Architecture with Claude Code to help Claude Code
Coding agents can do more when they understand your system.
Forming an Architecture Modernization Enabling Team (AMET)
In this article, we address one of the most important and difficult challenges we see organizations we work with facing when introducing…
Beyond Problem and Solution Space: Better models for modern product development
I often encounter the phrases problem space and solution space. People use these words to try and articulate the types of work and…
Modernization Strategy Selector
But a portfolio-based approach is crucial. The ROI of modernization will differ drastically across your business subdomains, so choosing…
Architecture Modernization Enabling Teams (AMET)
This article describes a pattern we have observed and applied in multi-team-scope architecture modernization initiatives…
Domain Discovery Facilitation: Make Scale Explicit
If you facilitate or attend domain discovery workshops, one of the most effective and simplest ways to uncover insights is to make the…
Improving Trust to Enable Fast Flow
Discussions of how to deliver software faster are ubiquitous in our communities. But trust is not often a key part of those discussions….
Learning Diverse Question Formats to Get Better Insights
One thing I’ve been doing a lot this year is thinking about how to ask better questions. It’s not a skill I’ve deliberately tried to…
The Structure and Process Fallacy
“If our teams were just organized in the right way, and we adopted the agile process, we’d be so much more efficient.”
Miro…. For In-person Talks and Workshops?
The global community has largely decided that in-person events are now safe again. Does that mean the end for digital tools like Miro?
Architecture & DDD Kata: Online Car Dealership
I’ve just created a new kata which you and your team/friends can use to practice your architecture and domain-driven design skills. It’s…
Freestyle Visual Collaboration
In recent times there’s been a lot of activity in the visual collaboration space. Lots of new tools, techniques, canvases, and remixes have…
A Clash of Mindsets: When New Products Depend on Existing Products
A common pattern of business growth is to expand from a single product to multiple products. But this can cause a clash of mindsets…
From Consultant to Facilitator
Summer 2021 was coming to a close and a new work project was starting up. I was looking forward to it, but at-at the same time I wasn’t…
Carefully Forming Teams to Begin Technology Modernization
It’s a common sight to see technology organization re-inventing aspects of their operating model. Often, it’s a combination of migrating to…
domain-driven design (ddd) vs Domain-Driven Design (DDD)
Practically everybody is doing domain-driven design in some form. When we build new products and services, we’re identifying unmet needs in…
From Domains to Value Streams
The 2010s were a turning-point in the history of software engineering. At the start of the decade, Eric Ries disrupted traditional…
Product, Domain, and Team Architecture Overview Template
A difficult aspect of my job is understanding enough about a client’s purpose and landscape to offer useful advice and propose how I might…
Turning Domain Discovery into Product and Organizational Improvements with a DDD Exemplar
One of the challenges I see regularly is inertia following domain discovery workshops. Techniques like big picture event storming are great…
Share Pie: The DDD Treasure Hidden in Plain Sight
There’s an aspect of Domain-Driven Design that rarely gets talked about. I think it’s the most important aspect of DDD, yet if you search…
Strategic Domain-Driven Design Kata: Delivericious
If you like this Kata, check out another Kata I’ve published using the example of an online car dealership…
Pattern Reading in Visual Discovery and Modelling
There is a long list of things I love about visual discovery and modelling techniques like Event Storming and Example Mapping. But there is…
What is a Domain?
In business, technology and general, the word “domain” appears frequently and with many different meanings in various contexts. This gets…
Sequencing Architecture Modernization: Risk Averse vs Risk Tolerant
Where to begin modernizing your architecture? Is playing it safe the best way to start, or are there advantages to taking a few risks?
Outside-in Domain Landscape Discovery
Mapping out your business’s domain landscape has many benefits: knowledge sharing, generating product ideas, providing the foundation for…
Domain Services: The Next (small) Evolution of Microservices
The microservices era has been good for software architecture. I remember when the idea of multiple databases was punishable by death. But…
Nurturing Design in Your Software Engineering Culture
There are a few qualities that differentiate average from high performing software engineering organisations. I believe that attitude…
The Importance of a Great Developer Experience
In February 2012 I began working for a new company. On my first day, I deployed to production. I was lost for words. It felt like magic…
Misaligned Incentives Fuel Organizational Dysfunctions
Sometimes we need to stop fighting the symptoms and recognise that there is a more fundamental problem. Commonly, the fundamental problems…
Architecture Ownership Patterns for Team Topologies. Part 3: Multi-Team Patterns
As a system grows, higher-order abstractions are needed for ease of understanding, communication, and management. In Geography, continents…
Architecture Ownership Patterns for Team Topologies. Part 2: Single Team Patterns
The systems we build are composed of many pieces. From mobile apps, to domains, to user journeys. How should we slice up the system and…
Architecture Ownership Patterns for Team Topologies. Part 1: A Business Architecture Model
Team Topologies has significantly advanced the discussion on organisation design for technology companies. The next step is to determine…
Domain, Subdomain, Bounded Context, Problem/Solution Space in DDD: Clearly Defined
Domain-Driven Design is an approach to designing systems, usually software, that emphasises creating a common language between domain…
I’ve seen the benefits of DDD principles for the past 10 years
Create a Ubiquitous Language
Enterprise Architecture in a Product-Oriented DevOps World
Enterprise Architecture (EA) is hugely important for medium and large organisations. Enterprise Architects take a broad look at an…
Organising Large Miro Boards For Remote Workshops
Back in the summer I shared some of the techniques I’d been using to reimagine my in-person architecture workshops as remote digital…
Bounded Context Canvas Recipe: Use Case Swimlanes
Don’t let the tools you use overly-constrain your thinking. Use them as a starting point for design and discovery, and then bend them to…
Self-documenting Architecture
One of the biggest time costs in software development is understanding how a system works. And the problem may be growing. Systems are…
The Relationship Between Software Architecture And Business Models (and more)
As an architect, how often are you thinking about business models? If every significant architecture decision has business consequences…
Legacy Architecture Modernisation With Strategic Domain-Driven Design
Most organisations go through an architecture modernisation effort at some points as their systems drift into a state of intolerable…
Remote Workshops Using Miro: What I’ve Learned So Far
Recently I ran a fully remote, 2 full-day, Strategic Domain-Driven Design workshop using Miro. This was necessitated by Covid. All my…
Strategic DDD Remote Collaboration Toolkit
A free Miro whiteboard containing a selection of Strategic DDD tools for remote collaboration.
Remote-optimised Domain Modelling: The Present and Future
Both in the short-term and the long-term, there is a need for effective collaborative domain modelling techniques for remote teams.
Remote Team Flow EventStorming for Retrospectives
Visualise your team’s process and you’ll uncover a higher quantity and higher quality opportunities for improving how you work as a team…
Alexey!
I think it’s a classic RPC vs orchestration vs choreography decision making.
Visualising Socio-Technical Architecture with DDD and Team Topologies
I’ve been disappointed for a long time with the way in which companies organise software development teams.
DDD Pattern: Library Contexts
Sometimes you should design your bounded contexts like a physical library, preferring commands over events.
Core Domain Patterns
Time and resources are limited. How we spend our time and apply our resources when developing software systems is possibly the most…
Bounded Context Canvas V3: Simplifications and Additions
Six months ago I shared a blog post introducing the Bounded Context Canvas. Since that post six months, I’ve received feedback from my own…
Uncovering Hidden Business Rules with DDD Aggregates
In the real world we can be vague about our business rules and processes. We can make exceptions or we can bypass a few steps to…
EventStorming Modelling Tips to Facilitate Microservice Design
EventStorming is a hugely popular technique, allowing us to explore, analyse, and model business domains more effectively than traditional…
Organisational Dysfunctions Mirrored as Architectural Complexity
We have come to acknowledge in recent years that there is a strong relationship between the design of a software architecture and the…
Mapper Contexts & Supercontexts: Decoupling Domain-Specific and Domain-Generic Bounded Contexts
You’re building a new system and two members of your team propose alternative architectures for sending notifications. Which one is…
Modelling Bounded Contexts with the Bounded Context Canvas: A Workshop Recipe
How do we break a large system into smaller, more manageable modular components? This is the question I get asked the most, so I’ve put…
Should We Create a Shared Service? A Decision-making Checklist
One of the key decisions we need to make in software architecture and in our organisations is when and where to create shared services and…
Sociotechnical Design Variables
Over the past few years I have focused much of my learning and work choices around learning about the design of sociotechnical systems —…
Consumer-driven Coupling: Patterns and Anti-patterns
Organisations maximising the advantages provided by microservices tend to be organisations which view microservices not just as a…
A Note to Business Leaders on Software Engineering
Your assumptions about software development are holding your business back. There are three questions you need to ask yourself.
Gateway Interchange Contexts
When your software system communicates with external systems or devices, there is good reason to isolate all communication with the…
5 Principles for Forming Autonomous Software Engineering Teams
Over the past 6 months I’ve been spending a large percentage of my time hiring and forming 3 software development teams at Navico as we…
Alignment Efficiency: When to Sacrifice Speed for Greater Alignment
In the perfect world, each team in our organisation would spend 100% of their time on improving products and delivering value to customers…
Organisational Fluidity in Digital Ecosystem Platform Design: Strategic Alliance Teams
Platforms which enable digital ecosystems are growing in prevalence. Organisations want, and need, to expose their APIs as an enabler for…
I don’t disagree with anything you say, and largely it’s down to semantics.
“However: Products are bought by customers. Customers are the people with money. They are willing to spend money for certain quality.
Product-aligned vs Capability-aligned Organisation Design
There are broadly two dominant approaches used to organise teams in modern organisations that have moved beyond traditional…
Why is Hiring so Hard? How to Improve Your Hiring Fortunes
You’ve got a backlog full of innovative product ideas that will transform your business results, but you just can’t hire people quickly…
The ‘Chocolate Sauce’ Design Heuristic
A trip to the supermarket can teach you a lot about designing software systems and shaping teams to build them…
Primary Sociotechnical Design Heuristics
There are thousands of ways we can shape the software systems we build and organise our teams around them. Yet there is no flowchart we can…
The Challenges and Traps of Architecting Sociotechnical Systems
Loosely-coupled teams enabled by loosely-coupled software architecture is one of the strongest predictors of continuous delivery…
Managing and Eliminating Cross-team Dependencies
Cross-team dependencies can be the source of immense pain and friction, resulting in all kinds of organisational dysfunctions and politics…
Aligning Organisation Design & Software Architecture with Business Strategy: Business Capability…
How we define team boundaries and shape the architecture of our software systems is one of the biggest influencers of how successfully we…
Evolutionary Sociotechnical Architecture Patterns
We say that architecture should be evolutionary — continuously adjusting itself to better serve business needs. What does an architectural…
An Introduction to Sociotechnical Architecture Patterns
We must all think of ourselves as sociotechnical architects.
‘Intentional Naivety First’ Bounded Context Modelling
How to kick offstrategic design efforts to design autonomous systems
Managing Complexity in Complex Adaptive Systems with Domain-Driven Design
Modern organisations are infinitely complex systems. Layers of inextricably interlinked dependencies between people, policy, and…
Aligning Teams with Business Capabilities to Improve Flow… Why You Shouldn’t
You’ve probably heard the advice to align your development teams with business capabilities — cross-functional, autonomous, product-focused…
The Continuous Organisation Design Playbook
The way we design modern organisations for agile delivery is akin to Football in the 1800s. Little strategy, but lots of mindless running…
KanDDDinsky Strategic DDD Workshop Review & Materials
I’m just home from a mind-blowing few days in Berlin for the KanDDDinsky conference. On day two of the conference, Zsofia Herendi and I ran…
Evolutionary Pressures Forcing Software Architects to Adapt
We are currently witnessing a generational shift in the evolution of digital product development. Software architects who wish to thrive in…
Designing Captivating Workshops
Everyone loves a well designed workshop where they learn valuable new skills at the same time as having lots of fun, and it’s good for…
Becoming an Agile Tech Strategist
Tech strategist is not a job title — it’s a mindset
Tech Strategy: You Need it, But What is it?
The Strategic Practices of Domain-Driven Design
Enabling Coevolution of Organisational & Technical Boundaries
Finding Service Boundaries: The One Rule That Matters
Confusing Process Stages With Bounded Contexts
My 3 Biggest Hiring Mistakes
Which 3 Coding Habits Have You Come to Love?
Agile in the UK Government: Why You Should Care
Learning, Teaching & Selling DDD With The Infographic
Getting Programmers To Agree
Digital Transformation…. The Hard Parts
Designing For Team Autonomy: Tools For Business & Technical Architecture Alignment
Random Thoughts on Hiring
Agile Retrospectives: Ceremony or Sensation?
Optimising Team Boundaries For Iteration Is Fundamental To Agile
Play Framework Conditional Form Mappings
Testing Without Objects — I Like It
Functional Application Services
API Testing Patterns for the Play Framework
Strict JSON Deserialization with Enum Validation
Sharing Databases Within Bounded Contexts
Please Use The Cascade Rule
Domain-Driven Architecture Diagrams
Trying to be a Good Code Teacher
What I Learned from the Business Model Canvas Workshop
Starting a Tech Team Transformation
Win a Copy of Patterns, Principles, and Practices of Domain-Driven Design
Proposing the Emotional Intelligence Retrospective
Empathetic Software Development Guided by the Business Model Canvas
My Favourite Startup Tools for Devs
Finding Common User Journeys with Apache Spark
Do You Know Your Employer’s Business Model?
Enabling Continuous Delivery: Through Process or Patterns?
Is Your Team Responsive to Change?
A Stakeholder’s Thoughts on Developers, Collaboration, and DDD
Conference Video Recommendations
Continuous Delivery with Thoughtworks GO and Docker
How I’ve Been Learning Python
A Strategy for Building a Software Team
Come and Join the Innovative DDD Community
How Much QA Tax Do You Pay?
Bad Estimates and Broken Confidence
A Short Technology Retrospective
Making Your Linux Desktop Spellbinding
2013 — Highlights and Shoutouts
Scala eXchange 2013 Review — Day 2
Scala eXchange 2013 Review — Day 1
Business Considerations of a Technology Migration
Know Your Stack — Scala to Java to Bytecode to Assembly
Justified for Taking a Lean Approach?
Using Metrics to Turn Technical Decisions into Business Decisions
Atmosphere, Scala, SBT & Akka — Step-by-step
The Architecture Heat Map
Surviving My First Few Weeks as a Tech Lead
How I Build Software: Productivity Patterns
Building Distributed Systems With The Right Tools: Akka Looks Promising
Cross-platform communication with dbus
How I build software: Enough design to clear my mind
How I build software: Start with a vision
Small things in Scala
Using riak to understand erlang/OTP application structure
Using Riak to understand how Erlang applications are packaged and started
Simple steps to great diagrams
Improve your communication skills with expert diagrams
Aligning technical infrastructure with business needs: Strategic use of hardware
Aligning technical Infrastructure with business needs: Talk to the business
Contrasting SOA Philosophies
Guiding newbie toward productivity
2012 taught me…..
The .NET eco-system is a great place to begin your personal ventures: Part 2 — Fast and free persistence
The .NET eco-system is a great place to begin your personal ventures: Part 1 — Web frameworks and hosting
Just because the code looks the same
Method-per-class is a bit smelly
Erlang Process Monitoring
A Simple Erlang Server in 10 Lines of Code
Is the code better?
Not Sure About “NO DB”
The Contentious Controller
Is “AssertWasCalled” an Anti-pattern?
FubuValidation in Open Rasta
2011 Conceptual Web Framework Utopia — Part 2, Testing
DDD — Notes from the big blue book. Part 8
2011 Conceptual Web Framework Utopia — Part 1, “Architecture”
DDD — Notes from the big blue book. Part 7
DDD — Notes from the big blue book. Part 5
DDD — Notes from the big blue book. Part 6
Fun with Fubu’s Html Conventions
DDD — Notes from the big blue book. Part 3
DDD — Notes from the big blue book. Part 4
DDD — Notes from the big blue book. Part 2
DDD — Notes from the big blue book. Part 1
Git-Tfs: Step-by-Step
FubuMVC — My Starting Conventions
WPF DataGrid DataDialogs
UK Date Validation For JQuery Validate
Clean Code Tricks — Intention Revealing Messages
From MVC to MVVM in WPF — My Findings
Multi-Touch Music Catalogue — Part 1: Getting Started
Gembox Excel Downloads in ASP.NET MVC
Augmenting the [AutoLoad] — Logical Parameter Names
Elegant, Opt-in Model Binding to Persistence Entities in ASP.NET MVC
Total BDD in ASP.NET MVC
Zip-Me-Quick — Rapid Zip File Creation In C#
Integration Testing in a Development Environment With SpecFlow — Part 2: Local IIS (Windows IIS)
Integration Testing in a Development Environment With SpecFlow — Part 1: Cassini
Get The First Date In A Week, Given The Week’s Number — With Help From BDD
Making my Repository Factory Test-Friendly
Code First with Generic Repositories and BDD (“that’s exciting” eh, Rob Conery?)
Castle Windsor IoC in ASP.NET MVC 2.0 — Easy Setup Guide