Architectural Design Patterns 9 – Circuit Breaker

When designing systems, especially distributed systems, the flow of data and service requests must remain continuous. This brings us to an architectural design pattern called the Circuit Breaker. It comes from electronics. Simply, it is designed to stop the flow when something goes wrong. This prevents potential cascading failures in a system. Understanding the Circuit Breaker Pattern Imagine a scenario where a service relies heavily on another third-party service. However, that third-party service becomes slow or starts to fail at some point. Without any preventive measures, our service will keep making requests, waiting for timeouts, even getting stuck. This is…

Read More

Architectural Design Patterns 8 – Serverless (Function as a Service – FaaS)

Today's topic is a quite popular one, a fuzzy word getting more and more popular once it used to be a niche architectural pattern only. When we think about building software, a lot of the time and energy is spent thinking about where and how it will run. Serverless architecture, also known as Function as a Service or FaaS, helps this to change. Instead of planning the environment to run, developers mainly write functions and let cloud providers like AWS or Azure handle where it runs. Briefly describing, Serverless is an architectural model where cloud providers fully manage code execution.…

Read More

Architectural Design Patterns 7 – Domain-Driven Design

Domain-Driven Design, or DDD for short, isn't about code at first. It's about understanding the main business inside out, and then designing software that speaks the business's language. Think about a hospital system. Before we write code, we would talk about patients, doctors, treatments, and appointments. By diving deep into the "domain" or the core of the business, we create software that feels like it was tailor-made for it. DDD is super useful for businesses with unique rules and ways of doing things. Let's take insurance as an example. They've got tons of rules on who gets covered, how much…

Read More

On Azure Functions and Serverless

There's no shortage of tools and technologies to make developers' lives easier In the world of cloud computing, and one such offering comes from Microsoft which is Azure Functions. Here, we'll unravel the magic behind Azure Functions and explore why it's becoming a favourite for certain architectures. At its core, Azure Functions is a serverless compute service. "Serverless" might sound misleading, as there definitely are servers involved; however, the idea is that the responsibility of server management, scaling, and infrastructure concerns are taken away from the developer. This allows us to focus on writing and deploying our code. Azure Functions…

Read More

SOLID Principles: The Basics of Good Software Design

Even though my purpose is publishing ever green content in this blog, it is not easy to write about such a broader topic. Due to my recent interview process, I have been exposed to this topic since it is being asked again and again. Maybe, I should give the link to this article before the interview and skip to the next question straight away. Anyway, lets dive into the topic. There are certain foundational concepts about software engineering guiding developers in writing efficient, maintainable, and scalable code and the SOLID principles is at the top of the list. The word…

Read More

Architectural Design Patterns 6 – Service-Oriented Architecture

Service-Oriented Architecture, often known simply as SOA, can be thought of as a city of services. In this city, each service is like a shop. Every shop provides a unique product or service but doesn't worry about the other shops around it. Instead, it focuses on doing its own job really well. So, SOA is about creating independent services that work together in a large system. Now, where would you find SOA being used? Imagine big companies with different departments, like finance, human resources, or sales. Each department uses different software. With SOA, these different pieces of software can communicate…

Read More

Architectural Design Patterns 5 – Monolithic

The Monolithic architecture stands as a testament to the earlier days of software development. A Monolithic architecture is like a single, tightly packed unit where all the software components are bundled together. Think of it as a large factory where every product stage, from raw materials to the final product, is handled under one roof. This design pattern was especially popular when software applications weren't as complex as they are today. Its straightforward nature makes it a solid choice for simpler applications. Everything is in one place, making it easy to develop, test, and deploy. You don't have to juggle…

Read More

Architectural Design Patterns 4 – Event-Driven Architecture

Event-Driven Architecture is currently enjoying a lot of attention from businesses around the world due to the enhanced capabilities offered by cloud-based systems. Imagine a digital ecosystem like a busy marketplace. In this environment, various systems act as vendors declaring their services and updates. Rather than each customer (or system) having to visit every vendor to check for new items, they simply wait and respond whenever a vendor announces a product they're interested in. That's precisely how Event-Driven Architecture operates. Systems no longer continuously scan for updates or changes; they react upon the occurrence of a significant event. For instance,…

Read More

Architectural Design Patterns 3 – Microservices

In this article, we will be talking about Microservices, a design pattern that has gained attraction for its approach to building large and complex software applications. At its core, Microservices is about breaking down an app into smaller parts where each part doing its own job. Instead of one big chunk of software that does everything, you have multiple little services working together. Each microservice is responsible for its own task but collaborating with others to function properly. This approach shines in many situations, especially in cloud-based systems. The cloud is like massive land ready for construction. Microservices allow developers…

Read More

Architectural Design Patterns 2 – Model-View-Controller (MVC)

When you're diving into the world of software design, you'll often hear about the Model-View-Controller, or MVC for short. It's one of those blueprints, or design patterns, that helps developers keep their code tidy and well-organized. In this piece, we'll take a close look at what MVC is and how its parts play together. Model: The Model is the brain behind the data. It's where you keep everything related to the data you're working with: fetching it, updating it, or even deleting it. Imagine you have an app that keeps track of books in a library. The Model will have…

Read More