System Design Basics

How do you use the message queue to design a newsfeed notification system like Facebook?

System design is one of the most crucial concepts of software engineering. While designing a system, you need to know which solution is used for which kind of problems. Familiarizing yourself with the basic concepts and terminologies of the system design is important for designing a fault-tolerant and performant system.

This article will try to understand an important system design concept, Message queue — a brief description of how the publish-subscribe pattern works. And at the end of the article, we will try to design a notification system using a message queue.

What is Message Queue?

From the name itself, you can understand it…


System Design 101

When do you use caching in a system design?

System design is one of the most important concepts of software engineering. One of the main problems of designing a system is that the terminology used in the system design resources is hard to grasp at first. Besides you need to know which tool or term is used for which problem. Familiarizing yourself with the basic concepts and terminologies of system design would greatly help in designing a system.

This article explores an essential topic of system design, Caching. It is one of the essential techniques of system design. In almost all the systems, we might need to use caching…


An introduction to the Client-Server model

System design is one of the most important concepts of software engineering. Everybody who starts to change into a system designer from a programmer has a hard time understanding how to know about concepts regarding a system design. If you don’t know about the terminologies that are used in system design it is hard to learn about them.

This article explains an important topic of system design, the Client-Server Architecture. You may know about how servers and clients communicate here. Familiarizing yourself with the basic concepts of TCP, IP, HTTP would greatly help in designing a system.

Client-Server architecture

Client/server architecture is…


How do you design a photo-sharing service like Instagram?

System design is one of the most significant parts of software engineering. It is intimidating to start designing a system. One of the main reasons is that the terminologies described in software architecture books are hard to understand. And there are no fixed guidelines. Everywhere you check seems to have a different approach. It becomes confusing for a new learner.

So, I set out to design a system based on my experience of learning architecture courses. This is part of a series on system design for beginners (link is given below). …


System Design 101

How popular sites handle huge number of requests

System design is one of the most important concepts of software engineering. When I started my associate architecture course, I had a hard time understanding how you design a system. One of the main problems was that the terminology used in the system design resources is hard to understand at first.

This article examines an important topic of system design, the Load Balancer. You may know about its characteristics and techniques of server selection here. Familiarizing yourself with the basic concepts and terminologies of system design would greatly help in designing a system.

Load Balancer

A load balancer is a vital component…


Getting Started

A step by step guide on designing a system

#design
#design

Nowadays, system design interviews are part of the process of top-level tech companies. Many people are afraid of system design interviews as there’s no certain pattern to prepare. Besides, system design questions are open-ended, and there’s no standard right or wrong answer, which makes the preparation process even harder.

System design is one of the most important and feared aspects of software engineering. One of the main reasons was that everybody seems to have a different approach; there is no clear step by step guidelines.

The struggle of software engineers with system design can be divided into two parts:

  • The…


Simple activities to remove negative thoughts in your daily life

relax, overcome negativity
relax, overcome negativity

We all suffer from the storm of negative thoughts every day. Negative thoughts appear in our minds daily; it does not matter how hard we try to avoid them. Negativity has such power that it can take hold of our mind and influence way too much of our life if we are not careful. So we need to be alert and conscious.

Whenever we start to do something new, there is something in the head that gives all the negative signals. What would be the output, what other people may think, what if it does not end well etc. etc…


System design analysis of a web service that provides a shortened URL

#UrlShorteningService #tinyURL #systemdesign
#UrlShorteningService #tinyURL #systemdesign

System design is one of the most important and feared aspects of software engineering. This opinion comes from my own learning experience in an associate architecture course. When I started my associate architecture course, I had a hard time understanding the idea of designing a system.

One of the main reasons was that the terms used in software architecture books are pretty hard to understand at first, and there is no clear step by step guidelines. Everybody seems to have a different approach.

So, I set out to design a system based on my experience of learning architecture courses. This…


Links of all the articles in one place

System design related articles:

Articles related to Design Patterns:

Links for Non-Technical Articles:


Availability is a key characteristic of Distributed Systems.

Availability is one of the critical aspects of Distributed Systems. In this modern age, most systems need to guarantee availability. We may say, availability is the time a system remains functional to perform its required task in a specific period.

According to Wikipedia, Availability is generally defined as uptime divided by total time (uptime plus downtime)

We sometimes use the terms reliability and availability interchangeably, but they are not the same. Reliability is availability over time if we consider the full range of possible real-world situations that can occur. If a system is reliable, you can say it is available…

Ashis Chakraborty

Associate Architect, Samsung Electronics | Writer in free time, Like to read about technology, writing & psychology | LinkedIn https://tinyurl.com/y57d68fq

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store