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.

Audience:

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

Prerequisites:

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

     

    Services

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

     

    Containers

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

     

    Security

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

     

    Identity

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

Other relevant courses