Martin Fowler

Don't Compare Averages

Martin Fowler

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.

Groups 254

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 277

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

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 285

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 285

Are Your Embedded Analytics DevOps-Friendly?

Does your analytics solution work with your current tech stack and DevOps practices? If not, any update to the analytics could increase deployment complexity and become difficult to maintain. Learn the 5 elements of a DevOps-friendly embedded analytics solution.

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.

254
254

Distributed Systems Pattern: Quorum

Martin Fowler

Distributed systems may get partitioned, when the nodes in the cluster no longer talk to all the others. Unmesh explains that, because of this, we need a quorum of nodes within a partition to accept a change.

System 203

Distributed Systems Pattern: Request Pipeline

Martin Fowler

Communicating between servers within a cluster using Single Socket Channel can cause performance issues if requests need to wait for responses for previous requests to be returned.

System 196

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 194

A Guide to Threat Modelling for Developers

Martin Fowler

Threat modeling is a well-respected practice in designing secure systems. But it's often done with complicated, exhaustive upfront analysis. Jim Gumbley has spent the last few years helping ThoughtWorks teams and clients adopt a different approach, which fits in with the “little and often” agile philosophy. I'm happy that he's now written an article to share his way of working, and this first installment explains applying this incremental thinking to threat modeling.

5 Things a Data Scientist Can Do to Stay Current

DataRobot together with Snowflake – a leading cloud data platform provider — is helping data scientists stay current with the latest technology and data science best practices so that they can excel in an increasingly AI-driven workplace. Five Things a Data Scientist Can Do to Stay Current offers data scientists guidance for thriving in AI-driven enterprises.

Distributed Systems Pattern: Leader and Followers

Martin Fowler

In a distributed system, it's often best to not make all the nodes equal. Unmesh shows how a leader can simplify coordination across a cluster, and how choosing that leader is often tricky.

System 184

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 181

Distributed Systems Pattern: Singular Update Queue

Martin Fowler

When the state needs to be updated by multiple concurrent clients, we need it to be safely updated with one at a time changes. Generally locks are used to protect against concurrent modifications.

System 176

Distributed Systems Pattern: High-Water Mark

Martin Fowler

Unmesh adds High-Water Mark to his collection of patterns. The high-water mark is an index into the log file that records the last log entry that is known to have successfully replicated to a Quorum of followers. The leader also passes on the high-water mark to its followers during its replication. All servers in the cluster should only transmit data to clients that reflects updates that are below the high-water mark. more…. skip-home-page

System 182

Testing at Every Stage of Development

Up to 80% of new products fail. The reality is harsh and the reasons why are endless. Perhaps the new product couldn’t oust a customer favorite. Maybe it looked great but was too hard to use. Or, despite being a superior product, the go-to-market strategy failed. There’s always a risk when building a new product, but you can hedge your bets by understanding exactly what your customers' expectations truly are at every step of the development process.

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

219
219

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. I find it useful to think of the trade-offs around branching as a series of patterns, and have spent the last couple of months writing these patterns into a coherent shape.

Distributed Systems Pattern: Low-Water Mark

Martin Fowler

The write ahead log maintains every update to persistent store. It can grow indefinitely over time. Segmented Log allows dealing with smaller files at a time, but total disk storage can grow indefinitely if not checked.

System 173

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. Here she shares the first part of her refactoring: breaking down a class that had become too big.

Energy 219

How Embedding AI-Powered Analytics Can Give You a Competitive Advantage

Embedding dashboards and reports aren’t enough. Futureproof your application by offering instant, actionable insights that will give you and your customers a competitive advantage.

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

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. Now Covid-19 has struck, a lot more people are getting acquainted with remote working and the video calls that come with them. So I thought I'd share some of things I, and my colleagues, have learned about doing them.

Video 219

Thoughts writing a Google App script

Martin Fowler

Recently a friend of mine asked for a simple program that would correlate some data drawn from a couple of online services. I decided the best way to do this for him would be to use a google spreadsheet as the host, putting the code into the spreadsheet's script area. I'm no expert in Google App Script, but the exercise led to a few observations, which I feel compelled to share.

The Elephant in the Architecture

Martin Fowler

Last week I gave one of the keynotes at O'Reilly's Software Architecture conference. When I was invited to do this last year, I asked my colleagues at a radar meeting dinner for suggestions on what to talk about. They commented about how they were often asked to do architectural assessments for clients, and almost always discovered that the architects neglected to properly understand the business value of the systems they were looking after.

Building Like Amazon

Speaker: Leo Zhadanovsky, Principal Solutions Architect, Amazon Web Services

Amazon's journey to its current modern architecture and processes provides insights for all software development leaders. To get there, Amazon focused on decomposing for agility, making critical cultural and operational changes, and creating tools for software delivery. The result was enabling developers to rapidly release and iterate software while maintaining industry-leading standards on security, reliability, and performance. Whether you're developing for a small startup or a large corporation, learning the tools for CI/CD will make your good DevOps team great. We are excited to be joined by Leo Zhadanovsky, a Principal Solutions Architect at Amazon Web Services.

Branching Patterns: Final Thoughts and Recommendations

Martin Fowler

Final post in “Branching Patterns” As I said at the beginning of this long piece: branching is easy, merging is harder. Branching is a powerful technique, but it makes me think of goto statements, global variables, and locks for concurrency. Powerful, easy to use, but easier to over-use, too often they become traps for the unwary and inexperienced.

System 193

Branching Patterns: Hotfix Branch

Martin Fowler

Hotfix Branch: A branch to capture work to fix an urgent production defect. more…. skip-home-page

192
192

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. Birgitta Böckeler and Nina Siessegger put together an excellent conference talk where they pulled together the techniques we've learned, the benefits we've found, and the challenges we've faced.

Branching Patterns: Continuous Integration

Martin Fowler

Continuous Integration: Developers do mainline integration as soon as they have a healthy commit they can share, usually less than a day's work. more…. skip-home-page

eLearning demand is at an all-time high. Pick the right LMS!

The need for online learning is greater than ever having the right LMS is absolutely crucial. Quickly, easily, and cost-effectively decide which Learning Management System is right for you with this 12-step guide from LMS implementation experts.

Branching Patterns: Comparing Feature Branching and Continuous Integration

Martin Fowler

Feature Branching appears to be the most common branching strategy in the industry at the moment, but there is a vocal group of practitioners who argue that Continuous Integration is usually a superior approach. more…. skip-home-page

Branching Patterns: Integration Frequency

Martin Fowler

Integration Frequency has a huge impact upon a team's workflow. Higher frequency integration reduces the problems of complex merges, makes refactoring easier, and generally improves the communication and cohesiveness of a team. more…. skip-home-page

185
185

Coping with Covid-19

Martin Fowler

The Covid-19 outbreak is getting more serious. With offices in China, we've already been affected and have taken various measures across our global business. Here's what we've learned so far about what we need to do to handle this crisis.

199
199

Branching Patterns: Reviewed Commits

Martin Fowler

Reviewed Commits: every commit to mainline is peer-reviewed before the commit is accepted. more…. skip-home-page

182
182

Why Distributed Tracing is Essential for Performance and Reliability

Speaker: Daniel "spoons" Spoonhower, CTO and Co-Founder at Lightstep

Many engineering organizations have now adopted microservices or other loosely coupled architectures, often alongside DevOps practices. Together these have enabled individual service teams to become more independent and, as a result, have boosted developer velocity. However, this increased velocity often comes at the cost of overall application performance or reliability. Worse, teams often don’t understand what’s affecting performance or reliability – or even who to ask to learn more. Distributed tracing was developed at organizations like Google and Twitter to address these problems and has also come a long way in the decade since then. By the end of this presentation, you’ll understand why distributed tracing is necessary and how it can bring performance and reliability back under control.