Lean Architecture and DCI concepts

Source code and architecture should reflect the end user mental model of the world

Enage all stakeholders to get a cross-functional team from the start to get insight and be able to defer decisions to the (last) responsible moment

Design-by-contract gets us closer torunning code even faster

Domain model can be build in a coupleof weeks using abstract base classes

Lightweigh use cases capturessystem functionality

Use case scenarios are implementedas traits/rolemethods/mixins

We go to the code for what and how, but only the authors or theirdocumentation tell us why

What the system is vs. what the system does

Is relates to form/architecture

Does relates to functionality

Lean Principles

Focus on long term results

Everyone has to participate

Code just in time

Continues flow

Software architecture should support the enterprisevalue stream

Agile is about doing. Lean is about thinking before doing (to reduce waste)

Rework during production is waste

Rework in design saves costly rework in production

The hard part of design is the partitioning of a systeminto modules and collections of related APIs

Waiting is waste

Documentation is for communication AND to remember perspectives and decisions

Define the problem: The difference betwen current state and the desired state

First phase

Screen design to ensure a usable system

Input to domain model to scope the domain

Use case, to organize the timing of responsible decisions

Creating code that follows users mental modelavoids having to make uses cases for every possible variation