In a recent talk on architecture vs. agile development, Philippe Kruchten presented a simple but compelling message:
Software Architecture is about anticipation of what is to come.
Agile Development is about adaptation in response to change.
These two often seem to be at odds, but they are not. Anticipation and adaptation are not simply two principles at opposite ends of a scale. I would rather think of them as two sides of the same coin. You can only look at one side at the same time. But they come together, as a pair. You cannot have one without the other, or you will have a bad coin. Or a bad project...
Anticipation and Adaptation
This week I had anticipated to drive to my partner in Brussels on Friday night. But he got sick (chickenpox) so I adapted by canceling some meetings and joining him two days earlier. I had anticipated to write this blog entry yesterday night in Rotterdam, but due to my new plans I adapted my schedule and wrote it a day later in Brussels. I anticipated that I am immune to chickenpox (I already had it as a child), but if I get sick again... oh well, I will simply have to adapt.
We would not be able to do anything if we couldn't anticipate. We would not dare to sign a contract with a deadline in it; we would not be willing to choose a platform and programming language; and we would not be able to get the first version of the backlog on the wall.
Anticipation is what makes us move forward.
We would also not be able to be successful if we couldn't adapt. We would not care to change features in order to make the deadline; we would not dare to refactor to better designs; and we would not be comfortable publishing that altered second version of the backlog on the wall.
Adaptation is what makes us change course.
In order to get where you need to be, whether in Rotterdam, in Brussels, or anywhere else in life, you have to anticipate and adapt. You must dare to make decisions and be ready to change them later. You have to make assumptions and be ready to face the consequences. You must join your sick partner and be willing to sleep on another floor.
Comments
Another perspective on architecture
June 24, 2008 by Ilja Preuß (not verified), 15 weeks 5 days ago
Comment id: 1602
I like Martin Fowler's definition of architecture: architecture is about those things that are hard to change, and therefore must be decided upon early. When using that definition, I think it's actually fair to say that Agile Software Development strives to minimize architecture.
Hi Ilja, I don't think I can
June 24, 2008 by JurgenAppelo, 15 weeks 5 days ago
Comment id: 1607
Minimizing isn't eliminating
June 24, 2008 by Artem, 15 weeks 5 days ago
Comment id: 1611
But that is architecture too
June 24, 2008 by JurgenAppelo, 15 weeks 5 days ago
Comment id: 1613
Jurgen, I think you missed...
June 26, 2008 by Ilja Preuß (not verified), 15 weeks 3 days ago
Comment id: 1621
the part about "When using that definition" - by Martin Fowler's definition, a "flexible architecture", that is, an architecture that is easy to change, is an oxymoron. See his article at http://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
Post new comment