Fernando 🇮🇹🇨🇭 Profile picture
Dad and husband • Software Engineer for 15+ years • Algorithms, Distributed Systems, System Design, Computer Vision
13 subscribers
Sep 3 13 tweets 4 min read
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…
Aug 30 5 tweets 3 min read
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
Aug 20 11 tweets 3 min read
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…
Aug 16 8 tweets 2 min read
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.
Aug 6 13 tweets 4 min read
If you're a software engineer who wants to upskill in system design, read these 12 articles: ↓ Image 1. How to answer this popular system design question: from a simple concept to a scalable system.

francofernando.substack.com/p/designing-a-…
Jul 19 9 tweets 3 min read
Every software developer needs to know how the HTTP protocol works.

Here are the 8 fundamental things you need to grasp: ↓ Image 1. What is HTTP

HTTP is an application-level protocol based on a request-response paradigm.

Its primary use is encoding and transporting information between a client and a server.

A typical HTTP transaction is made of 2 steps:

• a client sends a request message to a server

• the server replies with a response message
Jul 16 7 tweets 5 min read
As a senior software engineer, you should read these famous white papers from big tech companies (AWS, Google, Meta,..): ↓ 1. Dynamo: Amazon’s Highly Available Key-value Store

cs.cornell.edu/courses/cs5414…

2. Spanner: Google’s Globally-Distributed Database

static.googleusercontent.com/media/research…

3. Scaling Memcache at Facebook

usenix.org/system/files/c…
Jun 25 13 tweets 4 min read
If you're a software engineer who wants to learn the core concepts about system design and distributed systems, read these 12 articles: ↓ Image 1. 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…
Jun 14 4 tweets 2 min read
What is API pagination?

A lot of times, REST APIs need to return 100+ results.

API pagination is a way to break such data into chunks that are easy to work with.

This improves user experience and reduces server load.

These are the 3 kind of API pagination you need to know: ↓ Image 1. Offset-Based

The API uses two parameters: "offset" determines the position in the dataset, while "limit" specifies the maximum number of data to include on each page.

This approach became popular with apps using SQL, which already have LIMIT and OFFSET as part of the syntax.

Example: GET products?limit=20&offset40

Pros: It's simple to set up and lets you go straight to any page.

Cons: There are performance issues with large OFFSET values. It can cause data to be duplicated or skipped in dynamic datasets.
Jun 11 13 tweets 4 min read
If you are a software engineer serious about getting better at algorithms and data structures, read these 12 articles: ↓ Image 1. How to use the two-pointer method to efficiently solving array and string problems (with code templates).

newsletter.francofernando.com/p/mastering-th…
Jun 7 6 tweets 2 min read
Most developers think graphs are not important for their daily work.

But the reason is that they don't know graph algorithms and their use cases.

You will change your mind once you know these 5 algorithms: ↓ Image 1. Breadth-first search

It's a traversal algorithm implemented using a queue data structure.

It starts from a node and first explores all its adjacent nodes.

Then, it explores all nodes two steps away from the starting one, and so on.

Applications of BFS are:

● build web page indexes in web crawlers

● discover neighbor nodes in p2p networks

● find neighboring places in GPS navigation systems
May 28 15 tweets 4 min read
If you're a backend engineer who want to get better at system design, read these 13 articles: ↓ Image 1. Common mistakes software engineers make during system design interviews and how to avoid them.

newsletter.francofernando.com/p/how-not-to-f…
May 21 4 tweets 3 min read
9 LeetCode articles that will help you get ready for your next coding interview: ↓ 1.Two Pointers Patterns:

leetcode.com/discuss/study-…

2. Binary Search Patterns:

leetcode.com/discuss/study-…

3. Dynamic Programming Patterns: leetcode.com/discuss/study-…
Apr 30 11 tweets 3 min read
If you are a senior software engineer who wants to improve his/her skills, read these 10 curated articles: ↓ Image 1. How to boost your career as a software engineer by communicating better with your peers, manager, and partners.

newsletter.francofernando.com/p/communication
Apr 26 7 tweets 2 min read
Coming up with an algorithm to solve a problem is hard.

Without a proper approach, it's easy to get lost.

Here are 6 methods you can use to solve 99% of the problems: ↓ Image 1. Brute Force

It's the most basic approach.

• Methodically list all the possible candidates for the solution.

• Check to see if the problem statement is satisfied for each option.

• It always finds the best solution but doesn't scale with the input size.

Example: Find the closest pair of points
Apr 16 11 tweets 3 min read
If you're a software engineer who want to get better at tech interviews, read these 10 articles: ↓ Image 1. Common mistakes software engineers make during system design interviews and how to avoid them.

newsletter.francofernando.com/p/how-not-to-f…
Mar 29 4 tweets 2 min read
What's the difference between load balancers, reverse proxies, and API Gateways? ↓ 1. Load Balancers

Their main job is sending client requests to several servers. The goal is to spread the load evenly so there are no bottlenecks and the system works smoothly.

They work in this way:

- The load balancer gets requests from clients

- The load balancer selects a server based on a predefined algorithm

- The request is sent to the service that was chosen

- The server processes the request and returns the response to the load balancer

- The load balancer then forwards the response back to the client

The main benefit of using a load balancer is that it increases throughput, reduces response time, and optimizes resource utilization.
Mar 19 11 tweets 3 min read
If you're a software engineer who want to get better at system design, read these 10 articles: ↓ Image 1. How Shopify uses sandboxing to build secure checkout pages

newsletter.francofernando.com/p/the-shopify-…
Mar 11 4 tweets 2 min read
What are message queues?

They are a way to let two services talk asynchronously and are critical in any distributed system.

A producer creates messages and puts them in the queue.

A consumer gets messages from the queue and processes them.

Here's a practical use case: ↓ Image Multimedia applications often need to process content to meet different users' needs.

Simply sending the request to a processing service wouldn't be a great idea because the service may not work for any reason.

A better approach is to send the request to a message queue and put the content in a file store. The queue works as a temporary buffer until the service can process the request.
Feb 18 5 tweets 2 min read
Latency and throughput are critical for any application.

But many developers get them wrong or use them in the wrong way.

Here are the key differences you should know: ↓ Image Latency is a way to measure how long an operation takes to finish.

You can think of it as the time it takes for your system to respond.

For example, latency is the time from clicking the link to when the data displays on your screen.

In computer networking, the most common latency is round-trip delay. That's the time it takes for a client request to reach the server and for the response to return.

Network latency is usually measured in milliseconds (ms) using ping tests or traceroute.
Feb 8 8 tweets 2 min read
In any coding interview, you must solve problems about arrays or strings.

I completed over 350+ of them and learned to avoid the usual mistakes.

Here are some tips that will help you improve: ↓ 1. You can efficiently access both ends of an array and use the 2-pointer technique.

2. It's usually possible optimize to O(1) space a brute force solution taking O(N) space.

3. Consider the possibility of overwriting an element instead of removing it.