Interesting Article from Scott Ambler on Scaling Agile Development Via Architecture
"Every system has an architecture, even systems developed using agile methodologies. Whether you attempt to define that architecture up front in detail or whether it emerges over time is up to you. My experience is that most agile teams follow a strategy somewhere between these two extremes, one that involves investing a bit of time up front to think through the "big issues" but which addresses the details on a just-in-time (JIT) basis. That strategy, combined with proving your architectural ideas as soon as possible through working code, results in a very agile and low-risk approach to system architecture."
Agile Architecture Strategies
- Focus on collaboration over documentation. "Agile architects" are … not simply people who document their vision and hand it off to developers.
- Prove it with code. Everything looks good on a whiteboard, or in a modeling tool.
- Keep it simple. Agile software developers model … in ways which are very different than traditionalists.
- Use the simplest tools. … free form diagrams, … simple sketches …
- Think through the big issues up front.
- Think through the details just in time. … "model storm" focused issues on a JIT basis.
- Allow good architectures to emerge over time. … the fact is that the details will emerge as your system evolves to meet the changing needs of your stakeholders.
- Travel light. Remember Agile Modeling’s They Ain’t Gonna Read It (TAGRI) advice.
- Have a few overview diagrams. Just like a road map overviews the organization of a town, your navigation diagram(s) overviews the organization of your system.
- Be flexible. … the nature of the project will help to define the types of views that you should consider creating.
- Display models publicly. Distributed teams find that a Wiki with snapshots of diagrams and point-form text works well.
- Take a requirements-driven approach. Your architecture must be based on actual requirements put forth by your stakeholders, otherwise you are "hacking in the large."
- Model with others. By working collaboratively you will create a higher quality product, will develop a shared vision, and will learn from one another.