This page is a work in progress and not meant to be complete. A chapter in our forthcoming book Lean Software Development: Scaling Agile to the Enterprise will cover this topic to some extent. Note: Many links on this page require you to be registered with the web-site to see them.
It is intended for those looking for insights into the role of architecture in the Lean-Agile world. At the moment, it is a collection of webinars and articles on the Net Objectives' resources section that are of value in understanding this topic.
Here are some quotes from our Lean Software Development course:
- The purpose of architecture is to minimize the effect of changes. This can be done through a combination of decoupling (isoaltion), encapsulation, and avoiding redundancy
- Creating an architecture too son has the following risks:
- Over-building the architecture leads to complexity
- There is a temptation to trust the architecture instead of code quality (which always needs to be maintained)
- The purpose of software architecture is not to define the place for the pieces as much as it is to separate the dependencies of the pieces
- Design Patterns give us guidelines on this and actually give principles, tools/insights that create architectures as new requirements/variations are introduced to a system
- The purpose of architecture is not to build a framework within which all things can nicely fit
- It is to define the relationships between the major concepts of the system so when they change or new requirements emerge the impact of the changes required are limited to local modifications.
A quote from Mary Poppendieck:
Creating an architectural capability to add features later rather than sooner is good. Extracting a reusable services "framework" for the enterprise has often proven to be a good idea. Creating a speculative application "framework" that can be configured to do just about anything has a track record of failure. Understand the difference.
Guidance In Building Agile Architectures
This section is a collection of resources on the Net Objectives web-site that can help you in building agile architectures.
Commonality-Variability-Analysis. This is a power technique to create a high-level conceptual architecture of an application. Basically, it is a way of identifying the concepts present in a problem domain very quickly. In a six month project this can typically be done fairly well in a day or two.
The Analysis Matrix and the Abstract Factory. This webinar describes how Commonality-Variability-Analysis can map into design patterns.
Avoding Over and Under Design in Agile Proejcts. This webinar describes a balanced approach to design that avoids the chaos an dlow quality of no design as well as the over-complexity of over design. In particular, it describes the powerful agile design technique of "refactoring to the open-closed."
Emergent Design: The Evolutionary Natore of Professional Software Development. This webinar examines the principles, practices, and disciplines which allow you to evolve a design over time. An overview of part of Scott Bain's excellent book of the same title.
Design Patterns in an Agile Environment. This webirelates an actual project where quality coding techniques were used to manifest the Lean principles of optimzie the whole, deliver fast, defer commitment, build quality in and create knowledge. This session covers:
- Using encapsulation to defer commitment
- The need for risk mitigation in picking stories
- How to decide what stories to work on when focusing on customer value can't guide you