Importance of S.O.L.I.D principles

Image for post
Image for post
S.O.L.I.D principles

Introduction

As developers, we have always dealt with legacy codebases. Most of the legacy codebases have tightly coupled classes, redundant code, and less test coverage. This gives a developer a hard time to comprehend the functionality of a codebase when giving a quick glance at the code.

Imagine the pain of going through endless lines of code in a class to only fix a bug. The developer might end up reading more lines of code than writing. Further, fixing one flow might result in breaking the other. This reminds me of the below famous meme.


Implementation & Illustration of the Observer design pattern

Image for post
Image for post
Art of Observing

Introduction

Real-world software systems rely heavily on events. Any state change occurring in the system comprises an event. Whenever you purchase anything online, you get an email notification. Similarly, your Bank may send you a text message about a successful transaction. As customers, we have different modes of consuming these events viz Computers, Mobile Devices, Wearables, etc. Billions of such events take place throughout the world in a fraction of a second.

The Observer design pattern is modeled on the event-driven programming paradigm. Just like other design patterns, this pattern lets us define…


Fundamentals of Kafka

Image for post
Image for post
Apache Kafka

Introduction

Kafka has revolutionised the processing of events stream in distributed computing. Before the advent of Kafka, the industry employed message queues and publisher-subscriber systems. Both these systems had their limitations in scalability and performance. Kafka took the best of both the world from the two systems. Thus, delivering a scalable, highly-available, distributed commit log.

There is a common misconception that Kafka acts as a message queue. However, the semantics of message queue is different than that of Kafka. In essence, Kafka is a distributed commit log. It’s a highly available, scalable & a fault-tolerant system. …


High-level Design of URL Shortner

Image for post
Image for post
Tiny URL System Design

Introduction

System design Interview problems are intentionally open-ended. It gives an interviewer opportunity to evaluate design skills and also the depth of technical concepts. Day-to-day engineering work involves architecting a lot many scalable systems. This interview provides a platform to judge a candidate’s problem-solving & communication skills as well.

It’s difficult to nail a System Design round without sufficient preparation & practice. Also, it’s intimidating for candidates who don’t have a background in Distributed Systems. At times, interviewees seem to lose their focus & deviate from the topic if they don’t follow a structured methodology.

It’s…


Elliptic Curve Cryptography in simple words

Image for post
Image for post
Public Key cryptography

Introduction

In the past century, the world has seen unprecedented progress in the field of Cryptography, & Computer Security. In today’s world, all electronic devices use cryptography for secure communication. We have come a long way since the WW2 days when Nazis used the Enigma machine for military communication. With the world gravitating towards quantum supremacy, encryption might become a thing of past.

In this article, we will have a look at the fundamentals of Elliptic Curve Cryptography (ECC). This article will touch upon the high-level working of ECC without delving into the mathematical details…


Introduction, use cases, strategies, and policies to cache data

Image for post
Image for post
Data Centre

Introduction

Have you ever noticed if you are on a slow internet connection and browsing a website, the text is loaded before any high-quality image? However, in your subsequent visits to the same website, you will observe that page rendering occurs quickly. When you visit a brand new website, it takes more time to load than frequently visited sites like Facebook or Amazon. Do you know why this happens? The answer is Caching.


Consistent Hashing illustrated in simple words

Image for post
Image for post

Introduction

Imagine you are designing a scalable backend for an e-commerce website like Amazon. The amount of data volume will be humongous and exponentially rising every year. Do you think you will be able to store & manage the data on a single server? The answer is No.

When your data can’t fit on a single machine, you will have to spin up more machines. One of the most significant design objectives would be to efficiently distribute the data among the servers. …


Tips to crack the system design interview at a Tech Company.

Image for post
Image for post
What whiteboard interviews look like?

Most of the Tech Companies have a system design round as a part of their interview process. Candidates are generally asked to design a scalable system such as Facebook NewsFeed, Instagram stories, WhatsApp chat, CI/CD system, etc.

There are a lot of resources on the Internet to prepare for System Design interviews. The plethora of resources can become overwhelming for any developer to digest. However, there are common patterns observed across the questions asked by Tech Companies. Having crystal clear idea of System Design Concepts & fundamentals helps any candidate in coming out with flying colours.

In this article, I…


Image for post
Image for post
https

Introduction

Have you ever wondered what happens when you type any URL in the browser? Why few websites are on HTTPS while others on HTTP? When you purchase anything online using your credit card, how does a website ensure that your sensitive information is not leaked? Same applies to the case when you enter login Id and password on any social media website.

In this article, I’ll be elaborating basic working of HTTP, its disadvantages and the basic building blocks of HTTPS. …


Implementation of Hexagonal Architecture or Ports & Adapter Architecture

Image for post
Image for post

Background

As developers, at some or the other point, you have worked on legacy software that is not well maintained. You understand the pain to comprehend simple logic written in complex blocks of code. Further, introducing an enhancement or a new feature gives nightmares to developers.

Maintainability is at the heart of good software design. Codebases that are not well maintained become difficult to manage. Not only they become difficult to scale but also give a hard time to a new developer to onboard & hit the ground running.

In the Tech…

Animesh Gaitonde

Senior Software Engineer @Microsoft. Writes about Distributed Systems, Programming Languages & Tech Interviews

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