system design

There's a total of 5 articles.

Preparation for a Software Engineering interview → Read more...

This is my interview preparation plan for a software engineering role, I share a summary of my preparation, a plan of problems to tackle for coding interviews, the topics to study for a system design interviews and the questions to prepare for the behavioral section.


Back of the envelope calculations → Read more...

When designing a system it’s important to consider the limitations of the technologies chosen, making some approximate calculations when the system is designed help us decide on the tradeoffs of the different approaches, these approximations include


This article has a table with latency comparison numbers, common numbers used in system design calculations and some challenges to put all of these info into practice.


Cassandra → Read more...

Cassandra is a highly scalable, distributed NoSQL (non-relational) database management system designed for handling large amounts of data across multiple commodity servers.


This article covers key design features of cassandra such as the usage of consistent hashing, the write pattern to a write ahead log and a memtable, the read pattern from the memtable and from sstables, and finally and most important, some examples about data modeling for different types of queries.


Partitioning → Read more...

Data partitioning refers to the process of dividing a system’s data into smaller, more manageable subsets, which are distributed across multiple storage locations or nodes.


This article covers some strategies for partitioning including random partitioning, by hash key, by range and a hybrid approach for skewed workloads. We also see strategies to rebalance partitions if there’s a static or dynamic number of partitions.


Non Functional Requirements → Read more...

Non functional requirements refer to quality attributes or system characteristics that describe how well a software system or solution performs or behaves.


This article covers well known non functional requirements such as reliability, availability, scalability, performance and durability.