The rhythm of Agile software development is to always be working on the next known, small batch of work. Is there a place for software architecture in this style of development? Some people think that software architecture should simply emerge and doesn’t require ongoing attention. But it isn’t always prudent to let the software architecture emerge at the speed of the next iteration.
Complex software systems have lots of moving parts, dependencies, challenges, and unknowns. Counting on the software architecture to spontaneously emerge without any planning or architectural investigation is at best risky.
So how should architecting be done on agile projects? It varies from project to project. But there are effective techniques for incorporating architectural activities into agile projects. This talk explains how architecture can be done on agile projects and what an agile architect does.
[youtube Oyt4Ru7Xzq0]
Video producer: JDD Conference
“Some people think that software architecture should simply emerge and doesn’t require ongoing attention.”
No, they don’t. Emergent architecture is not about letting stuff happen without paying attention. Quite the opposite.
The idea of emergent architecture is to build the simplest solution that solves the customer’s problem. One that is thoroughly tested, clearly written, and contains a minimal number of parts. To do that we need to avoid, as long as possible, pulling in dependencies that we don’t need at this exact moment.
Every architectural decision you make today limits your options tomorrow. Decisions that effect the architecture will arise, but we defer them to the last responsible moment. The last responsible moment is the moment when not making a decision becomes a decision (e.g. if I don’t pull in the web framework now I will have to write it myself.)
Adam is right: you must pay attention to architecture on any project. Adam is wrong: there are far too many people who believe architecture can just happen. I see it and read about it everywhere. Its not just about adding value with working code; the code has to be maintainable (unless the goal is a throwaway). We must work harder to educate and communicate how to apply techniques correctly, because far to many people dive inwithout thinking.