Grokking Modern Software Architecture Styles

Learn the architectural styles behind modern backend systems, from monoliths to serverless, and how to choose, record, and review one for a real system. For junior and mid-level engineers.

Level:
Beginner
Study Time:
20h
0
Updated
Last week
4.9
(219 ratings)
1,113 learners
Arslan Ahmad
Created byArslan Ahmad
Ex FAANG Manager, Expert Behind Grokking Modern Software Architecture Styles

Course Overview

Grokking Modern Software Architecture Styles teaches the structure of backend systems. That structure is the parts a system has, the job of each part, how the parts communicate, and which decisions are expensive to change later. It is written for junior and mid-level engineers who already build features and now want to take part in structural decisions. The course first builds a shared vocabulary for judging any design: boundaries, coupling, quality attributes, constraints, and trade-offs. It then gives each architecture style its own lesson, from monolith and layered through microservices and event-driven to hexagonal, peer-to-peer, and serverless. Every style lesson has the same parts: vocabulary, how the style works, worked examples, code in five languages, diagrams, trade-offs, and an adaptive assessment. The last chapters teach the work that follows the choice of a style. You compare designs with evidence, draw C4 diagrams, write decision records, run architecture reviews, and change a running system in small steps. Three capstones with reference solutions and rubrics, then two final assessments, end the course.

Grokking Modern Software Architecture Styles Image
Best value
Lifetime access to this course
One-time payment. Yours forever.
Discussions
Certificate
Free updates
Want all 43+ courses?
Grokking Modern Software Architecture Styles Image
Best value
Lifetime access to this course
One-time payment. Yours forever.
Discussions
Certificate
Free updates
Want all 43+ courses?

What you'll learn in Grokking Modern Software Architecture Styles

  • Tell an architecture decision apart from detailed design, and estimate what it would cost to reverse.
  • State a quality requirement as a measurable target, and score design options in a weighted table.
  • Split a system into services that communicate through calls or events: microservices, SOA, and event-driven.
  • Distribute and scale with broker, peer-to-peer, space-based, and serverless architectures.
  • Read small Python programs that show how the styles work, and switch most of them to Java, JavaScript, C#, or Go.
  • Review a running system, rank its findings by effect on the main requirement, and plan the smallest fix.
  • Check yourself with an adaptive assessment after every style lesson, two final assessments, and three capstones.
  • Judge any design by its boundaries, its coupling and cohesion, and the direction its dependencies point.
  • Explain how monolith, layered, N-tier, and client-server systems are built, and what each one makes harder.
  • Organize code and processing with pipe-and-filter, microkernel, hexagonal, and clean architecture.
  • Recognize when a style is the wrong fit for a system, a team, or a budget, and say what it would cost.
  • Draw C4 architecture diagrams and write decision records with their costs and the conditions that reopen them.
  • Change a running system in small steps with the strangler fig pattern, feature flags, and zero-downtime schema changes.

Course Content

• 4 Chapters • 30 Lessons
1.

Architecture Fundamentals

6 lessons

Course Introduction

This course teaches fifteen software architecture styles, the problem each one solves and what each one costs, after five lessons on the ideas that every style decision depends on. This lesson explains who the course is for, how it is organized and how to use it.

What Software Architecture Is

Software architecture is the structure of a system and the decisions about that structure that are expensive to change later. This lesson shows how to tell those decisions apart from detailed design, why they matter, and how architecture styles package them into named, reusable sets.

Responsibilities and Boundaries

Learn how to give each part of a system one clear job, how boundaries and interfaces hide what a part does inside, and how splitting a system by technical layer differs from splitting it by business area.

Coupling, Cohesion, and Dependencies

This lesson explains how a change in one part of a system can force changes in other parts, how to keep related code together, and how to arrange dependencies so that business rules do not depend on details that change often.

Quality Attributes

Learn the five quality attributes that architecture shapes most strongly (changeability, performance, availability, security and cost), how each one is measured, and how the architecture styles in this course tend to help or hurt each one.

Constraints and Trade-offs

Every architecture decision is made inside limits you do not choose, and every option improves some quality attributes at the cost of others. This lesson shows how to compare options in a weighted scoring table, check the winner against your constraints, and record the result in an architecture decision record.

Monolith Architecture

A monolith ships every module as one deployable artifact that runs in one process and shares one database. This lesson shows how to structure a monolith well, what it does better than any other style, what eventually breaks as it grows, and when to extract a service.

Layered (N-Layer) Architecture

Layered architecture splits code by technical job into presentation, business and data access layers, and each layer calls only the layer below it. This lesson shows each layer's job, how dependency injection wires them, how to test each layer alone, and where the style stops paying off.

N-Tier Architecture

N-tier architecture places presentation, application and data on separate machines that talk over the network. This lesson separates tiers from layers, then covers the two-, three- and four-tier models, communication between tiers, scaling and fault tolerance per tier, and cloud deployments.

Client-server Architecture

In client-server architecture, clients send requests to a server that owns the data and the rules and returns responses. This lesson walks through the request-response cycle, stateless servers and session management, the main client-server variants, and how to scale the server side.

Microservices Architecture

Microservices split a system into independently deployable services, each owning one business area and its data. This lesson covers service boundaries, communication, service discovery, fault tolerance, data management, the API gateway and observability, and when the cost of the style is justified.

Service-Oriented Architecture (SOA)

Service-oriented architecture reuses shared services across an organization through formal contracts, often over an enterprise service bus. This lesson explains SOA's eight principles, the bus, orchestration and choreography, how SOA differs from microservices, and when SOA still fits.

Event-driven Architecture

In event-driven architecture, parts publish events about what happened and other parts react without the publisher knowing who listens. This lesson covers event channels, delivery guarantees and idempotent consumers, choreography and orchestration, event sourcing, and when not to use events.

Pipe-and-Filter Architecture

Pipe-and-filter architecture passes data through a chain of independent processing steps, each with one job. This lesson covers the four filter types, how to build and run a pipeline, error handling between steps, and where the style appears in production, from compilers to data pipelines.

Microkernel (Plugin) Architecture

Microkernel architecture keeps a small, stable core and adds variable features as plugins. This lesson shows how to define the plugin contract, build plugins, a plugin registry and the core, discover plugins at startup, and judge where the style fits, from IDEs to payment platforms.

Hexagonal (Ports and Adapters)

Hexagonal architecture keeps business rules inside the application and reaches databases, user interfaces and outside systems only through ports the application defines. This lesson builds the domain, ports, use cases, adapters and composition root, and shows why the style makes testing easy.

Clean Architecture/Onion Architecture

Clean Architecture arranges code in concentric rings, entities, use cases, interface adapters and frameworks, with source code dependencies pointing only inward. This lesson builds each ring, maps Onion Architecture's names onto it, compares it with other styles, and shows its testing strategy.

Broker Architecture

In broker architecture, an intermediary receives each request, finds a server that can handle it and forwards it. This lesson covers the five core components, the message flow, service discovery, load balancing, fault tolerance, broker topologies, and where brokers appear in production.

Peer-to-Peer Architecture

In peer-to-peer architecture, every participant both requests and supplies resources, and peers talk directly instead of through a central server. This lesson covers the three generations of P2P, distributed hash tables, replication, NAT traversal, trust and security, and when the style fits.

Space-Based Architecture

Space-based architecture keeps working data in a replicated in-memory grid inside processing units and writes it to the database later, outside the request path. This lesson covers its four components, a request's path, replication and consistency, elastic scaling, failures, and when it fits.

Serverless Architecture

Serverless architecture runs small functions in response to events on a platform the cloud provider manages and bills only for the compute used. This lesson covers how a function executes, event sources, state and connections, the cost model, reliability and idempotency, and when serverless fits.

A Practical Architecture Decision Process

A good architecture decision starts from what users need, stated as measurable requirements, and from evidence rather than opinion. This lesson shows how to compare two designs by walking concrete change and failure scenarios through each one, and how to record assumptions and revisit conditions that someone can check.

Architecture Diagrams and Decision Records

The C4 model draws one system at several levels of detail, each for a different reader, and adds runtime traces and deployment diagrams for behavior and infrastructure. This lesson draws the food-delivery app at each level, extends the ADR form with options, assumptions and revisit conditions, and shows how ADRs live in a repository beside the diagrams and the code.

Architecture Reviews and Common Failure Patterns

This lesson shows how to review a running system against one measurable requirement, from reading and measuring to ranking findings by their effect and their cost to fix. It then teaches seven failure patterns that reviews find most often, how to detect each one and its smallest fix, and ends with a practice review.

Incremental Evolution and Strangler Fig

A running system can change in four ways of rising cost: keep the design, refactor inside the codebase, move work to background workers, or extract a service. This lesson shows how to pick the least costly option that meets a measured requirement, and how to plan a strangler fig extraction with staged routing, compatible contracts, verification, data movement and known rollback limits.

Capstone One: Review an Existing Application

Review a small part of the food-delivery backend, rank what you find, and refactor the workflow that places an order. You produce the refactored code, regression tests, before-and-after diagrams, and two ADRs that explain why a targeted change beats a rewrite.

Capstone Two: Design a New Learning Product

Design a new online learning platform for four engineers, a launch date 16 weeks away and modest traffic. You produce boundaries, contracts, data ownership, request flows, background jobs, failure handling, tests, diagrams, decision records and a launch plan, then compare them with a complete reference design.

Capstone Three: Respond to a Changed Requirement

Nine months after launch, the learning platform from Capstone Two receives four change requests backed by production evidence. You pick one, decide whether it is a traffic issue or a structural issue, compare keeping the design with a targeted change against a structural change, and produce a decision record, revised diagrams, migration steps and a rollback or repair plan.

What people say about our courses

Eric avatar
Eric
Software Engineer
I've completed my first pass of "grokking the System Design Interview" and I can say this was an excellent use of money and time. I've grown as a developer and now know the secrets of how to build these really giant internet systems.
Steven Zhang avatar
Steven Zhang
Software Engineer
Just wanted to say thanks for your Grokking the system design interview resource (https://lnkd.in/g4Wii9r7) - it helped me immensely when I was interviewing from Tableau (very little system design exp) and helped me land 18 FAANG+ jobs!
Ashley Pean avatar
Ashley Pean
Software Engineer
Check out Grokking the Coding Interview. Instead of trying out random Algos, they break down the patterns you need to solve them. Helps immensely with retention!
Simon Barker avatar
Simon Barker
Software Engineer
This is what I love about http://designgurus.io’s Grokking the coding interview course. They teach patterns rather than solutions.
Roger Cruz avatar
Roger Cruz
Software Engineer
The world gets better inch by inch when you help someone else. If you haven't tried Grokking The Coding Interview, check it out, it's a great resource!
Arijeet avatar
Arijeet
Software Engineer
Just completed the “Grokking the system design interview”. It's amazing and super informative. Have come across very few courses that are as good as this!

About the Author

Arslan Ahmad

Arslan Ahmad

Design Gurus Founder
Ex-FAANG Manager
Meta
Microsoft
Google
Amazon
Uber

Industry Expertise & Leadership

Arslan Ahmad is the lead author of Grokking Modern Software Architecture Styles. As the founder of Design Gurus and a former FAANG hiring manager, he has worked at industry giants like Facebook (now Meta) and Microsoft.

He has conducted hundreds of system design interviews, giving him unique insight into what top tech companies look for in candidates.

The course also incorporates expertise from senior engineers at Google, Meta, Amazon, Microsoft, and Uber, ensuring you learn system design best practices from professionals who have built and scaled real-world systems.

500+

Interviews Conducted

10k+

Students Taught

Related Courses

New
System Design Patterns: From Fundamentals to Real Systems
Learn the 60+ patterns behind every scalable system: from caching and sharding to AI-era infrastructure: through real incidents, everyday analogies, and honest trade-offs.
4.8
5.9K learners
Discounted price for Your Region

$75

Grokking Microservices Design Patterns
Master microservices design patterns for designing scalable, resilient, and more manageable systems.
4.1
14K learners
Discounted price for Your Region

$110

Grokking Design Patterns for Engineers and Managers
Unlock the power of design patterns: Elevate your coding skills with timeless solutions for top-notch software design.
4.2
5.7K learners
Discounted price for Your Region

$78

FAQs

The course is written for junior and mid-level software engineers who build and maintain backend systems and want to take part in structural decisions. It assumes three things. You know one programming language, you know what an HTTP request, response, and status code are, and you can read a SQL query. You do not need prior experience with distributed systems, message brokers, a cloud provider, or a framework. Every other term is defined in the lesson where it first appears.

No. The course teaches software architecture for daily work. You learn to recognize the decisions built into the system you maintain, propose a change in terms your team can check, and record the result. The lessons, capstones, and assessments are about building and changing real systems. If you are preparing for the system design round, Grokking the System Design Interview is the course for that.

The fifteen styles, each with its own lesson, are Monolith, Layered, N-Tier, Client-server, Microservices, SOA, Event-driven, Pipe-and-Filter, Microkernel, Hexagonal, Clean Architecture (Onion), Broker, Peer-to-Peer, Space-Based, and Serverless. The lessons fall into four groups. The first covers the basic structures of one application, and the second splits a system into services that communicate through calls or events. The third organizes code and processing, and the fourth addresses distribution and scale.

There is practice at three levels. Every style lesson ends with an adaptive assessment drawn from a question bank. Most questions describe a situation and ask which design or change fits it, and every option comes with an explanation. Two final assessments at the end of the course cover the fundamentals, the styles, and the decisions chapter. Many of their questions combine ideas from several lessons. Three capstone projects ask you to review and refactor an existing application, design a new product under fixed constraints, and respond to changed requirements. Each capstone gives a reference solution and a self-review rubric so that you can check your own work.

The code examples are written in Python, and most of them have Java, JavaScript, C#, and Go versions that you can switch to inside the lesson. The programs are small. Each one shows the parts of a style and how they communicate, such as monolith modules behind their interfaces or a producer and a consumer of events. A few lessons, such as Peer-to-Peer, rely on diagrams instead of code.

The three capstones end the decisions chapter and ask you to apply the whole course. In the first, you review the order workflow of the food-delivery app, rank its findings against one measurable requirement, and refactor it within a fixed budget of engineer-days. In the second, you design a new learning product for a team of four engineers with a fixed launch date, from constraints and contracts to deployment. In the third, you respond when that product's requirements change after launch, and you decide which changes need a structural answer. Each capstone states the task and its deliverables, then gives a reference solution and a self-review rubric. Complete the task before you read the solution, because comparing your own answer with it is where most of the learning happens.

The fundamentals lessons, and the decisions lessons up to the first capstone, use one running example: a food-delivery app with customer, restaurant, and courier apps that call one backend. The lessons return to that app and change one part of it at a time, so each idea builds on the one before it. You draw its boundaries, measure its quality attributes, choose between designs for it, and review its order workflow in the first capstone. The style lessons apply each style to other concrete systems, such as an online store, a payment system, or a concert ticketing site.

Grokking the System Design Interview prepares you for the system design round. It teaches a repeatable framework for answering an open-ended design question and works through real design problems such as a URL shortener or Instagram. This course is about the structure of the systems you build and maintain at work. It teaches each architecture style with its trade-offs, then the process of choosing, recording, and reviewing a decision on a running system. The two courses share vocabulary, such as microservices and event-driven design. This one shows the code inside the application, with decision records and capstones, and it is not organized around interview questions.

System Design Fundamentals teaches the building blocks that large systems are made from: load balancers, caches, CDNs, databases, partitioning, and replication. It also covers the ideas that tie them together, such as the CAP theorem. This course asks the next question: how the parts of an application are arranged, what each arrangement costs, and which decisions are expensive to change. It defines every infrastructure term it uses, such as message broker or read replica, so you can take it without the fundamentals course. Take System Design Fundamentals first, or alongside it, if you want each building block explained from the start.

Read the fundamentals lessons first, in order. Every style lesson judges its style by the measures they define: the quality attributes it improves or harms and the constraints it fits. Then read the style lessons in order, or open the lesson for a style your team is considering now and read the earlier lessons it refers to. Finish with the decisions chapter, complete each capstone before you read its reference solution, and take the two final assessments at the end. The course is self-paced, and the platform tracks your progress so you can return to any lesson.

The course is text-based. Every lesson is written, with diagrams wherever a picture explains more than a paragraph. The style lessons add short code examples and an adaptive assessment at the end. There are no video lectures, so you can read at your own pace and return to any section, such as a lesson's vocabulary list, whenever you need it.

You can choose between a lifetime access purchase for this course or an annual subscription that unlocks all current and future Design Gurus courses. Both options include a certificate of completion, which Design Gurus issues once you finish all course modules.

Recommended Blogs

40 White Papers for System Design and Software Architecture
40 free system design and software architecture white papers, grouped by topic, with what each one teaches and the order to read them in.
Design Gurus logo
One-Stop Portal For Tech Interviews.
About Us
Our Team
Careers
Partners
Contact Us
Become Affiliate
Copyright © 2026 Design Gurus, LLC. All rights reserved.