Home/Martin Fowler
Source

Martin Fowler

186 articles from Martin Fowler.

Engineering — Patterns for Managing Source Code Branches

Patterns for Managing Source Code Branches

Modern source-control systems provide powerful tools that make it easy to create branches in source code. But eventually these branches have to be merged back together, and many teams spend an inordinate amount of time coping with their tangled thicket of branches. There are several patterns that can allow teams to use branching effectively, concentrating around integrating the work of multiple de

MFMartin Fowler·May 28, 2020Engineering
Performance — The Elephant in the Architecture

The Elephant in the Architecture

We, and our colleagues, are often called on to perform architectural assessments for our clients. When we do this, the architects involved with these systems will talk about the performance of these systems, how resilient they are to faults, and how they are designed to evolve to easily support new capabilities. The elephant that rarely comes up, however, is how different systems contribute to bus

ICIan Cartwright and Martin Fowler·March 2, 2020Performance
Engineering — Coping with Covid-19

Coping with Covid-19

What we've learned so far from dealing with the Coronavirus Disease 2019 (Covid-19) outbreak

MFMartin Fowler·February 27, 2020Engineering
Engineering — Product-Service Partnerships

Product-Service Partnerships

When customer companies buy software products, they usually need skilled staff to install them. This staff is usually provided by a service provider company, since software product vendors don't find it makes business sense to build their own services arm. Customers need to be aware of the relationship between product vendors and service providers, and should require transparency on the relationsh

MFMartin Fowler·February 13, 2020Engineering
Career & Teams — How to manage a program in a product-mode organization

How to manage a program in a product-mode organization

In their ideal state, product-mode organizations are formed of loosely coupled, autonomous teams that respond rapidly to articulated and unarticulated user needs. On occasion however, opportunities arise that require a response involving coordination across multiple teams. If not managed effectively the outcome will result in missed revenue, unsatisfied customers and wasted team capacity. We refer

LNLuiza Nunes and James Lewis·January 23, 2020Career & Teams
Engineering — On Pair Programming

On Pair Programming

Many people who work in software development today have heard of the practice of pair programming, yet it still only has patchy adoption in the industry. One reason for its varying acceptance is that its benefits are not immediately obvious, it pays off more in the medium- and long-term. And it's also not as simple as “two people working at a single computer”, so many dismiss it quickly when it fe

BBBirgitta Böckeler and Nina Siessegger·January 15, 2020Engineering
Databases — Evolutionary Database Design

Evolutionary Database Design

Over the last decade we've developed and refined a number of techniques that allow a database design to evolve as an application develops. This is a very important capability for agile methodologies. The techniques rely on applying continuous integration and automated refactoring to database development, together with a close collaboration between DBAs and application developers. The techniques wo

PSPramod Sadalage and Martin Fowler·Databases
Design & UX — Is Design Dead?

Is Design Dead?

For many that come briefly into contact with Extreme Programming, it seems that XP calls for the death of software design. Not just is much design activity ridiculed as “Big Up Front Design”, but such design techniques as the UML, flexible frameworks, and even patterns are de-emphasized or downright ignored. In fact XP involves a lot of design, but does it in a different way than established softw

MFMartin Fowler·Design & UX
Distributed — Canadian Workshop on Scaling XP/Agile Methods

Canadian Workshop on Scaling XP/Agile Methods

As XP and other Agile methods gain popularity, questions are beginning to surface regarding how to scale XP beyond teams of 10-12 people. In mid February 2003 a workshop dedicated to the subject was held in Banff Alberta Canada. In this article we report on the keynote speeches from Ken Schwaber, and Martin Fowler, as well as other leading practitioners.

JRJonathan Rasmusson and Jim McDonald·Distributed
Networking — Microservices Guide

Microservices Guide

The microservice architectural pattern is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management

MFMartin Fowler·Networking
Design & UX — To Be Explicit

To Be Explicit

Often designs techniques are used to make a system more flexible, but end up being harder to work with. One of the reasons is that explicitness is a property that often gets forgotten in design.

MFMartin Fowler·Design & UX
Engineering — Using Metadata

Using Metadata

You can use metadata based approaches to remove the pain from tedious data oriented tasks.

MFMartin Fowler·Engineering
Engineering — The XP 2000 Conference

The XP 2000 Conference

In late June over a hundred people gathered on the Mediterranean island of Sardinia to take part in the XP2000 conference to discuss Extreme Programming (XP) and other flexible methodologies.

MFMartin Fowler·Engineering
Engineering — Variations on a Theme of XP

Variations on a Theme of XP

One of the attractive things about XP is that it gives quite definite statements about what you should do to be doing XP. Furthermore that set of practices is carefully designed to fit together. Taking anything out has serious consequences. Yet one of the principles of XP and other agile methods is that they be self adaptive: that is you should change the process as you are developing the project.

MFMartin Fowler·Engineering
Engineering — Public versus Published Interfaces

Public versus Published Interfaces

Many modern languages make a distinction between public and private features in a module. A distinction that doesn't get made so often is between public and published features: and that may be a more important distinction.

MFMartin Fowler·Engineering
Databases — Domain Logic and SQL

Domain Logic and SQL

Over the last couple of decades we've seen a growing gap between database-oriented software developers and in-memory application software developers. This leads to many disputes about how to use database features such as SQL and stored procedures. In this article I look at the question of whether to place business logic in SQL queries or in-memory code, considering primarily performance and mainta

MFMartin Fowler·Databases
Engineering — Continuous Delivery Guide

Continuous Delivery Guide

It’s hard enough for software developers to write code that works on their machine. But even when that’s done, there’s a long journey from there to software that’s producing value - since software only produces value when it’s in production. he essence of my philosophy to software delivery is to build software so that it is always in a state where it could be put into production. We call this Cont

MFMartin Fowler·Engineering
Career & Teams — Enterprise Architects Join the Team

Enterprise Architects Join the Team

Enterprise Architecture groups often get separated from day to day development. This can lead to their knowledge of development work getting out of date and development teams not taking a broad company-wide perspective. Having seen this happen frequently my colleague (Thoughtworks CTO) Rebecca argues that enterprise architects can be much more effective by joining development teams.

RPRebecca Parsons·Career & Teams
Performance — Fail Fast

Fail Fast

If software's going to go south, Jim explains in this column why it should collapse as fast as possible.

JSJim Shore·Performance
Design & UX — The Most Important Design Guideline?

The Most Important Design Guideline?

Everyone has their own list of important design guidelines. Scott concentrates on interfaces and how to design them so they are easy to use correctly and hard to use incorrectly.

SMScott Meyers·Design & UX
Architecture — MDA: Revenge of the Modelers or UML Utopia?

MDA: Revenge of the Modelers or UML Utopia?

At OOPSLA 2003 Dave Thomas (the founder of OTI) gave a thoughtful and powerful critique of Model Driven Architecture. In this column he explains why he thinks a universal model-driven approach is likely to fail, and points out that the UML and Domain Specific Languages still have value.

DTDave Thomas·Architecture
Design & UX — Continuous Design

Continuous Design

The rising popularity of refactoring, tools such as JUnit, and agile methodologies such as Extreme Programming (XP) has brought a new style of design into view. Continuous design is the process of using refactoring to continuously improve a program's design. In this column Jim discusses his experiences with continuous design, in particular with design issues that seem tricky such as internationali

JSJim Shore·Design & UX
Engineering — Data Access Routines

Data Access Routines

A common part of encapsulation, particularly with object-oriented systems, is hiding data structures. Yet it's also common to expose much of this data behind data access routines. In this column I cover some guidelines for writing data access routines. However don't forget that if you can leave the data hidden, that's usually better.

MFMartin Fowler·Engineering
Architecture — Who Needs an Architect?

Who Needs an Architect?

What is architecture, and who exactly is an architect? These are questions that seem to get everyone very heated. So in this IEEE Software column, I let Ralph Johnson explain about architecture: with a definition that matches all others in a way that nobody agrees with. I also talk about two sub-species of architect: Architectus Reloadus and Architectus Oryzus .

MFMartin Fowler·Architecture
Architecture — The Difference between Marketecture and Tarchitecture

The Difference between Marketecture and Tarchitecture

When we think about software architecture, we usually think about its technical architecture. But there's also another important architecture - the one we use to communicate with the customers of the software: the marketing architecture. Neglecting this “marketecture”, and its relationship with the “tarchitecture”, can get development projects into a lot of trouble.

LHLuke Hohmann·Architecture
Design & UX — Patterns

Patterns

My IEEE column on the valuable contributions that patterns can make to understanding software design.

MFMartin Fowler·Design & UX
Performance — Yet Another Optimization Article

Yet Another Optimization Article

It always surprises me that many well-established principles about performance optimization aren't very well known. This article is yet another attempt to cover these.

MFMartin Fowler·Performance
Design & UX — Avoiding Repetition

Avoiding Repetition

It's sometimes quite remarkable how the simple rule of avoiding repetition in software can lead into good design

MFMartin Fowler·Design & UX
Engineering — Separating User Interface Code

Separating User Interface Code

One of the first lessons I learned was to always keep user interface code separate from anything else. Not just is this still good advice, it's surprising how often it's forgotten.

MFMartin Fowler·Engineering
Engineering — Protected Variation: The Importance of Being Closed

Protected Variation: The Importance of Being Closed

Craig's spot in the column looks at the importance of the Open-Closed principle and Protected Variation, and why Parnas's information hiding is more than encapsulation. He also gives some tips on ways to implement a protected variation.

CLCraig Larman·Engineering
Engineering — The Test Bus Imperative

The Test Bus Imperative

Testability is such an important virtue that you should make architectural decisions to improve the testability of a system.

RMRobert Martin·Engineering
Languages — Module Assembly

Module Assembly

Modular programming is not just about programming to interfaces, it's also about assembling modules together without the various modules knowing which concrete modules they are talking to.

MFMartin Fowler·Languages
Engineering — Modeling with a Sense of Purpose

Modeling with a Sense of Purpose

The kinds of model you draw depends on the purpose that you want to put them to. John describes a useful distinction between conceptual, specification, and implementation models.

JDJohn Daniels·Engineering
AI & ML — Exploring Generative AI

Exploring Generative AI

Generative AI and particularly LLMs (Large Language Models) have exploded into the public consciousness. Like many software developers Birgitta is intrigued by the possibilities, but unsure what exactly it will mean for our profession in the long run. She has taken on a role in Thoughtworks to coordinate our work on how this technology will affect software delivery practices. On this page she post

BBBirgitta Böckeler·AI & ML