Thierry poses a question I've heard in several of my PM workshops this week and last week: When should the team do the architectural work?
Thierry's concerned if his team continues to implement by feature, how can the team do the architectural work? If they take an iteration or two to deal with architecture, they stop churning out features. And, Thierry has an additional problem–his new module could be a stand-alone feature. But he has some other alternatives:
- Implement three features and see where the architecture is going. If the team implements three relatively independent features, it may be clearer where the architecture is evolving. Once you see the evolution, maybe you can spend a short timebox (couple of days?) to define the architecture big picture, and let it continue to evolve within the framework the team has defined.
- If trying some features doesn't work, prototyping several architectures might. When you prototype, you don't have to have releasable software; you just need enough to evaluate the architecture. If you prototype, maybe you don't have to take the whole team to do so, and they can still be making progress.
- Develop tests for the architecture. Get enough of the team in one room, have someone facilitate the discussion, and generate the questions/assessments/tests you'll need to use to know whether an architecture will work.
- Timebox the architecture development. Spend a day or two (I would definitely not spend more than a week) developing an architecture on paper, and then start implementing some features so I could see if I got it right.
I'm sure there are more options and I can't think of them now.
If you do take time to do some architectural work, make sure it's as little design up front, so you can test the architecture by implementing more features. Any time you do incremental development, you do run the risk of not realizing the architecture is sufficient until later in the project. But that risk is mitigated by having significant parts of the product already working.
Labels: architecture, incremental development