Home/Martin Fowler
Author

Martin Fowler

97 articles by Martin Fowler.

Security — The VibeSec Reckoning

The VibeSec Reckoning

“Vibe coding” - the practice of non-technical citizen builders using generative AI tools to rapidly develop applications, this has significantly accelerated software prototyping. However, because AI agents naturally prioritise the path of least resistance, they frequently recommend insecure configurations, creating systemic security exposure across industries. To combat this we need to write a sec

MFMartin Fowler·May 27, 2026Security
AI & ML — Some thoughts on LLMs and Software Development

Some thoughts on LLMs and Software Development

I’m about to head away from looking after this site for a few weeks (part vacation, part work stuff). As I contemplate some weeks away from the daily routine, I feel an urge to share some scattered thoughts about the state of LLMs and AI.

MFMartin Fowler·August 28, 2025AI & ML
AI & ML — Who is LLM?

Who is LLM?

Is an LLM a stubborn donkey, a genie, a slot machine, or Uriah Heep?

MFMartin Fowler·July 22, 2025AI & 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
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
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
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
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
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