Skip to content

Anticipation vs. Adaptation

June 19, 2008 by JurgenAppelo

Coins 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

Hi Ilja, I don't think I can agree on that. Agile Software Development does not strive to minimize architecture. Because if you follow that line of thought, then the "best" project would be one *without* architecture. That would be silly. Every product has architecture. It's a matter of making those architectural decisions as *late* as possible. That's definately not the same as *not* making those decisions.

Minimizing isn't eliminating

June 24, 2008 by Artem, 15 weeks 5 days ago
Comment id: 1611

I don't think it is that straight. Ideal agile project would indeed be the one without architecture, because it would be possible to remake all the changes instantly. But since we live in the non-ideal world we just strive going to this target. IMHO a lot of SW industry development goes along the lines of making it possible to simplify changes (i.e. minimize the need for hard-to-change architecture). Object orientation, dynamic languages, unit-testing - all contributes to the ability to change architecture easily. Eliminating architecture might never be possible, but it is easier to adapt is your architecture is lightweight, while still strong.

But that is architecture too

June 24, 2008 by JurgenAppelo, 15 weeks 5 days ago
Comment id: 1613

"Object orientation, dynamic languages, unit-testing - all contributes to the ability to change architecture easily" In my opinion you are mentioning different architectural solutions to have a flexible architecture. It takes architecture to enable a flexible architecture. Any line of code that you add to enable an agile architecture is by definition a piece of the architecture.

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

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <b> <i> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <br> <blockquote>
  • Lines and paragraphs break automatically.
  • Web page addresses and e-mail addresses turn into links automatically.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]".

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.