Agile Architecture Principles

2019 05 01 head

You are applying the agile, lean approach to your software product development. Your teams use Scrum or Kanban to deliver running software every two weeks. The product market introduction is a success. You will successfully sell the solution for the next ten years.

How shall you define the software architecture of your product and ensure a long-living and high-quality solution?

The experts tell you the design is emergent.

What does it mean?

LeSS Architecture Observations

The following observations are true for any software product. It is irrelevant if developed using agile approaches or traditional older ones.

  1. The sum of all source code artifacts is the true design blueprint or software architecture.

  2. The real software architecture evolves (better or worse) every day of the product, as people do programming.

  3. The real living architecture needs to be grown every day through acts of programming by master programmers.

  4. A software architect not being in touch with the evolving source code of the product is out of touch with reality.

  5. Every programmer is some kind of architect — whether wanted or not. Every act of programming is some kind of architectural act — good or bad, small or large, intended or not.

Agile architecture comes from the behavior of agile architecting

  • Hands-on master-programmer architects, a culture of excellence in code,

  • Van emphasis on pair-programming coaching for high-quality code/design,

  • Agile modeling design workshops,

  • Test-driven development and refactoring,

  • And other hands-on-the-code behaviors.

Quality of Your Architecture

You shall measure the quality of your design and produce software artifacts.

  • Static analysis tools to validate your source code,

  • Test driven development to validate your design,

  • Acceptance test driven development to validate your functional requirements,

  • Fitness functions to validate your non-functional requirements,

  • Pair programming to improve the produced artifacts through wisdom of the crowd,

  • Pair review and pull requests to validate your developers' work.

The above validation activities are backed through tools. But these tools can only detect non-quality and never provide proof you achieved quality. Qualified and experienced engineers are your best guaranty to achieve and sustain high quality in architecture and software products.

Implement the above measures to gather data and publish the actual state of your source code. You find further information in Code Scene as Crime Scene, SonarLint for the Impatient, and Pragmatic Craftsmanship articles.

Read the LeSS architecture page for a comprehensive discussion of agile architecting.

Good versus bad architecture

A good architecture fulfills the specifications and is easy to change.

It shall emerge during the development and intentionally implement the known requirements.

Your architects are talented developers and are full members of your Scrum teams.

Your development teams

  • are experts in the used programming language and stack.

  • understand object-oriented, functional, and rule-based programming.

  • know all major patterns and idioms of the used development stack.

  • practice TDD, ATDD, clean code, refactoring, embrace CI/CD and DevOps.

  • read source code from open source projects to learn better ways.

  • know SMART, INVEST, SOLID, KISS, YAGNI.

  • hold weekly design workshops with huge whiteboards.

  • use domain driven design and event storming.

  • avoid BDUF.

You shall keep it simple, make it valuable, and build it piece by piece.

The above hints and practices shall empower your teams to practice successfully agile architecture and timely deliver delightful software solutions. Your organization shall train your collaborators, see also the Shu Ha Ri model. Smart money goes in training your collaborators.

Agile Architecture Series

The agile architecture track contains the following blogs

We also published our agile architecture course (3 ECTS) used for teaching computer science students at bachelor level at Swiss technical universities.