Architecture with Agility

Arkitektur & Design Agile

Every system has an architecture, whether accidental or intentional, and regardless of whether it was put in place by a nominated architect or whether it emerged from the decisions and discussions of a team. All too often the focus of what is often described as architecture is centred around a specific set of platform technologies, which forms only one part of the set of concerns an architecture should. And all too often architecture is seen as a separate concern from development process, whereas the two are intertwined — what you build is influenced by how you build it, and vice versa.

The Architecture with Agility course looks at the relationship between Agile processes and good architecture, taking in development process models, architectural styles, requirements techniques, sufficient modelling techniques, design patterns and testing practices. This course includes a number of practical exercises so that attendees can see how the different activities fit together. There is also plenty of opportunity for discussion.

OBJECTIVES

  • Outline the relationship between development process and architecture
  • Appreciate the roles and failure modes of testing, modelling and technology platforms
  • Explore different architectural styles and design patterns
  • Try out concepts and practices in a series of exercises

AUDIENCE

Software architects and lead developers looking to both broaden and sharpen their skills in the disciplines touched on by software architecture, not just specific technologies.

LECTURE CONTENT

Software Architecture

  • The scope of architecture
  • Significance of design decisions
  • Architectural knowledge
  • Reactive design

Development Process

  • Value–driven versus risk–driven approaches
  • Sequential versus iterative and incremental
  • Visualising progress
  • Deming's Plan–Do–Study–Act (PDSA) cycle
  • Agility
  • Lean thinking

Architectural Expression

  • Vision and communication
  • Architectural viewpoints and properties
  • Use cases and user stories
  • Documentation, tests and code
  • Models and Modelling
  • System context

Development Practice

  • Feedback
  • Exploration and prototyping
  • Reviews
  • Testing as learning
  • Test-driven development (TDD)
  • Sufficiency versus overdesign
  • Simplicity and usability

Patterns

  • Recurring designs
  • Context dependency
  • Lone patterns
  • Combining patterns
  • Pattern stories and pattern languages
  • Pattern examples and counterexamples
  • Architectural Styles

Execution Architecture

  • Optimisation and pessimisation
  • Cross–cutting concerns and emergent qualities
  • Physical considerations
  • The effect of concurrency and distribution

Dependency Management

  • Partitioning and organisation
  • External dependencies
  • The dependency horizon
  • Partitioning with respect to uncertainty and change

Refactoring and Re-engineering

  • Continuous improvement
  • Kinds of changes
  • Decremental development
  • Smells and technical debt
  • Refactoring, re-engineering and rewriting

PRACTICAL CONTENT

Exercises

  • Define scope of software architecture
  • Explore interaction of interruption of and progress
  • Identify consequences of intentional and accidental design decisions in attendee projects
  • List risks and challenges in actual and example projects

Tid

09:00 - 16:15

Emner

Software Architecture

Development Process

Architectural Expression

Development Practice

Patterns

Execution Architecture

Dependency Management

Refactoring and Re-engineering