Integrating Akka Streams and Akka Actors: Part II

In part one of this series, I described the challenges of integrating the Akka Streams API with Akka Actors. I demonstrated the basic patterns for interfacing streams and actors, removing the discontinuity between the two. In this article, I will begin to explore more sophisticated ways to integrate actors and…

Reflections on Being a Team Lead

A year ago, I accepted a team lead position. As I wrote at the time, I have had a number of opportunities to be a team lead, but I have always declined them, choosing a more technical role, to become a better engineer. In this essay, I will reflect on…

Integrating Akka Streams and Akka Actors: Part I

Most people are attracted to Akka with the promise of the actor model providing a better abstraction for building scalable and resilient distributed systems. Since Akka attempts to solve such a challenging set of problems—from concurrency, to distributed computation, to fault tolerance—it takes some time to…

Patterns for Streaming Measurement Data with Akka Streams

I have spent my entire career building infrastructures for streaming data to support the monitoring and control of industrial applications. I have experience building distributed systems for data acquisition, durable message-queuing, publish-subscribe messaging, and the efficient storage and query of time-series data. I have developed systems on Unix, Linux, Windows,…

Akka Streams: A Motivating Example

I have been using the Akka Streams API for about a year now and I have been extremely impressed with it. It is a framework for efficiently describing and executing streaming processes, while at the same time, maintaining bounded resource-usage. In this article, I will provide a motivating example for…

Using Quality Views to Communicate Software Quality and Evolution

I have worked on infrastructural software my entire career—mainly streaming-data systems for industrial applications. Infrastructural software is most often foundational, supporting other services and applications, rather than being the product itself. This can make it difficult to communicate the current state of the software, as well as its…

Calling Blocking Code: There Is No Free Lunch

Making the transition from procedural, synchronous programming to fully-asynchronous programming, can be challenging. Or, it can be quite easy. If all of the languages, frameworks, and services that you are using naturally support asynchronous programming, it can be straightforward to adopt, making it easy to build scalable applications. The biggest…

Performance Considerations for Akka Debug Logging

The Akka actor-model framework provides convenient libraries for application logging. As one would expect, there is support for configurable logging levels—error, warning, informational, and debug— and log messages are written asynchronously for good performance. There is a subtle performance consideration, however, that I've encountered a few times…

The Cost of a Meeting: Is the Daily Stand-Up Worth It?

Software developers stereotypically hate meetings. Personally, I do not dislike meetings. In fact, I quite enjoy interacting in meetings. What I dislike is when meetings disrupt my day, slicing it into small increments, such that I have no time for extended, focused work. I have tried to voice this concern…

Making Your Resume Stand Out From the Crowd

The team that I work on has been trying to hire for a while now, so I've been going through a lot of resumes. I've seen hundreds of resumes in the past few months and I can't think of a single one that stood out. Out of those hundreds of…