Some decisions require comparing multiple options where it’s not immediately apparent which is best. One common way of doing that is to list the pros and cons of each option. For example, option A lists low latency as a pro, while option B lists high throughput as a pro. But do you know what throughput option A provides? Not being explicit makes it easy to make assumptions and ignore crucial comparisons.| Roberto's blog
I regularly use different devices with different OSs, such as a MacBook, a Windows desktop with WSL, a couple of Raspberry PIs, and so on. I have a bunch of tools I like to have at my fingertips when I log into a machine, like fd and Neovim. Setting up and maintaining the same configuration across all of my machines using different package managers was painful enough that I just reverted using default tools with no customization in the past.| Roberto's blog
I have been using Gatsby for my blog and I have never been fond of it’s complexity considering that all I need is Markdown rendering. Trying to update Gatsby and its dependencies to the latest version was painful enough to motivate me to jump ship. After looking at what’s out there, I settled for Hugo. As I will inevitably forget all about it in a month’s time, I am writing this post to remind myself of how the whole thing works.| Roberto's blog
Coordination is expensive as it reduces the availability and performance of distributed applications (PACELC theorem). I have extended…| Roberto Vitillo's Blog
I am excited to announce that the first edition of my book about distributed systems is finally complete! First things first, I have…| Roberto Vitillo's Blog
Sometimes a single process in a system needs to have special powers, like being the only one that can access a shared resource or assign…| Roberto Vitillo's Blog
At scale, any failure that can happen will eventually happen. Hardware failures, software crashes, memory leaks - you name it. The more…| Roberto Vitillo's Blog
I have released a new chapter of Understanding Distributed Systems ! It explores the different patterns at your disposal when designing…| Roberto Vitillo's Blog
I have released a new chapter of Understanding Distributed Systems : Resiliency Patterns. The chapter is all about failures and their…| Roberto Vitillo's Blog
The system design interview is a great way to assess the seniority of a candidate in an interview. You can find a lot on the Internet on how…| Roberto Vitillo's Blog
Imagine assigning some value to a variable, reading it back immediately after, and finding out that somehow the write had no effect at all…| Roberto Vitillo's Blog
In the second chapter of Understanding Distributed Systems , I explore the core building blocks at the heart of many distributed systems…| Roberto Vitillo's Blog
I have released the first chapter of Understanding Distributed Systems ! "Wait, what? Weren't you working on a video class?" - I hear you…| Roberto Vitillo's Blog
The response times of your service can cost you dearly if left unchecked. Even when a small fraction of requests experiences extreme…| Roberto Vitillo's Blog
There are two types of engineers, the ones that can quickly do estimates and the ones that can't. Are these people just smarter, or is there…| Roberto Vitillo's Blog
Why do you need to place your servers geographically close to your users? One of the reasons is to achieve lower latencies. That makes a lot…| Roberto Vitillo's Blog
I get asked this question a lot. I lost track of people I know that spend all their time brushing up on algorithmic puzzles and barely…| Roberto Vitillo's Blog
It's been three years since my last post on my old Wordpress blog! You can still find my earlier posts there as I was too lazy to move…| Roberto Vitillo's Blog
If a user has opted into submitting performance data to Mozilla, the Telemetry system will collect various measures of Firefox performance…| Roberto Vitillo's Blog
Technology allows companies to collect more data and with more detail about their users than ever before. Sometimes that data is sold to…| Roberto Vitillo's Blog
Writing good code is hard, writing a good analysis is harder. Peer-review is an essential tool to fight repetitive errors, omissions and…| Roberto Vitillo's Blog
How engaged are users for a certain segment of the population? How many users are actively using a new feature? One way to answer that…| Roberto Vitillo's Blog
This is a short post on the elegance of using abstract algebra for analytics in Scala. A monoid is a set that is closed under an…| Roberto Vitillo's Blog
Spark execution model Spark's simplicity makes it all too easy to ignore its execution model, and still manage to write jobs that eventually complete. With…| robertovitillo.com
Modern applications don't crash; they hang. One of the main reasons for it is the assumption that the network is reliable. It isn't. When you make a network…| robertovitillo.com
An application typically starts its life as a monolith. Take a modern backend of a single-page Javascript application, for example - it starts out as a single…| robertovitillo.com