Martin Fowler

Maximizing Developer Effectiveness

Martin Fowler

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

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 229
Insiders

Sign Up for our Newsletter

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

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.

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

11 Required Monitoring Platform Capabilities for Enterprise DevOps Teams

In this eBook, Isaac Johnson, a Principal Software Engineer and DevOps Architect with experience at multiple Fortune 500 companies, reveals the key things he looks for when evaluating monitoring platforms for enterprise DevOps teams.

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.

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 141

Don't Compare Averages

Martin Fowler

270
270

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

Building Evolvable Architectures

Speaker: Dr. Rebecca Parsons, CTO of ThoughtWorks

The software development ecosystem exists in a state of dynamic equilibrium, where any new tool, framework, or technique leads to disruption and the establishment of a new equilibrium. Predictability is impossible when the foundation architects plan against is constantly changing in unexpected ways. It’s no surprise many CIOs and CTOs are struggling to adapt, in part because their architecture isn’t equipped to evolve. This webinar will discuss what’s at stake if companies continue to use long term architecture plans.

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 279

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

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.

256
256

Distributed Systems Pattern: Consistent Core

Martin Fowler

Unmesh has a few more of his Patterns of Distributed Systems ready to share with the world. In this one he looks at the problem of a large cluster, one that is too large to effectively maintain strong consistency, yet needs to maintain some data in a strongly consistent way.

System 169

How to Measure DevSecOps Progress and Ensure Success

Speaker: Shannon Lietz, Director of DevSecOps Team, Intuit

You've finally done it: You've won over C-Suite and your DevSecOps team is up and running. But how do you monitor your new program? Join Shannon Lietz, Leader and Director of DevsecOps at Intuit, and learn to lead your DevSecOps team to the top.

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 256

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 243

Bliki: ComputationalNotebook

Martin Fowler

A computational notebook is an environment for writing a prose document that allows the author to embed code which can be easily executed with the results also incorporated into the document. It's a platform particularly well-suited for data science work.

Report 196

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 238

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!

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 229

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 226

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 231

My favorite musical discoveries of 2020

Martin Fowler

Like most people, I'm looking forward to seeing 2020 in the rear-view mirror, but even this ugly year has brought some good things.

154
154

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.

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 206

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 204

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

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 195

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.

A Guide to Threat Modelling for Developers

Martin Fowler

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

220
220

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.

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

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.