Fernando 🇮🇹🇨🇭 Profile picture
Oct 29 14 tweets 4 min read Read on X
There is a reason why System Design is hard for most software engineers.

They don't understand how distributed systems work.

If you want to learn the basics of distributed systems, read these 13 curated articles: ↓ Image
1. From theory to production: cache performance, architecture, and deployment strategies.

newsletter.francofernando.com/p/caching-in-d…
2. A different way to do replication in distributed systems that gives you high availability and throughput.

newsletter.francofernando.com/p/chain-replic…
3. How do CDNs work, and how to get the most benefits out of them.

newsletter.francofernando.com/p/a-critical-g…
4. What every engineer should know when working with distributed systems.

newsletter.francofernando.com/p/the-challeng…
5. How object storage systems like S3 or Azure Storage work, and how you can make the best use of them.

newsletter.francofernando.com/p/understandin…
6. How RAFT solves the consensus problem in distributed systems: a step-by-step breakdown that every engineer can understand.

newsletter.francofernando.com/p/the-raft-con…
7. All what you need to know to use load balancers in distributes systems

newsletter.francofernando.com/p/the-definiti…
8. Everything a software developer should know about how the domain name system works.

newsletter.francofernando.com/p/a-critical-g…
9. All what you need to know to make your database more scalable, faster, and available with sharding.

newsletter.francofernando.com/p/a-comprehens…
10. Eight distributed systems fallacies that are underrated during system design.

newsletter.francofernando.com/p/the-fallacie…
11. A deep dive into message queues: core components, messaging protocols, and communication styles.

newsletter.francofernando.com/p/messaging-pa…
12. A distributed storage case study: the Google File System.

newsletter.francofernando.com/p/google-file-…
13. The difference between latency and throughput. Plus, how to optimize them in system design.

newsletter.francofernando.com/p/latency-and-…

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Fernando 🇮🇹🇨🇭

Fernando 🇮🇹🇨🇭 Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @Franc0Fernand0

Oct 1
If you're a backend engineer who want to get better at system design, read these 14 articles: ↓ Image
1. The evolution of a web application architecture when going from serving hundreds to millions of users.

newsletter.francofernando.com/p/from-a-singl…
2. How do CDNs work, and how to get the most benefits out of them.

newsletter.francofernando.com/p/a-critical-g…
Read 15 tweets
Sep 27
Indexes are one of the most critical concepts for databases.

But to use them effectively, you need to know how they work under the hood.

Here are the fundamental concepts that every backend engineer should know: ↓ Image
Database indexes have the same functionality as textbook indexes.

They help to retrieve data quickly.

Anyway, the similarity ends here since database indexes are much more complex.
In general, retrieving data is slow for two reasons.

First. the required data only sometimes fits in memory.

Second, the data stored in a database is spread across the disk storage in random order.

So, reading all the data from the disk would take too long.
Read 9 tweets
Sep 3
If you want to improve your skills as a senior software engineer, read these 12 curated articles: ↓ Image
1. How to become a better writer as a software engineer.

newsletter.francofernando.com/p/writing-as-a…
2. Why every software engineer should care about repetition: solutions that actually work.

francofernando.substack.com/p/the-dry-prin…
Read 13 tweets
Aug 30
Many applications require the generation of unique IDs on their backend.

This task is easy on a single server but harder on a large scale.

For example, on a single server, you can use an incremental ID or a function to get the time of the day.

However, such strategies fail in a distributed scenario since they create duplicates.

Here are 4 effective alternatives you can use: ↓Image
1. Application-level Universal Unique Identifiers (UUIDs).

UUIDs are 128-bit numbers that the application can generate in different ways.

For example, it can combine time, the server’s MAC address, or an MD5 hash.

The main benefits of UUIDs are:

• servers don't need to be in sync
• large ID space and low number of collisions

The main drawbacks are:

• big size (128 bit)
• IDs are not sequentialImage
2. Database-level UUIDs.

Many databases provide an auto increment feature.

So a database server can be used to generate unique IDs.

This approach is also known as ticket service and has been used by Flickr.

The main benefits of database generated IDs are:

• the application code gets simpler

• IDs are sequential and short in size

The main drawbacks are:

• the additional round trip to get the IDs from the database

• the database becomes a single point of failuresImage
Read 5 tweets
Aug 20
If you're a software engineer who wants to know more about databases, read these 10 articles: ↓ Image
1. A taxonomy of the most used types of database available on the market: relational, NoSQL, time-series and NewSQL.

newsletter.francofernando.com/p/database-cat…
2. A deep dive into database indexing. Part one: how indexes are implemented.

newsletter.francofernando.com/p/indexing
Read 11 tweets
Aug 16
Backend development is a challenging yet rewarding field.

If I had to start over again, these are the 7 steps I would take: ↓ Image
1. Learn a programming language

To get a job in backend programming, you need to be good at writing code.

Python, C#, and Java are all popular backend programming languages.

You don't have to be good at all of them, though.

Pick a language and learn it well.
2. Learn about server-side frameworks

Server-side frameworks are tools that help build the structure of any website.

They'll make the development process smoother and more efficient.

Popular frameworks are Flask (Python), Spring (Java), .NET Core (C#).
Read 8 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(