Why you should regularly smash your servers with a baseball bat (figuratively)| martinfowler.com
Immutable servers cannot have their configuration changed once deployed, instead they are torn down and replaced with a new server based on an updated (version-controlled) definition.| martinfowler.com
Feature flags (toggles) switch features on/off at runtime. They can hide partly built features and for A/B testing.| martinfowler.com
Back in the days when I did live talks, one of my abilities was to finish| martinfowler.com
Automatically correct the consequences of a incorrect event that's already been processed.| martinfowler.com
Collect together related accounting entries and provide summarizing behavior| martinfowler.com
Organizes business logic by procedures where each procedure handles a single request from the presentation.| martinfowler.com
An object model of the domain that incorporates both behavior and data.| martinfowler.com
An object that carries data between processes in order to reduce the number of method calls.| martinfowler.com
When I wrote Patterns of Enterprise Application Architecture, I was| martinfowler.com
Allowing an LLM to formulate calls to external systems| martinfowler.com
How to build a CLI coding agent| martinfowler.com
Intercept any updates to system state and route some of them to a new component| martinfowler.com
Daily stand-up meetings have become a common ritual of many teams. However, there are many subtle details that distinguish effective stand-ups and a waste of time.| martinfowler.com
Synchronize multiple screens by having them all be observers to a shared area of domain data.| martinfowler.com
Synchronize screens with an underlying model based on the flow of the user interaction between the screens.| martinfowler.com
Multiple components work together by communicating with each other by sending events when their internal state changes.| martinfowler.com
A reporting database takes data from an operational database, reorganizing it to better support reporting.| martinfowler.com
A memory image replaces database interactions with in-memory data using event sourcing to record persistent changes| martinfowler.com
A catalog of patterns to better understand, communicate, and teach the architecture of enterprise applications.| martinfowler.com
A long-form article entitled: "Organizing Presentation Logic"| martinfowler.com
Introducing seams to allow incremental displacement of a mainframe system.| martinfowler.com
Factor the UI into a view and controller where the view handles simple mapping to the underlying model and the the controller handles input response and complex view logic.| martinfowler.com
Agile methods explained by contrast to the plan-driven mainstream at the time. Key differences are adaptive rather than predictive planning and being people-oriented rather than process-oriented.| martinfowler.com
A simple log of changes, intended to be easily written and non-intrusive.| martinfowler.com
Separate software systems into strategic - enabling competitive advantage - and those that are utility. They have different success criteria ∴ managed differently.| martinfowler.com
A decade ago 'refactoring' was a word only known to a few| martinfowler.com
Yagni ("You Aren't Gonna Need It") is the principle that we should not build presumptive features. It should not be used as a justification for neglecting internal quality.| martinfowler.com
A model that helps people design effective teams for software development.| martinfowler.com
A business-capability centric team is long-term outcome-oriented team whose work is aligned with a particular aspect of the business.| martinfowler.com
Activity-oriented teams organize around the nature of work they do: eg analysis, development, testing.| martinfowler.com
A pattern from Domain-Driven Design describing a cluster of domain objects that can be treated as a single unit for persistant storage and transactions.| martinfowler.com
Flaky tests can ruin your test suite, so you must quarantine them now. But then go on to solve their non-deterministic behavior| martinfowler.com
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.| martinfowler.com
The microservice architectural style develops an application as a suite of independently deployable services.| martinfowler.com
The XUnit family of testing tools have their origin in Kent Beck's seedwork built in Smalltalk. JUnit's first version was written by Kent and Erich Gamma on a flight to OOPSLA 97.| martinfowler.com
Integration tests see if independently developed units of software work correctly when connected. Traditionally broad they are now better narrowly scoped.| martinfowler.com
A screen and components with all application specific behavior extracted into a controller so that the widgets have their state controlled entirely by controller.| martinfowler.com
Devops is a movement to break down traditional silos between developers, operations and other delivery groups. Although many tools are useful, it is primarily a cultural change.| martinfowler.com
Outcome-oriented teams combine people with different skills focused on a single business outcome.| martinfowler.com
This book started after Dave Rice and I gave some talks on| martinfowler.com
Describing established patterns for organizing design tokens and practical approaches for automation| martinfowler.com
There are certain things you need to get sorted out before you can put your first microservices system into production: monitoring, provisioning, and a devops culture.| martinfowler.com
Self-testing code has automated tests that are easily run to verify that it does what the programmers intended| martinfowler.com
Serverless architectures replace a managed server with a collection of third party services and FaaS| martinfowler.com
Represent the state and behavior of the presentation independently of the GUI controls used in the interface| martinfowler.com
Remote-first teams should have face-to-face gatherings every few months.| martinfowler.com
Notes from my Thoughtworks colleagues on AI-assisted software delivery| martinfowler.com
A fluent interface is a way of building an API so that its use has the feel of an internal domain-specific language.| martinfowler.com
Consumers should drive the definition of service contracts, while limiting to their individual needs. Suppliers should then validate against the union of their consumers' contracts.| martinfowler.com
Platform teams ensure success by thoughtfully selecting which collaboration patterns to use with their customer teams, based on the maturity of each team and the phase of their platform adoption.| martinfowler.com
A page object wraps an HTML page, or fragment, with an application-specific API, allowing you to manipulate page elements for testing without digging around in the HTML.| martinfowler.com
It's inevitable that as terms become more popular, they tend be misused. We need to actively work to prevent such diffusion robbing us of useful terminology| martinfowler.com
Continuous Delivery means you build software in such a way that it can be released to production at any time| martinfowler.com
How to split up your large, complex, frontend codebases into simple, composable, independently deliverable apps.| martinfowler.com
"If it hurts - do it more often". Good advice if the amount of pain raises exponentially with the time between actions, such as for integrating software.| martinfowler.com
Mainline, Feature Branching, Continuous Integration, Release Branch and a clutch of other handy patterns.| martinfowler.com
For the last few decades, relational databases have been the automatic choice for enterprise applications. But now we have to choose a mix of databases with different strengths.| martinfowler.com
The microservice architectural style is useful for handling complex systems, but brings its own complexity so should not be used for simpler environments.| martinfowler.com
In the late 90's I paid a visit to Kent Beck, then working in| martinfowler.com
Test Impact Analysis speeds testing by predicting which tests need to be run for a change in the source code.| martinfowler.com
Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects.| martinfowler.com
Explaining the Dependency Injection pattern, by contrasting it with Service Locator. The choice between them is less important than the principle of separating configuration from use.| martinfowler.com
To be successful at digital transformation you need to optimize the key feedback loops in your software engineering organization| martinfowler.com
Test Double is generic term for fakes, mocks, stubs, dummies and spies.| martinfowler.com
If you go to junit.org, you'll see a quote from me: “never| martinfowler.com
It is impossible to measure the effectiveness of tools and techniques in software development because we have no way of measuring our output, and thus our productivity.| martinfowler.com
Projects are a popular way of organizing software efforts, but long-running product teams are often superior| martinfowler.com
Refactoring is a controlled technique for improving the design of an| martinfowler.com
There are only two hard things in Computer Science: cache invalidation and naming things -- Phil Karlton (bonus variations on the page)| martinfowler.com
Captures the memory of something interesting which affects the domain| martinfowler.com
A guide to the common steps we've observed in breaking a monolithic application up into microservices| martinfowler.com
People often ask low long a function should be, but the answer depends more on the distance between its intention and implementation.| martinfowler.com