Skip to content

Software Design and Architecture Roadmap

  • Roadmap: https://roadmap.sh/software-design-architecture

1. Clean Code Principles

  • 1.1 Be consistent
  • 1.2 Meaningful names over comments
  • 1.3 Indentation and Code Style
  • 1.4 Keep methods / classes / files small
  • 1.5 Pure functions
  • 1.6 Minimize cyclomatic complexity
  • 1.7 Avoid passing nulls, booleans
  • 1.8 Keep framework code distant
  • 1.9 Use correct constructs
  • 1.10 Tests should be fast and independent
  • 1.11 Organize code by actor it belongs to
  • 1.12 Command query separation
  • 1.13 Keep it simple and refactor often

2. Programming Paradigms

  • 2.1 Structured Programming
  • 2.2 Functional Programming
  • 2.3 Object Oriented Programming

3. Object Oriented Programming

3.1 Primary Principles

  • 3.1.1 Inheritance
  • 3.1.2 Polymorphism
  • 3.1.3 Abstraction
  • 3.1.4 Encapsulation

3.2 Paradigm Features

  • 3.2.1 Abstract Classes
  • 3.2.2 Concrete Classes
  • 3.2.3 Scope / Visibility
  • 3.2.4 Interfaces

4. Design Principles

  • 4.1 SOLID
  • 4.2 DRY
  • 4.3 YAGNI
  • 4.4 Law of Demeter
  • 4.5 Tell, don't ask
  • 4.6 Hollywood Principle
  • 4.7 Composition over Inheritance
  • 4.8 Encapsulate what varies
  • 4.9 Program against abstractions

5. Design Patterns

  • 5.1 GoF Design Patterns
  • 5.2 PoSA Patterns

6. Architectural Principles

  • 6.1 Component Principles
  • 6.2 Policy vs Detail
  • 6.3 Coupling and Cohesion
  • 6.4 Boundaries

7. Architectural Styles

  • 7.1 Event-Driven
  • 7.2 Publish-Subscribe
  • 7.3 Messaging
  • 7.4 Client-Server
  • 7.5 Peer-to-Peer
  • 7.6 Distributed

7.7 Component-Based

  • 7.7.1 Monolithic
  • 7.7.2 Layered

7.8 Structural

8. Architectural Patterns

  • 8.1 Domain-Driven Design
  • 8.2 Model-View Controller
  • 8.3 Microservices
  • 8.4 Blackboard Pattern
  • 8.5 Microkernel
  • 8.6 Serverless Architecture
  • 8.7 Message Queues / Streams
  • 8.8 Event Sourcing
  • 8.9 SOA
  • 8.10 CQRS

9. Enterprise Patterns

  • 9.1 DTOs
  • 9.2 Identity Maps
  • 9.3 Usecases
  • 9.4 Repositories
  • 9.5 Mappers
  • 9.6 Transaction Script
  • 9.7 Commands / Queries
  • 9.8 Value Objects
  • 9.9 Domain Models
  • 9.10 Entities
  • 9.11 ORMs

10. Model-Driven Design

  • 10.1 Domain Models
  • 10.2 Anemic Models
  • 10.3 Domain Language
  • 10.4 Class Variants
  • 10.5 Layered Architectures