RSS Amplifier

Blog

Benjamin Cane

Practical notes on building fast, reliable software systems that scale. Posts are a mirror of my LinkedIn & Blog content.

madflojo.substack.comSource feed ↗10 posts

Live Last read · last published · next check

Written by

Latest posts

AI makes code cheap to create, not cheap to own

AI has made code cheap to create, but more code means more overhead. Photo by Christopher Gower on Unsplash Before coding agents, creating more code cost time and effort because engineers had to write it. That naturally encouraged us to reuse code as much as possible: libraries, frameworks, keeping implementations concise, and thinking twice before rebuilding functionality that already existed.…

“We can’t run locally” is usually a design smell

Photo by Gabin Vallet on Unsplash . “We can’t run locally” is usually a design smell. I’m a believer that, as an engineer, you should be able to run your software locally. But I hear it often: “We can’t run locally because of some reason.” Sometimes it’s valid. There are architectures and platforms out there that prevent running locally. But more often than not, when it comes to backend…

To make a service more stable, eliminate dependencies

Photo by Shubham Dhage on Unsplash . To make a service more stable, eliminate dependencies. One of the simplest reliability rules I’ve learned is this: Every dependency is another way for your service to fail. Why Dependencies Matter Every service has dependencies. Databases Caches Configuration services Secrets managers Logging pipelines Tracing backends All of these dependencies can fail, and…

Caching isn’t hard. Some data is hard to cache

Photo by Matthieu Beaumont on Unsplash . Caching isn’t hard. Some data is hard to cache. You’ve all heard the advice: “Avoid caching because caching is difficult to get right.” I agree with part of that statement. Caching can absolutely be difficult. But I think the reality is more nuanced. The difficulty level of caching depends heavily on the type of data you are caching. Not All Data Is Equal…

The closer to the edge, the more stable a platform must be

Photo by Albert Stoynov on Unsplash . The closer to the edge, the more stable a platform must be. The closer a component is to the customer, the greater its responsibility for keeping the entire platform available, even when everything behind it is having a bad day. Not All Services Carry the Same Reliability Burden Let’s consider a typical platform. Customer -> Load Balancer -> API Gateway ->…

Sometimes the most resilient thing a system can do isn’t retry

Photo by Clay Banks on Unsplash . Sometimes the most resilient thing a system can do isn’t retry. Most resiliency discussions focus on retries, timeouts, and circuit breakers. But some of the most important resiliency patterns happen after the failure. That’s where compensating transactions come in. Resiliency Is About Recovery A common mistake is thinking resiliency means preventing failures.…

Should retries and timeouts live in your application or your service mesh?

Photo by Jordan Harrison on Unsplash . Should retries and timeouts live in your application or your service mesh? This debate comes up constantly. Should resiliency live in the platform components, or should the application own it? Like most things in distributed systems, the answer is: It depends. Infrastructure Understands Traffic Service meshes, API gateways, and load balancers are great at…

Need to migrate from one database to another without downtime?

Photo by freestocks on Unsplash . Need to migrate from one database to another without downtime? Dual writes are one approach that deserves more attention. Most database migrations fall into one of a few buckets: Export and import Replication between two databases Services specifically built to synchronize data All of those approaches can work well. But sometimes you need both databases active…

Glue Services: Part Two — Data Synchronization

Photo by Modestas Urbonas on Unsplash I recently talked about using glue services (Anti-Corruption Layers) to isolate modern platforms from legacy integrations. Today I want to talk about another type of glue service: data synchronization services. 🗃️ The Real Modernization Problem One of the hardest parts of replacing a legacy platform is usually not the application itself. It’s the data. In a…

When modernizing legacy systems, don’t be afraid to build glue services

Photo by Daniel Chekalov on Unsplash One of the biggest mistakes I see during modernization efforts is letting legacy integrations dictate the design of the new platform. That usually leads to putting fresh paint on the same old house. Rebuilding the same architecture with a newer tech stack. 😴 The Dream vs. Reality The dream project is building a brand-new platform with no existing users,…