System Design Workshop December 2021
System Design Workshop for software architects and other system designers . These will all have async work co-ordinated over Slack, and in-class work, co-ordinated over Zoom, on:
- December 8-10 and December 15-17, 8 am - 12 pm Eastern Time ( 6 x 4 hr sessions)
Overview We work in small teams on creating a draft architecture, and lecture topics are driven by the concerns that are being addressed as we do so. This allows us to work on shaping a system design, moving from exploring the system concept to architectural definition, weaving guidance, discussion and practice. As we iterate through architecture design with its trade-offs, decision making, modeling and specification, we grapple with:
- system design: systems concepts, uncertainty and complexity, context, framing, constraints, forces and trade-offs.
- system capabilities and properties: understanding needs/concerns and designing system capabilities and system properties including run-time qualities such as scalability and reliability, and development-time qualities such as evolvability/extensibility.
- architectural patterns: structural patterns such as layers, hexagonal architecture, and microservices, and mechanisms that may be architecturally significant in various contexts.
- systems and architecture modeling including an introduction to (just enough, as relevant) Unified Modeling Language (UML) and C4, but drawing on other templates and modeling as appropriate to the design stage and its decision focus.
- architectural views: structural views help document and communicate the architecture in terms of the components and their relationships, and are useful in assessing architectural qualities like extensibility. Behavioral views are useful in thinking through how the components interact to accomplish their assigned responsibilities and evaluating the impact of what-if scenarios on the architecture. Behavioral views are especially useful in assessing run-time qualities such as performance and security. Execution views help in evaluating physical distribution options and documenting decisions.
- component specification, interfaces and APIs: components are identified and assigned responsibilities, and interfaces are designed.
- key architectural design principles and heuristics, including abstraction, separation of concerns, postponing decisions, and simplicity, and related techniques such as interface hiding and encapsulation, as well as system decomposition principles, factoring and refactoring, and good interface design.
- architecture improvement: we pause periodically to consider what it means to improve and evolve systems and their design, and why, when and how to do that.
Instructor: Ruth Malan
More information: www.ruthmalan.com