architect-handbook

Software Architect Handbook

View on GitHub

Software Architect Handbook

UPDATE!: I will be updating this repository with a new structure that better supports Obsidian. This README won’t be updated anymore and it will reference content from the /legacy folder. I’ll iteratively move new versions of such content (and new stuff!) to ./READMEv2.md which will eventually become the main README and can be opened with Obsidian for better navigation.

What is software architecture?

System design

For a complete System Design study, you should also be familiar with Databases related topics such as CAP Theorem. This section assumes prior knowledge about such topics, but you can also read about those in this very same repo.

System Design - Case Studies

Problems Solutions
Instagram News Feed - Gaurav Sen Solution
Key-value store Solution
Unique ID generator in distributed systems Solution
URL shortener Solution
Web crawler Solution
Notification system Solution
News feed system Solution
Chat system Solution
Search autocomplete system Solution
Youtube Solution
Google Drive Solution

Design principles

Design patterns

What is a design pattern?

Base patterns

System-level or architectural patterns

Gang of Four Patterns

Please check the this repository for a detailed explanation and examples of each of the following patterns.

Creational Structural Behavioral
Abstract Factory Adapter Chain of Responsibility
Builder Bridge Command
Factory Method Composite Interpreter
Prototype Decorator Iterator
Singleton Facade Mediator
  Flyweight Memento
  Proxy Observer
    State
    Strategy
    Template Method
    Visitor

Domain logic patterns

Data source & persistence patterns

Object relational patterns

Behavioral patterns

Structural patterns

Metadata mapping patterns

Web presentation patterns

What are web presentation patterns?

Distribution patterns

Offline concurrency patterns

Session state patterns

Anti-Patterns

What is an Anti-Pattern?

Architectural Styles & Patterns

Recommended book: https://en.wikipedia.org/wiki/Pattern-Oriented_Software_Architecture

Three-Layer System (Martin Fowler)

Service Oriented Architecture (SOA)

Ports & Adapters / Hexagonal

Clean Architecture

REST: Representational State Transfer

Recommended reference: restfulapi.net

Flux & Redux

Domain-Driven Design

Overview

Microservices

Overview

Tools

Data storage

General concepts

Data Consistency

Data partitioning

Types

Relational Databases

Wide-column store

GraphQL

Software types

Although some techniques and patterns are relevant for all kinds of software, many are relevant for only one particular branch.

Operating systems

Linux

Refactoring & code smells

Programming paradigms

Structured programming

What is structured programming?

OOP: Object-oriented programming

Functional programming

What is functional programming?

Software Engineering Culture

Laws & Theorems

Working Methodologies

Testing

E2E Testing

General concepts

About system-design and architecture

About software engineering

Common jargon

Tooling - Language Agnostic

Technology specifics

Frontend

Frontend developer roadmap.