Some of the best articles I read end up here. I believe this curated collection will level up your knowledge and skills.
How Lyft Support Rides to 21 Million Users It’s fascinating how much thinking is involved into the design of services we consider mandane and essential to our day-to-day lives. I don’t know a lot about geospatial search and other problems involving maps. This article allowed me to glimpse at things happening under the hood when navigating on map or estimating ETAs of the rides.
How Tinder Scaled to 1.6 Billion Swipes per Day It’s fascinating how much thinking is involved into the design of services we consider mandane and essential to our day-to-day lives. I don’t know a lot about geospatial search and other problems involving maps. This article allowed me to glimpse at things happening under the hood when navigating on map or estimating ETAs of the rides.
Speed matters: Why working quickly is more important than it seems I liked the argument that speed matters. Of course unconsciously we all know it. But what are the implications? When you do tasks fast you don’t need to think how expensive they could be. If you want to write a post - just do it right away. The longer you delay writing it, the more expensive it seems to you. The less likely you’re to write it.
Everything You Need to Know About Micro Frontends Over the last years micro-forntends has become a popular topic. It’s a logical next step in the micro-service architecture. When implementing the application leveraging micro-frontends you’ll face the same issues and stick to the same approaches as with micro-services in general.
WebSockets vs Server-Sent-Events vs Long-Polling vs WebRTC vs WebTransport If you ever wondered what is the difference between WebSockets, Server-Sent-Events, Long-Polling, WebRTC and WebTransport this article is for you. Really good high level overview of different techniques to initiate data submission from server to clients.
Browser Event loop: micro and macro tasks, call stack, render queue: layout, paint, composite One of the best articles I’ve read explaining how the render process works in modern browsers. Simple explanation of a very complicated process.
Modularizing React Applications with Established UI Patterns Headless components is a hot topic right now. There are many libraries around providing unstyled components with encapsulated logic and behaviour. One of the most popular ones sticking to this architectural approach is shadcn/ui. Author of the article doesn’t talk about specific libraries but shows the way of extracting business logic and domain model of your own application to achieve the same.
The anatomy of shadcn/ui Styling components has always been a hustle. But many things have changed to the better with advent of Tailwind CSS. It simplifies the process of creating headless components. The article gives a few examples of such components and gives an overview of tools simplifying the process.
3L The mental model described in the article should help you approach onboarding for a new job in a company. It could be tempting to bring in solutions to problems from your old job but you have to think if it’s really applicable, if it’s a right solution for this company. I liked the framework overall and I definitely see the value it provides for those starting new job.
T-POP A good reminder for tech savvy programmers that tech is only one piece that defines your career path. As difficult as it might be for many of us, we need to expand our focus if we want to grow higher to influence product and organization decisions. Soft skills are key for the growth in this area.
How Zapier Automates Billions of Tasks A brief overview of technologies Zapier uses to automate things on scale. It’s not an extensive read, but I’m always interested in seeing the building blocks used by popular services under the hood.
Rethinking React best practices A good overview of different architectural patterns used in modern Front End development. The article is focused on React but principles discussed are general and rather framework-agnostic. The author talks about the compromises of both thin and thick clients. He shows how modern tools like HTTP/2 streams open new possibilities in delivering fast load time.
Fairness in multi-tenant systems Provides an extensive deep dive into how AWS deals with bursts in traffic load. Different strategies helping to alleviate the pressure on servers when the load increases are discussed int the article. AWS Api Gateway, WAF, Load Balancer and CloudFront can all be used to balance the load on server and deal with anomalies.
Understanding Execution Context and Execution Stack in Javascript I feel it’s good to revisit the basics from time to time. This article brings clarity and structure when it comes to JavaScript internals. In my view it’s beneficial to know how things work under the hood in order to understand closures or mechanics of “this” bindings.
Redis: A Clear Breakdown Concise and to the point overview of Redis. Goes beyond GET and SET.
Understanding database Indexes in PostgreSQL Gives an overview of the index concept in databases. The article is broad and deep, provides good explanation of different types of indexes.
Gossip Protocol Explained How to effectively distribute the message to all the notes in large scale distributed systems? How to avoid the situation when single node is a bottleneck when it comes to message sending? Answers to those questions can be found in this write where author explores different methods of message broadcast in high scale systems. The gossip protocol is one of the fundamental building blocks in systems like AWS S3, AWS DynamoDB, Redis etc.
Latency versus Response Time Short explanation of the important concept in system design - latency. And why you shouldn’t use terms response time and latency interchangeably.
Consistent Hashing Algorithm There are multiple strategies and techniques helping you organize caching in distributed system. Among them one of the most powerful is Consistent Hashing. It allows horizontal scaling and minimizes data movement when number of nodes change. This concept is used in many modern data storage solutions and is very easy to understand.
Understanding micro frontends Microfrontends became popular over the past years. They allow you to solve organizational problems by splitting teams and dedicating each team they own are of work. With microfrontends you can ship different parts of the app at different pace on different schedule. But have you thought of the drawbacks and price you’d need to pay down the road with this approach? I liked this article because author focuses on the challenges like versioning of dependencies, overall increased bandwidth and latency for the end user, the need of governance and oversight.
Microservice architecture style As we mentioned microfrontends above I think it would be good to revisit microservices to understand they pros and cons. Both approaches are designed to solve similar problems but they are also pretty different and face unique challenges. When using microfrontends we need to be careful with packaging so the end user would not need to download the same dependency again and again. This issue simply does not exist in the context of microservices.
The ecstasy and the agony of caches Caching is a great tool when you want to improve request latency or reduce costs. But without giving enough thought when introducing cache it can set your service up for disaster. The author explains the benefits and challenges of caching they experienced in the course of building and operating services at Amazon. How to mitigate the risk of failing cache and design services not addicted to cache are two major questions answered here.
Using requestIdleCallback requestAnimationFrame() and requestIdleCallback() allow us to schedule changes properly to maximize the chances of hitting 60 fps / second and providing smooth UX. This two methods are essential for many UI libraries like React. Article gives you a good idea of what requestIdleCallback is and when you should utilize it to your benefits.
Inside look at modern web browser If you’ve ever been interested in how browser renders the DOM this article is for you. It’s a multi stage process with a lot of complexities on every level. Knowing how it works will help in creating smooth UI especially if it involves animation.
Workload isolation using shuffle-sharding Author uncovers an important topic in any distributed system - DNS. It’s one of the most critical pieces of infrastructure that can put the entire system down when misconfigured or malfunctioning. Protecting it from DDoS attacks isn’t an easy task and AWS team had to invent so called “Shuffle Sharding” in order to provide cheap and scalable way of doing it for the customers.
A Distributed Systems Reading List A bunch of system design concepts collected into one document. I liked it because it has simple and short explanation of what each thing does and what problem it solves. Too often things are explained through extensive writing and rarely in simple and easily digestible way. I’d like to be able to express my thoughts about complex topics in such concise and clear way.