SARS-CoV-2 and the Future of Work

Since starting this blog over six years ago, my cadence has been to publish one article a month.[1] I enjoy long-form writing and it would be near impossible for me to publish essays more frequently. As I write this essay, the world is gripped by the SARS-CoV-2 pandemic. All…

Reflecting on Our Core Values

In an earlier article, I shared an exercise that I did with my team, an exercise to identify and share our core values. The exercise was inspired by Brené Brown's book Dare to Lead. The goal was to improve our self-awareness and, by sharing our core values with our colleagues,…

Understanding Our Core Values: An Exercise for Individuals and Teams

Last year, I read Brené Brown's book Dare to Lead. I am very fond of her book Daring Greatly. Dare to Lead covers much of the same subject matter—relationships, vulnerability, shame, being present—but I found the framing of these themes with a focus on leadership particularly valuable. The…

Shared-Nothing Architectures for Server Replication and Synchronization

I spent over a decade working on a software platform for time-series data and events that is widely used in industry. It supports a diverse set of applications—like supply-chain management, condition-based maintenance, regulatory compliance, and process monitoring, optimization, and control—in industries including manufacturing, power generation, utilities, oil and…

On Embracing Error in Distributed Software Systems

This article is the companion to my article On Eliminating Error in Distributed Software Systems and expands on my talk What Lies Between: The Challenges of Operationalising Microservices from QCon London 2019. In an earlier article, I explored techniques for eliminating error in distributed software systems, including testing, the type…

Rethinking Streaming Workloads with Akka Streams: Part III

This series is focused on recomposing workloads that are not traditionally expressed as streaming workloads. Employing a streaming approach can make a problem simpler, more elegant, and more natural. The first article explored streaming tools for flow control, bounded resource-constraints, and error handling, and demonstrated how these tools can be…

On Eliminating Error in Distributed Software Systems

This article is the companion to my article On Embracing Error in Distributed Software Systems and expands on my talk What Lies Between: The Challenges of Operationalising Microservices from QCon London 2019. In designing, developing, operating, and evolving distributed software systems, failure must be considered intrinsic to the system. In…

Engineering as Sketch Comedy

I do not watch a lot of comedy, but there have been a few moments that have struck my fancy and remained with me. I want to recall three sketches and relate them to engineering. Anyone who knows me will have heard me relate one or more of these sketches…

Rethinking Streaming Workloads with Akka Streams: Part II

In the first installment of this series, I demonstrated how materializing an Akka Stream is relatively inexpensive and I explored how to express a number of workloads—workloads that you may not initially think of as streaming workloads—using the Akka Streams API to provide concurrency control, throttling, circuit breaking,…

Observations on Observability

This article expands on one section of my talk What Lies Between: The Challenges of Operationalising Microservices from QCon London 2019. Over the past few years, observability has become a prominent topic in distributed computing. Observability means different things to different people and the use of the term is still…

Rethinking Streaming Workloads with Akka Streams: Part I

The Akka Streams API is one of my favourite tools for building reactive, distributed applications. If you are not familiar with it, I published an article on the motivations for using the Akka Streams API, as well as an article on how its powerful semantics address common patterns when streaming…