Architecture Nugget - January 9, 2025

Debugging Cloud-Native Applications Locally: How mirrord Bridges the Gap Between Local Development and Cluster Environments

Hey folks!

Welcome to this week’s Architecture Nugget. I’m Liam, and every week I share some of my best reads about software architecture right here.

Before jumping into the nuggets, let me tell you why I publish both Architecture Nugget and Golang Nugget. After a decade in the industry, I’ve learned something valuable—breadth is just as important as depth.

Early in my career, I was on a roll. I was learning fast, became a team lead sooner than expected, and hopped between jobs a few times to soak up new technologies, team dynamics, and—let’s be honest—a bit more cash. But then, like a Wi-Fi signal in a basement, my growth started to plateau.

The problem? I was just doubling down on what I was already good at. As the saying goes, to a hammer, everything looks like a nail. Sure, I could smash certain types of problems with style, but my toolkit was limited. My awareness of new tools, concepts, and approaches—even those unrelated to my day-to-day work—was embarrassingly narrow.

Think of knowledge as a pyramid. At the top, you have your “known-knowns”—things you know you know. Below that are your “known-unknowns”—things you’re aware you don’t know. And at the bottom, in a vast and slightly terrifying space, are your “unknown-unknowns”—the things you don’t even know you don’t know.

Real growth happens when you expand your “known-knowns” by diving deeper and your “known-unknowns” by casually flirting with new ideas—even if it’s just on a surface level.

So how did this help me? By being aware of more tools, concepts, and ideas—even in a “fun fact I read once” kind of way—I could start connecting dots. Most foundational principles don’t change, and when a tricky challenge appeared, I wasn’t just offering guesses; I was offering informed guesses. Plus, having a broader mental library made me a little more creative—I’d seen a few extra ways to crack the same nut.

Why am I sharing this? Because many of the nuggets I share might not immediately fit into your current puzzle. But someday, when you hit a problem that feels like chewing glass, one of these random tidbits might just save the day.

You can't connect the dots looking forward; you can only connect them looking backwards.

Steve Jobs

Happy reading!

🚀 Exciting Opportunities at Quantcast!

Quantcast is a global leader in AI-driven advertising technology. They're looking for a Senior Software Engineer to work on large-scale, distributed systems that handle millions of real-time requests per second. If you're passionate about system reliability, cloud infrastructure, and cutting-edge tech, this is your chance to make an impact. Check out the full job description and apply today!

🇬🇧 🛂 The position is based in London, and Quantcast offers visa sponsorship!

  1. Single Point of Failure (SPOF) in System Design  A single point of failure (SPOF) is a component in your system that, if it fails, causes the entire system to stop working. Depending on the design, any part could become a SPOF. “Single Point of Failure (SPOF) in System Design” is a short article that discusses the risks SPOFs pose and the steps engineers should take to mitigate them.

  2. Snapshot Isolation vs Serializability — There are two levels of transaction isolation in database, snapshot isolation and serialisability. Snapshot isolation allows a transaction to go through if its written data doesn’t intersect with the written data of any committed transaction that started before it.
    Under serialisability, a transaction can only commit if the set of data it reads does not intersect with the set of data written by any committed transaction that started before it.

  3. Software Architecture and the Art of Experimentation — It’s not rare to be wrong about an architectural design, and that’s why it’s important to have experiments to test the viability of architectural decisions. This article talks about how Minimum Viable Architectures (MVAs) are experiments that test the technical viability of the MVP.

Youtube Time

Many tools exist for debugging cloud-native applications, and they mostly take one of two approaches.

  • continuously sync local files to the remote container

  • connect the local machine to the cluster.

mirrord takes a novel approach: when developers run their code with mirrord, it injects a dynamic library into the process, hooks libc calls, and relays some operations to be executed on the cluster instead of locally. That way, developers can run their code locally and debug it with a debugger. With all of the code's input and output forwarded to and from the cluster, the local process “thinks” it’s running in the cluster and can be tested and debugged in cloud conditions. This talk will discuss the rationale behind using low-level techniques in cloud-native tooling, explain some of the low level Rust code that makes it possible, and show mirrord in action with a live demo.

💎  Golang Nugget is my other newsletter where I share my favourite weekly reads and the most interesting insights I’ve come across about Golang. Give it a try—I think you’ll love it!

Golang Nugget5-min Go newsletter packed with bite-sized nuggets—trusted by engineers at Google and Amazon.

Learn AI in 5 minutes a day

What’s the secret to staying ahead of the curve in the world of AI? Information. Luckily, you can join 800,000+ early adopters reading The Rundown AI — the free newsletter that makes you smarter on AI with just a 5-minute read per day.

Reply

or to participate.