Martin Fowler

Patterns of Legacy Displacement

Martin Fowler

My colleagues do a lot of work that involves replacing legacy software systems. Three of my colleagues - Ian Cartwright, Rob Horn, and James Lewis - have started to capture their experience and advice for this is a collection of patterns.

System 162

Mind the platform execution gap

Martin Fowler

Recently there's been a lot of interest, indeed hype, around building developer productivity platforms. Done well, they make it easier for developers to build systems aligned with the technology strategy and allow them to build useful features more quickly.

Insiders

Sign Up for our Newsletter

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Lamport Clock

Martin Fowler

Next distributed system pattern from Unmesh is the Lamport Clock. Distributed systems can't assume that time is consistent between servers, and sometimes time goes backwards. Yet it's important to have some way to order events. more…. skip-home-page

System 206

Bitemporal History

Martin Fowler

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.

254
254

How to Empower Your Users So You Can Create a Great Product

Speaker: Johanna Rothman, Management Consultant, Rothman Consulting Group

Join Johanna Rothman, Author and Consultant, for her session that will discuss why instead of designing for the users, CTOs and their teams should collaborate with empowered users to create a great product together.

Maximizing Developer Effectiveness

Martin Fowler

My colleague Tim Cochran has helped many software engineering organizations transform to respond faster to changing market needs.

Extract Product Lines

Martin Fowler

To do effective legacy displacement, we need to figure out how to break down the problem into manageable pieces. Extract Product Lines does this by identifying product lines and using them as the basis for migration. more…. skip-home-page

How To 136

Distributed Systems Pattern: State Watch

Martin Fowler

Clients are interested in changes to the specific values on the server. It's difficult for clients to structure their logic if they need to poll the server continuously to look for changes. If clients open too many connections to the server for watching changes, it can overwhelm the server. more….

System 266

Data Mesh Principles and Logical Architecture

Martin Fowler

Last year, my colleague Zhamak Dehghani introduced the notion of the Data Mesh , shifting from the notion of a centralized data lake to a distributed vision of data.

Follower Reads

Martin Fowler

When you are using Leaders and Followers, you can use Follower Reads to achieve better throughput and lower latency. However there is always a replication lag between the leader and the followers, so you may need to take action to preserve consistency. more…. skip-home-page

164
164

Address the Challenges of Siloed Monitoring Tools

Companies frequently experience monitoring tool sprawl. Find out why monitoring tool sprawl occurs, why it’s a problem for businesses, and the positive business impacts of monitoring tool consolidation.

Stepping Back from Speaking

Martin Fowler

A personal note on why I wish to give up doing talks.

160
160

Version Vector

Martin Fowler

A Lamport Clock is effective to order events on a single server, but with multiple servers we need a vector of version numbers to detect concurrent updates. more…. skip-home-page

159
159

Gossip Dissemination

Martin Fowler

Unmesh Joshi is completing another batch of his series on Patterns of Distributed Systems. First of these is Gossip Dissemination , which uses a random selection of nodes to pass on information to ensure it reaches all the nodes in the cluster without flooding the network.

A brief review of the Kinesys Advantage2 ergonomic keyboard

Martin Fowler

About three-and-a-half years ago I bought a Kinesys Advantage2 ergonomic keyboard. This tool isn't cheap, and it's rather unusual in its layout. But I use a keyboard all day, so I wanted one that maximized my comfort and enjoyment at my work. I've found it a worthwhile investment.

Tools 284

A Training Company’s Guide to Selecting an eLearning Platform

Training companies have an opportunity to embrace the change and create meaningful change in their organizations by moving online. Discover the advantages of a digital-first approach, using an eLearning platform.

Don't Compare Averages

Martin Fowler

273
273

Patterns of Distributed Systems

Martin Fowler

Over the last few months, my colleague Unmesh Joshi has been running workshops to teach developers about distributed systems design. In this work he's been delving into many open-source distributed systems and identifying patterns. As he writes them up, he's publishing the patterns on my site.

System 286

Patterns of Distributed Systems

Martin Fowler

Over the last few months, my colleague Unmesh Joshi has been running workshops to teach developers about distributed systems design. In this work he's been delving into many open-source distributed systems and identifying patterns. As he writes them up, he's publishing the patterns on my site.

System 286

Maximizing Developer Effectiveness: Organizational Effectiveness

Martin Fowler

Tim finishes his article by looking at how highly effective organizations design their engineering organization to optimize for effectiveness and feedback loops.

Does Your Company Need Help Solving These 4 Common eLearning Challenges?

If you want to know how to get ahead of the game and avoid the common mishaps in selling your eLearning courses, you’ve come to the right place! Lambda Solutions has identified the most common and costly challenges faced by eLearning providers today.

A short review of Coup 53

Martin Fowler

Coup 53 is a recent documentary of the American-led coup against Mohammad Mosaddegh, the leader of Iran in 1953. It's a worthwhile telling of an oft-overlooked piece of history, even if the meta-narrative that drives the documentary isn't properly examined.

275
275

Distributed Systems Pattern: Segmented Log

Martin Fowler

A single log file can grow and become a performance bottleneck while its read at the startup. Older logs are cleaned up periodically and doing cleanup operations on a single huge file is difficult to implement. A Segmented Log splits the logfile into smaller files.

System 275

A Guide to Threat Modelling for Developers

Martin Fowler

Maximizing Developer Effectiveness: Feedback Loops

Martin Fowler

Tim continues his comparison of high and low effectiveness organizations by comparing their key feedback loops. To improve these, organizations need to understand the importance of micro feedback loops, which are often neglected because they are so small. more…. skip-home-page

Cloud-Scale Monitoring With AWS and Datadog

In this eBook, find out the benefits and complexities of migrating workloads to AWS, and services that AWS offers for containers and serverless computing.

Distributed Systems Pattern: Lease

Martin Fowler

Cluster nodes need exclusive access to certain resources. But nodes can crash; they can be temporarily disconnected or experiencing a process pause. Under these error scenarios, they should not keep the access to a resource indefinitely. more…. skip-home-page

System 220

Branching Pattern: Mainline

Martin Fowler

The second branching pattern in my article is Mainline: a single, shared, branch that acts as the current state of the product. more…. skip-home-page

286
286

Patterns for Managing Source Code Branches

Martin Fowler

In my conversations with software developers, a regular topic of controversy is how manage source code branching. Tools like git make it easy to create branches, but managing them to improve coordination and minimize the costs of integration unearths plenty of difficulties.

Refactoring: This class is too large

Martin Fowler

Most programmers have personal projects that do important things for them personally, but never have enough time and energy to keep them in good condition. Clare is no exception, and needed to spend time getting such an unruly codebase back into line.

Energy 285

Deliver Effective Online Education and Events Your Members Will Love

This guide identifies the biggest challenges for associations moving their training online and provides practical solutions so that you can hit the ground running. Download now to keep your members engaged and growing even in times of COVID-19.

Branching Pattern: Mainline Integration

Martin Fowler

Developers integrate their work by pulling from mainline, merging, and - if healthy - pushing back into mainline. more…. skip-home-page

Hybrid Clock

Martin Fowler

While a Lamport Clock is often necessary to order events in a distributed system, clients often need to know the actual times too. The Hybrid Clock , Unmesh's next pattern, combines these two demands.

System 146

How to do effective video calls

Martin Fowler

During 2011-2012 there was a small but significant revolution in how we worked at ThoughtWorks. When we needed to communicate while separated we used to do telephone meetings, but within a year the telephone disappeared and we started using video calls instead.

Video 285

Distributed Systems Pattern: Single Socket Channel

Martin Fowler

When we are using Leader and Followers, we need to ensure that messages between the leader and each follower are kept in order, with a retry mechanism for any lost messages.

System 252

What E-Commerce Performance Metrics Are CTOs Monitoring?

In this eBook, Danny Miles, CTO of Dollar Shave Club, reveals an efficient framework for thinking about and prioritizing the performance metrics that matter most to him, providing a blueprint for fellow e-commerce CTOs to follow as they evaluate their own business.

Distributed Systems Pattern: Idempotent Receiver

Martin Fowler

Clients send requests to servers but might not get a response. It's impossible for clients to know if the response was lost or the server crashed before processing the request. To make sure that the request is processed, the client has to re-send the request.

System 206

Distributed Systems Pattern: Write-Ahead Log

Martin Fowler

In the latest part of his collection of Patterns of Distributed Systems, Unmesh faces the problem of a server failing in the middle of a complex update.

System 245

On Pair Programming

Martin Fowler

At ThoughtWorks, we regularly use Pair Programming. We find it's a rarely used practice, in part due to lack of knowledge in how to do it well and because its benefits are not immediately obvious.

Don't put data science notebooks into production

Martin Fowler

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. My colleague David Johnston points out that while data science ideas do need to move out of notebooks and into production, trying to deploy that notebooks as a code artifact breaks a multitude of good software practices. Predictably, that results in a number of observed pain points.

Data 219

The Pro’s Guide To Getting The Best ROI From Your New LMS

You need a Learning Management System when your courses and training programs need to be accessible online. Quickly build the perfect business case and easily determine which LMS will provide the best return on investment you need with this how-to eBook!