TeamTopologies
A model that helps people design effective teams for software development.
A website on building software effectively
Visit martinfowler.com → On Hacker News Jun 2009 – Oct 2026
Software Engineering 66Career & Management 20Tech Industry & Business 15AI & Machine Learning 13Society, Policy & Culture 10Systems & Performance 8
A model that helps people design effective teams for software development.
A series of patterns for building an AI co-pilot application.
Threat modeling is a risk based approach to cyber security requirements analysis.
Ship/Show/Ask is a branching strategy that helps teams wait less and ship more, without losing out on feedback.
A guide to effective pair-programming
In P of EAA I said "don't distribute your objects". Does this advice contradict my interest in Microservices?
Systems are constrained to follow the communication patterns of their designers.
A Data Lake is a store that hold raw data as a source for data scientists to explore ways to gain information. It should not be accessed by end-users or used for system integration.
How continuous learning shapes effective software development with LLMs
Describing the way architectures for UIs have evolved over the years, in particular the many and often misunderstood definitions for Model-View-Controller.
the future of senior developers, junior developers, more on cognitive debt, DevEx versus AgentEx, the role of IDEs, consequences of task switching in supervisory programming
Notes from my colleagues on AI-assisted software delivery
Demonstrating how a weak session secret can allow an attacker to take control of a server
Why Domain-Specific Languages and good abstractions make LLM code generation reliable and reviewable.
A long-form article entitled: "Domain Logic and SQL"
Five patterns to help Single Page Applications fetch data from remote sources
CQRS (Command Query Responsibility Segregation) is the notion that you can use a different model to update information than the model you use to read information
Sometimes it's a good thing to be writing code that you expect to throw away in a couple of years time.
Defining the microservices architectural style by describing their nine common characteristics
LMAX is a retail financial trading system that can handle that can 6 million orders per second on a single JVM thread. The business logic runs in-memory surrounded by disruptors using event sourcing.
The rise of agile methods (particularly XP) makes some people wonder if there's any role left for software design. I argue that this change shifts from planned to evolutionary design.
Capture all changes to an application state as a sequence of events.
Good developers’ caution about agentic development comes from knowing that built isn’t the same as working in production.
Object-Relational Mappers get a lot of hate from people who misjudge the complexities of the task.
There are only two hard things in Computer Science: cache invalidation and naming things -- Phil Karlton (bonus variations on the page)
a bliki entry for Snowflake Server
Explaining the difference between Mock Objects and Stubs (together with other forms of Test Double). Also the difference between classical and mockist styles of unit testing.
Feature Flags can be categorized into several buckets; manage each appropriately. Smart implementation can help constrain complexity.
Don't try to build a single, unified model for a large domain. Instead DDD advises us to divide such a domain into many bounded contexts with explicit relationships between them.
Every developer integrates their work into mainline at least every day.