Why three Availability Zones are better than two

A couple of months back a customer asked why we are proposing a three Availability Zone (AZ in short) architecture instead of two. Their main point was which failure modes 3 AZs guard against that … | Continue reading


@shekhargulati.com | 3 years ago

Lessons from Gitlab’s Postgres Schema Design

I spent some time going over the Postgres schema of Gitlab. GitLab is an alternative to Github. You can self host GitLab since it is an open source DevOps platform. My motivation to understand the … | Continue reading


@shekhargulati.com | 4 years ago

Factors to consider when architecting systems that uses third-party systems

Most of us are building systems that sit on top of other third party systems. This is common in the FinTech ecosystem that I am currently involved with. Most Neo-banks are built on modern core bank… | Continue reading


@shekhargulati.com | 4 years ago

Why naming stuff is hard?

Last few months I have spent a lot of time doing code reviews. During the code review exercise I also pair with developers to refactor and improve the quality of their pull requests (PR).  I care a… | Continue reading


@shekhargulati.com | 4 years ago

Web API Design Anti-Pattern: Exposing Your Database Model

One of the common Web API design mistakes that I see when I review work of development teams is exposing database models as API. If you are building a Java Spring Boot JPA application then it means… | Continue reading


@shekhargulati.com | 4 years ago

Are Awesome Lists Awesome?

Visit the post for more. | Continue reading


@shekhargulati.com | 4 years ago

Podman: The Missing Tutorial

I have been using Docker since late 2013 and for me and many others Docker has revolutionised the way we build, package, and deploy software. As a community we are grateful to Docker and its creato… | Continue reading


@shekhargulati.com | 4 years ago

Questions to ask when making Build versus Buy decision – Shekhar Gulati

Most software companies have to make decisions on whether to build a custom software or buy it from a vendor. Some of these decisions are mentioned below. Should we build the recruitment tracking s… | Continue reading


@shekhargulati.com | 5 years ago

Software Engineers struggle to write “chunks” function

In the last couple of years, I took close to two hundred interviews. These interviews range from Java engineers with two years of experience to architects holding more than fifteen years of experie… | Continue reading


@shekhargulati.com | 5 years ago

Lessons learned in my first year being CTO

Happy New Year!2020 was a difficult year for most of us, as we fought with COVID-19 and came to terms with the remote way of working. It was a year when we had a lot more time in our hands as all o… | Continue reading


@shekhargulati.com | 5 years ago

My Thoughts on Monorepo

Before we start let me give some context on my background so that you can better understand my thoughts on Monorepo.  I head technology at an IT services organization. Most of the products tha… | Continue reading


@shekhargulati.com | 5 years ago

Writing scripts in Java 11 and beyond

Many Java users hate it at times for being too verbose. Many of us have started using other languages like Kotlin or Scala for their terseness and expressiveness. One of the feature that Java progr… | Continue reading


@shekhargulati.com | 5 years ago

On Being a Full Stack Developer

I am doing software development for the last 15 years. Since I heard the term “Full Stack Developer” few years back I had a strong dislike for this term. To most people full stack devel… | Continue reading


@shekhargulati.com | 6 years ago

Improving Java Hibernate Bulk Insert Performance by more than 100 times

This week I had to work on a performance issue. Performance issues are always fun to work with. They give an opportunity to get into the depth of the technology we are using. We learn how much we d… | Continue reading


@shekhargulati.com | 6 years ago

Using ArchUnit to Enforce Software Architecture Best Practices

I have worked with multiple software development teams that because of feature delivery pressure does not apply best practices. This later leads to tech debt and cost more time. In the last project… | Continue reading


@shekhargulati.com | 6 years ago

Architecture Hoisting

All software has software architecture. This is true even when a team has not spent time coming up with it. This architecture is often called Big ball of Mud. A big ball of mud architecture is a so… | Continue reading


@shekhargulati.com | 6 years ago

Software Architecture Diagrams as Code

I love the idea of everything as code. It enables use of version control for all aspects of software development. These days we use everything as code approach for documentation, infrastructure pro… | Continue reading


@shekhargulati.com | 6 years ago

Why GraphQL? 8 Reasons After Reading 13 GraphQL Case Studies

GraphQL is a query language built by Facebook. It is an alternative to building REST APIs. In the last few years it has become popular and there are many big organisations like Facebook, Github, Ne… | Continue reading


@shekhargulati.com | 6 years ago

The 5 Minute Introduction to DuckDB: The SQLite for Analytics

A couple of weeks back I learnt about DuckDB while going over DB Weekly newsletter. It immediately caught my attention as I was able to quickly understand why need for such a database exist. Most d… | Continue reading


@shekhargulati.com | 6 years ago

Minute Introduction to Log-Based Change Data Capture with Debezium

Few years back I was working on an application where I had to pull data from an event table(populated using database triggers) and update my application specific data stores . This is a common prob… | Continue reading


@shekhargulati.com | 6 years ago

Mental Models for Software Engineers: Regret Minimization Framework

I became aware of Regret Minimization Framework quite recently while reading a random post on the web. With in that timeframe it has helped me take a couple of big decisions with clarity. Had I kno… | Continue reading


@shekhargulati.com | 7 years ago

Mental Models for Software Engineers: Occam’s Razor

Occam’s Razor helps us choose between two or more explanations of a problem. It provides a useful mental model for problem-solving. A razor is a principle or rule of thumb that allows one to … | Continue reading


@shekhargulati.com | 7 years ago

Chaos Engineering to an Organization

This post explains my learning on how to introduce Chaos Engineering to an organisation. This is based on my experience of re-architecting monolithic application to Microservices based architecture… | Continue reading


@shekhargulati.com | 7 years ago

A minimalistic guide to distributed tracing with OpenTracing and Jaeger

If you have ever worked on a distributed application you will know that it is difficult to debug when things go wrong. The two common tools to figure out root cause of the problem are logging and m… | Continue reading


@shekhargulati.com | 7 years ago

Dockerizing a Vue.js application

It is common these days to run front-end and back-end services inside Docker containers. The front-end service usually talks using a API with the back-end service. In this post we will cover follow… | Continue reading


@shekhargulati.com | 7 years ago

A simple introduction to distributed systems

A couple of weeks back a junior developer asked me a seemingly simple question – What is a distributed system? One question led to another and we end up spending more than an hour discussing … | Continue reading


@shekhargulati.com | 7 years ago

Building a Sentiment Analysis Python Microservice with Flair and Flask

Flair delivers state-of-the-art performance in solving NLP problems such as named entity recognition (NER), part-of-speech tagging (PoS), sense disambiguation and text classification. It’s an NLP f… | Continue reading


@shekhargulati.com | 7 years ago

How Docker uses cgroups to set resource limits

Today, I was interested to know how does Docker uses cgroups to set resource limits. In this short post, I will share with you what I learnt. I will assume that you have a machine on which Docker i… | Continue reading


@shekhargulati.com | 7 years ago

Locust: Load Test Your REST APIs

Recently, I wanted to load test one of my applications. In my previous projects, I have used Apache JMeter and Gatling. Both of them are great tools but I wanted something with ease of Apache Bench… | Continue reading


@shekhargulati.com | 7 years ago

The Compound Effect

We all are looking for a quick way to earn money, lose weight, build relationships, get promotion in our job, or become successful in life. I have failed numerous times with my effort to achieve my… | Continue reading


@shekhargulati.com | 7 years ago

Two-phase commit protocol

Welcome to the fourth post in the distributed systems series. In the last post, we covered ACID transactions. ACID transactions guarantee Atomicity: Either all the operation succeed or none Consist… | Continue reading


@shekhargulati.com | 7 years ago

The Minimalistic Guide to ACID Transactions

Welcome to the third post of distributed system series. So far in this series, we have looked at service discovery and CAP theorem. Before we move along in our distributed system learning journey, … | Continue reading


@shekhargulati.com | 7 years ago

CAP Theorem for Application Developers

It is a reality that most of us are building distributed systems. According to wikipedia, a distributed system is a system whose components are located on different networked computers, which then … | Continue reading


@shekhargulati.com | 7 years ago

Service Discovery for Modern Distributed Applications

I am starting a new blog series (with no end date) from today. In this series, I will pick a topic and go in-depth so that I don’t just scratch surface of the topic. The goal is to build a ha… | Continue reading


@shekhargulati.com | 7 years ago

On writing

Since last couple of years, writing has fascinated me. I became interested in writing as I started spending more time reading books. I have read more books in last couple of years than I have read … | Continue reading


@shekhargulati.com | 7 years ago

The fool’s life is empty…

The fool’s life is empty of gratitude and full of fears; its course lies wholly toward the future – Epicurus Most of us these days are obsessed with our future. In future we want to be … | Continue reading


@shekhargulati.com | 8 years ago

A day in the life of software developer: Assumptions, Theories, and Lessons

Last week, we (me and my team) started a new sprint of our software development project. We follow a two-week sprint cycle that starts on Wednesdays and continues until Tuesday. Following the plann… | Continue reading


@shekhargulati.com | 8 years ago

Refactoring conditional logic

A couple of weeks back I was working on a piece of code that was becoming a tangled mess of if-else conditions. I was finding it difficult to reason and adding a new condition without breaking the … | Continue reading


@shekhargulati.com | 8 years ago

Java Lambda Puzzler

Today, a colleague asked me how they can pass a java.util.Stream to a function that accept an java.lang.Iterable. Let’s suppose we have a following function that accepts an Iterable. The call… | Continue reading


@shekhargulati.com | 8 years ago

10 Reads, a Handcrafted Weekly Newsletter for Humans

Welcome to the fourth  issue of 10 Reads weekly newsletter. Below are the 10 posts that taught me something useful and unique that will help me become better software engineer. Total time to read t… | Continue reading


@shekhargulati.com | 8 years ago