Software Architecture: The Hard Parts (1 Day)

Format: Live Virtual Training
Duration: 1-Day Class

Software architects have no clean, easy decisions: everything is a terrible tradeoff. Architecture has lots of difficult problems, which this platform-agnostic class highlights by investigating what makes architecture so hard. This hands-on, platform-agnostic architecture class goes beyond the fundamentals of software architecture and focuses on the really hard problems. This class focuses primarily on aspects of distributed architectures and on areas surrounding modularity versus granularity, the challenges of event-driven architectures (including difficult error handing issues), distributed architecture patterns and how to decouple services to achieve proper granularity. Architecture is full of hard parts; by attending this workshop you can gain the insights and techniques to make it just a little softer.

This class is divided into 2 main parts:

  • Part 1: Pulling Things Part (Modularity and Building Blocks)
  • Part 2: Putting Them Back Together (Patterns and Tradeoffs)

Pulling things apart (Part 1) focuses on how to break up systems and identify levels of modularity. However, once you’ve broken apart your systems, how do you tie them back together?  Putting them back together (Part 2) focuses on just this - the techniques of how to do orchestration, workflows, and transactions, while keeping parts decoupled from one another.

For more information about the pricing and availability of this course for private (corporate) training, please contact me at info@developertoarchitect.com. For public training offerings for this course, please see my public schedule at my upcoming events page. 


Public Training Dates
See the Public Course Schedule page for scheduled dates for this class


Course Agenda (1-Day Virtual Class)

Part 1: Pulling Things Apart (Modularity and Building Blocks)

Architectural Modularity

  • Modularity vs. Granularity
  • Drivers for Modularity

Components as Architecture Building Blocks

  • Component Definition
  • Coupling Types
  • Connascence
  • Connascence Properties
  • Abstractness vs. Instability (Main Sequence)
  • Component Cohesion 
  • Modern Connascence

Architecture Quantum

  • What is an Architectural Quantum?
  • Why are Quanta so Important to Architecture? 
  • Examples of Architecture Quantum

Architecture Kata Exercises #1 - Breaking Apart The System

  • Identify Architectural Quantum

Modularity vs. Granularity

  • Determining The Right Level of Granularity
  • Service Granularity Drivers 
  • Service Granularity Factors

Architecture Kata Exercises #2 - Identifying Services

  • Identify Service Candidates
  • Determine Service Granularity Level

Breaking Apart Data

  • Drivers For Separating Data
  • Factors Impacting Data Separation

Architecture Kata Exercises #3 - Data Ownership and Bounded Contexts

  • Identify Data Domains 
  • Determine Data Ownership
  • Create Bounded Contexts


Part 2: Putting Them Back Together (Patterns and Tradeoffs)

Synchronous vs. Asynchronous Communication

  • Quantum Separation
  • Messaging For East-West Communication
  • Leveraging Queues For Back Pressure
  • Leveraging Publish-Subscribe For Extensibility

Contract Management

  • Consumer-Driven Contracts
  • Value-Driven Contracts
  • GraphQL
  • Schemas

Architecture Kata Exercises #4 - Contract Types

  • Identify Contracts Between Quanta
  • Analyze Tradeoffs

Data Access and Data Sharing Strategies

  • Interservice Communication
  • Data Replication
  • Replicated Caching
  • Data Domains

Architecture Kata Exercises #5 - Data Access Techniques

  • Identify Data Access and Data Sharing
  • Analyze Tradeoffs

Orchestration and Workflow

  • Differences Between Orchestration and Choreography 
  • Choreography Examples 
  • Orchestration Examples
  • Workflow Patterns and Sagas

Architecture Kata Exercises #6 - Orchestration and Workflow

  • Identify Workflow Patterns Between Services
  • Choosing Between Orchestration and Choreography

Class Summary

  • Final Words of Advice
©2020 DeveloperToArchitect