Home/Martin Fowler
Source

Martin Fowler

186 articles from Martin Fowler.

Engineering — Uncovering the Seams in Mainframes for Incremental Modernisation

Uncovering the Seams in Mainframes for Incremental Modernisation

Mainframe systems continue to run much of the world's computing workload, but it's often difficult to add new features to support growing business needs. Furthermore the architectural challenges that make them slow to enhance also make them hard to replace. To reduce the risk involved, we should use an incremental approach to legacy displacement, gradually replacing legacy capabilities with implem

AFAlessio Ferri and Tom Coggrave·April 10, 2024Engineering
Performance — Measuring Developer Productivity via Humans

Measuring Developer Productivity via Humans

Measuring developer productivity is a difficult challenge. Conventional metrics focused on development cycle time and throughput are limited, and there aren't obvious answers for where else to turn. Qualitative metrics offer a powerful way to measure and understand developer productivity using data derived from developers themselves. Organizations should prioritize measuring developer productivity

ANAbi Noda and Tim Cochran·March 19, 2024Performance
Engineering — What if we rotate pairs every day?

What if we rotate pairs every day?

Benefits of pair programming are widely accepted but advice around pair rotation remains controversial. When and how frequently should teammates rotate pairs? And… What if we rotate pairs every day? We worked with three teams through an exercise of daily pair rotation. We developed a lightweight methodology to help teams reflect on the benefits and challenges of pairing and how to solve them. Init

GRGabriel Robaina and Kieran Murphy·March 6, 2024Engineering
Engineering — Patterns of Legacy Displacement

Patterns of Legacy Displacement

When faced with the need to replace existing software systems, organizations often fall into a cycle of half-completed technology replacements. Our experiences have taught us a series of patterns that allow us to break this cycle, relying on: a deliberate recognition of the desired outcomes of displacing the legacy software, breaking this displacement in parts, incrementally delivering these parts

ICIan Cartwright, Rob Horn, and James Lewis·March 5, 2024Engineering
AI & ML — Engineering Practices for LLM Application Development

Engineering Practices for LLM Application Development

LLM engineering involves much more than just prompt design or prompt engineering. In this article, we share a set of engineering practices that helped us deliver a prototype LLM application rapidly and reliably in a recent project. We'll share techniques for automated testing and adversarial testing of LLM applications, refactoring, as well as considerations for architecting LLM applications and r

DTDavid Tan and Jessie Wang·February 13, 2024AI & ML
Career & Teams — Continuous Integration

Continuous Integration

Continuous Integration is a software development practice where each member of a team merges their changes into a codebase together with their colleagues changes at least daily. Each of these integrations is verified by an automated build (including test) to detect integration errors as quickly as possible. Teams find that this approach reduces the risk of delivery delays, reduces the effort of in

MFMartin Fowler·January 18, 2024Career & Teams
Networking — Catalog of Patterns of Distributed Systems

Catalog of Patterns of Distributed Systems

Distributed systems provide a particular challenge to program. They often require us to have multiple copies of data, which need to keep synchronized. Yet we cannot rely on processing nodes working reliably, and network delays can easily lead to inconsistencies. Despite this, many organizations rely on a range of core distributed software handling data storage, messaging, system management, and co

MFMartin Fowler·November 23, 2023Networking
Frontend — Headless Component: a pattern for composing React UIs

Headless Component: a pattern for composing React UIs

As React UI controls become more sophisticated, complex logic can get intertwined with the visual representation. This makes it hard to reason about the behavior of the component, hard to test it, and necessary to build similar components that need a different look. A Headless Component extracts all non-visual logic and state management, separating the brain of a component from its looks.

JQJuntao QIU | 邱俊涛·November 7, 2023Frontend
Engineering — Creating an integrated business and technology strategy

Creating an integrated business and technology strategy

To make fruitful use of technology, we need to align our technology thinking with underlying business plans. A technology strategy can drive this alignment, providing it properly integrates business and technology. We have developed a conceptual framework to help us with this strategic thinking, based on recognizing common aspects of strategic initiatives, leading us to identify eleven prevalent s

STSarah Taraporewalla·August 24, 2023Engineering
Engineering — Demo Front-End

Demo Front-End

Have you ever attended a “demo” where developers were proudly showing screen after screen of JSON output from their API, while users were confused and distracted, unable to make any sense of it? Have you ever tried to use an API in development, and been frustrated by how difficult it is to find the correct JSON payload and header incantations to be able to test a feature? A Demo Front-End is a sim

MVMatteo Vaccari·August 23, 2023Engineering
Career & Teams — How platform teams get stuff done

How platform teams get stuff done

Platform teams have a unique reliance on other teams to ensure adoption of their platform - getting code changes into other teams' codebase is critical to their success. There are a variety of patterns for that cross-team collaboration, and selecting the right ones depends on both the phase of platform adoption and the ability of both teams and codebases to accept external influence.

PHPete Hodgson·July 19, 2023Career & Teams
Design & UX — Decentralizing the Practice of Architecture at Xapo Bank

Decentralizing the Practice of Architecture at Xapo Bank

Xapo was founded as a Bitcoin service provider and developed into an online bank. During this transition it needed to reassess its software estate and establish an architecture capability to guide its future. It took on ideas from Domain-Driven Design, Team Topologies, and the Architecture Advice Process to develop an Architectural Advice Forum. This led to greater alignment of its software delive

ASAnouska Streets, Kamil Dziublinski, and Andrew Harmel-Law·July 18, 2023Design & UX
AI & ML — Building Boba AI

Building Boba AI

We are building an experimental AI co-pilot for product strategy and generative ideation called “Boba”. Along the way, we’ve learned some useful lessons on how to build these kinds of applications, which we’ve formulated in terms of patterns. These patterns allow an application to help the user interact more effectively with a Large-Language Model (LLM), orchestrating prompts to gain better result

FAFarooq Ali·June 29, 2023AI & ML
Career & Teams — Linking Modular Architecture to Development Teams

Linking Modular Architecture to Development Teams

Can a modular architecture improve software delivery? Yes! -but with some caveats. This article charts the journey of an enterprise who set out to shift their architecture to a more modular one in order to ease their growing pains. They found that modularity is a multifaceted solution that extends beyond architecture, into business lines of communication, team topologies and effective developer ex

MFMatthew Foster·June 13, 2023Career & Teams
Design & UX — Dependency Composition

Dependency Composition

Based on frustrations with conventional framework-based dependency injection, I have adopted a composition strategy that utilizes partial application to inject context into modules. When combined with test-driven development as the design process and a focus on functions over classes, modules can be kept clear, clean, and mostly free of unintended coupling.

DSDaniel Somerfield·May 23, 2023Design & UX
Engineering — Using ChatGPT as a technical writing assistant

Using ChatGPT as a technical writing assistant

An experienced technical author explores using ChatGPT to assist with a number of writing projects. He finds ChatGPT can provide time-savings through drafts and prompting for additional content, but lacks accuracy and depth - as well as suffering from bubbly optimism. Overall it is useful if you work iteratively, asking for small chunks with well-crafted prompts.

MMMike Mason·April 25, 2023Engineering
AI & ML — An example of LLM prompting for programming

An example of LLM prompting for programming

My account of an internal chat with Xu Hao, where he shows how he drives ChatGPT to produce useful self-tested code. His initial prompt primes the LLM with an implementation strategy (chain of thought prompting). His prompt also asks for an implementation plan rather than code (general knowledge prompting). Once he has the plan he uses it to refine the implementation and generate useful sections o

MFMartin Fowler·April 13, 2023AI & ML
Frontend — Modularizing React Applications with Established UI Patterns

Modularizing React Applications with Established UI Patterns

Established UI patterns are often underutilized in the frontend development world, despite their proven effectiveness in solving complex problems in UI design. This article explores the application of established UI building patterns to the React world, with a refactoring journey code example to showcase the benefits. The emphasis is placed on how layering architecture can help organize the React

JQJuntao QIU | 邱俊涛·February 16, 2023Frontend
Engineering — Retrospectives Antipatterns

Retrospectives Antipatterns

If you use retrospectives, or any kind of meeting where people are supposed to discuss and learn from their discussions, you will have experienced less efficient sessions from time to time. There is no wonder in that, and it happens to most people. This article describes and offers solutions for three of these unfortunate situations: skipping generating insights, getting lost in things you can't c

ACAino Corry·February 15, 2023Engineering
Performance — Data Mesh Accelerate Workshop

Data Mesh Accelerate Workshop

To accelerate means to move faster, to gain speed. Effectively working with data is key for any organization that wants to thrive in the modern world, and Data Mesh is showing organizations how to realise value from their data, at scale. The Data Mesh Accelerate workshop helps teams and organisations accelerate their Data Mesh transformation, by understanding their current state and exploring what

PCPaulo Caroli and Steve Upton·January 12, 2023Performance
Engineering — Lean Inception

Lean Inception

An inception is an activity done at the start of a project to gather together the people involved and set a common direction and working style for the on-going work. The lean inception is a focused form of inception, which can be done in a single week. During this time we understand the key features and customers for the product, and build a canvas to formulate the characteristics of a Minimum Via

PCPaulo Caroli·February 22, 2022Engineering
Distributed — Building Infrastructure Platforms

Building Infrastructure Platforms

Infrastructure Platform teams enable organisations to scale delivery by solving common product and non-functional requirements with resilient solutions. This allows other teams to focus on building their own things and releasing value for their users. But nobody said building scalable platforms was easy... In this article Poppy and Chris explore 7 key principles which can help you build the right

PRPoppy Rowse and Chris Shepherd·February 9, 2022Distributed
Distributed — Scaling the Practice of Architecture, Conversationally

Scaling the Practice of Architecture, Conversationally

Architecture need not be a monologue; delivered top-down from the minds and mouths of a centralised few. This article describes another way to do architecture; as a series of conversations, driven by a decentralised and empowering decision-making technique, and supported by four learning and alignment mechanisms: Decision Records, Advisory Forum, Team-sourced Principles, and a Technology Radar

AHAndrew Harmel-Law·December 15, 2021Distributed
Engineering — You Can't Buy Integration

You Can't Buy Integration

Commercial integration tools are a couple decades old now, but there has been little in the way of overarching architectural principles describing when and how to use them. In this article, I argue that “buy” decision mechanics have caused us to exaggerate the value proposition of such tools, often leading to mandates to use a certain integration tool over a general purpose language. I claim that

BBBrandon Byars·December 14, 2021Engineering
Design & UX — The strong and weak forces of architecture

The strong and weak forces of architecture

Good technical design decisions are very dependent on context. Teams that regularly work together on common goals are able to communicate regularly and negotiate changes quickly. These teams exhibit a strong force of alignment, and can make technology and design decisions that harness that strong force. As we zoom out in a larger organisation an increasingly weak force exists between teams and div

EBEvan Bottcher·November 10, 2021Design & UX
Security — Compliance in a DevOps Culture

Compliance in a DevOps Culture

Integrating the necessary Security Controls and Audit capabilities to satisfy Compliance requirements within a DevOps culture can capitalize on CI/CD pipeline automation, but presents unique challenges as an organization scales. Understanding the second order implications and unintended consequences caused by the chosen implementation is key to building an effective, secure, and scalable solution.

CNCarl Nygard·November 2, 2021Security
Engineering — Ship / Show / Ask

Ship / Show / Ask

Ship/Show/Ask is a branching strategy that combines the features of Pull Requests with the ability to keep shipping changes. Changes are categorized as either Ship (merge into mainline without review), Show (open a pull request for review, but merge into mainline immediately), or Ask (open a pull request for discussion before merging).

RWRouan Wilsenach·September 8, 2021Engineering
Architecture — On the Diverse And Fantastical Shapes of Testing

On the Diverse And Fantastical Shapes of Testing

There are arguments about whether a testing portfolio should be a pyramid or more like honeycomb. My second biggest issue with this argument is that it's rendered opaque by the fact that it's not clear what people see as the difference between unit and integration tests.

MFMartin Fowler·June 2, 2021Architecture
Career & Teams — Mind the platform execution gap

Mind the platform execution gap

Developer productivity platforms are increasingly recognised as a way to manage the cognitive load of engineering teams and decrease time to market for new features. However, there are baseline capabilities that organisations need to cultivate in order to successfully execute on a plaform strategy. The platform team needs to think of the platform as a software product, needing dialog with its user

CGCristóbal García García and Chris Ford·April 27, 2021Career & Teams
Engineering — Bitemporal History

Bitemporal History

It's often necessary to access the historical values of some property. But sometimes this history itself needs to be modified in response to retroactive updates. Bitemporal history treats time as two dimensions: actual history records what history should be given perfect transmission of information, while record history captures how our knowledge of history changes.

MFMartin Fowler·April 7, 2021Engineering
Career & Teams — Maximizing Developer Effectiveness

Maximizing Developer Effectiveness

Technology is constantly becoming smarter and more powerful. I often observe that as these technologies are introduced an organization’s productivity instead of improving has reduced. This is because the technology has increased complexities and cognitive overhead to the developer, reducing their effectiveness. In this article, the first of a series, I introduce a framework for maximizing develope

TCTim Cochran·January 26, 2021Career & Teams
Distributed — Data Mesh Principles and Logical Architecture

Data Mesh Principles and Logical Architecture

Our aspiration to augment and improve every aspect of business and life with data, demands a paradigm shift in how we manage data at scale. While the technology advances of the past decade have addressed the scale of volume of data and data processing compute, they have failed to address scale in other dimensions: changes in the data landscape, proliferation of sources of data, diversity of data u

ZDZhamak Dehghani·December 3, 2020Distributed
SRE & Ops — Don't put data science notebooks into production

Don't put data science notebooks into production

We've come across many clients who are interested in taking the computational notebooks developed by their data scientists, and putting them directly into the codebase of production applications. Data science ideas do need to move out of notebooks and into production, but trying to deploy that notebooks as a code artifact breaks a multitude of good software practices. Predictably, that results in

DJDavid Johnston·November 18, 2020SRE & Ops
Engineering — Don't Compare Averages

Don't Compare Averages

In business meetings, it's common to compare groups of numbers by comparing their averages. But doing so often hides important information in the distribution of the numbers in those groups. There are a number of data visualizations that shine a light on this information. These include strip charts, histograms, density plots, box plots, and violin plots. These are easy to produce with freely avail

MFMartin Fowler·September 24, 2020Engineering