Socio-technical Systems Design

People, teams, technology, domains and evolution over time.

Why?

Over the last few decades, software teams have faced unprecedented expectations to scale system capacity, complexity and organisation size.

Fuelled by vendor hype, a series of technology-led 'solutions' to these challenges have taken the industry by storm in a boom and bust cycle that inevitably ends in frustration.

This course focusses on fundamental principles and design strategies for socio-technical systems and will help you:

  • Align Technology, Business & Product Strategies
  • Build reliable & scalable socio-technical systems
  • Prepare your teams and technology for growth and change
  • Understand why many fad approaches have failed
  • Effectively assess the tradeoffs and risks of new ideas
Addressing Challenges

If your teams are struggling with any of the following challenges, you will benefit from the perspectives, insights and practices taught on this course:

  • Load, performance & scalability issues
  • Availability issues
  • Work frequently requiring co-ordinating multiple teams
  • Teams wasting time waiting for other teams to address requests
  • Teams unable to deploy independently
  • Difficulty realising the product vision
  • Data siloed and inaccessable
  • Shared data misused due to loss of semantic context

What?

This training course addresses socio-technical systems design holistically, using Kruchten's 4+1 Views as a scaffold.

The 4+1 Views are:

🟢 The Logical View - representing the business domain

🔵 The Process view - representing the runtime ('process' means executable program)

🟤 The Physical view - representing the execution environment for processes and inter-process communication

🟣 The Developer view - representing the code, org structure and work-management approach

🟡 The Scenario view - tying it all together by illustrating the the way the different views map onto each other, and how sequences of operations are embodied by the activity in components in each of the other views.

Many of the challenges referenced above are related to misalignments between the views - e.g. the Logical view is frequently left unexamined leading to tight coupling between runtime components affecting performance, availability and team autonomy.

This course will explain how to design systems in each view, how to align the views, and how to scale each view independently to ensure effective and efficient scaling decisions for technology & teams.

How?

Module 1 - Getting Started

Course overview, system access, goal setting

Module 2 - Introduction to Systems

Systems, Socio-Technical Systems, Design vs Architecture, 4+1 Views Scaffold Overview

Module 3 - Logical View

Domain-Driven Design, Service-Oriented Architecture & Event-Driven Architecture

Module 4 - Process View

Concurrency, Deployment Units, Run-time Dependencies

Module 5 - Inter-Process Communications

APIs & Messaging, Commands & Events, Queues vs Streams, Sync vs Async, API & Data Products

Module 6 - Physical View

Load & Capacity Planning, Infrastructure & Networks

Module 7 - Developer View

Repository & disk Layouts, enforcing modularity, team structures, autonomous teams

Module 8 - Scenario View

CI/CD Pipelines, composite processes, observability

Module 9 - Service Extraction

Strangler Fig pattern, Identifying Async boundaries, Aligning with Customer cohorts

Module 10 - Open Space

Q&A, Revisiting complex topics, explore business challenges, further reading

Schedule Options

Weekly 3 Hours

6 weeks
1 x 3hr session per week

Weekly 1.5 Hours

12 weeks
1 x 1.5hr session per week

Intensive

3 days
2 x 3hr sessions per day

Notes
  • Schedule can be tailored to suit team availability