Software Architecture

How do you avoid making your project a big ball of mud? How do you balance a wide range of design concerns and constraints? How do you map customer requirements to working software? This course provides you with the means and methods to face these challenges.


Developers and architects who design systems or assume the role of the architect in a project 


A couple of years of development. Preferably in an object oriented language (Java, C#, C++). The course, however, is language and platform independent. 

Carl Mäsak - instructor of the course

Carl has extensive experience in software development and software architecture, both in active use, blogging, and teaching. He uses a variety of programming languages daily. Carl has worked in the software industry for the last 15 years. His experience spans over a wide range of paradigms and platforms, and he has developed everything from custom web site design and bioinformatics toolkits to grammar engines and compilers. His specialty is to make systems coordinate and systematize large amounts of heterogeneous data - or, more casual, "bringing order out of chaos." He also likes to heal major systems that are in need of an architect.

Course outline:

  • The Role of The Architect

    • Why design matters
    • Complexity
    • The architects place in the team.
    • Why architecture is hard.


    Getting feedback

    • TDD
    • Continuous Integration & deployment
    • Refactoring
    • Software metrics


    Domain Driven Design (DDD)

    • Bounded contexts
    • Ubiquitous language
    • Entity and value objects
    • Invariants
    • Aggregates


    Data Access Architecture

    • CAP theorem
    • ORM mapping
    • NoSQL databases
    • Polyglot persistence


    Event sourcing

    • State vs event sourcing
    • Building an event store
  • CQRS

    • Semantic operations
    • Read vs Write
    • The CQRS pattern
    • Commands and events
    • Write and read sides
    • Integration
    • Testing


    Architecture patterns

    • Sagas and process managers
    • Circuit breakers



    • Micro-services
    • REST APIs
    • Hypermedia
    • Creating scalable and reliable APIs
    • Webhooks
    • GraphQL



    • Container vs Virtual machines
    • Docker
    • Docker files & images
    • Serverless



    • The security challenges
    • Hacking your self
    • Social engineering
    • Securing your architecture



    • Authentication
    • Authorization
    • Tokens
    • OAuth
    • OpenID-Connect

Other relevant courses