Of coarse architecture emerges. But is architecture that emerges as good as what it could be if initial planning had taken place? I decided to experiment. Usually, when starting a brand new project, I do an analysis of the business requirements and create a use case model. I did. I used the use case model to define Feature Groups for the product. Then I usually design an analysis model to give the ensuing object interactions structure. I didn’t. All I did was define a couple of simple architectural constraints: 1) It has to use web forms in .NET 4.0 because that is what we are familiar with and I wanted to get the first release out as fast as possible, 2) it has to use the existing Salt Productions security infrastructure for the same reason and 3) the presentation tier has to be decoupled from the business tier so the UI can be replaced fairly easily because no one on the product team is Strong(ER) in User Experience – yet.
That’s it. Coding started in Sprint 1 with a Product Backlog of about 20 stories of various sizes and a use case model of 6 use cases. So what happened? At the beginning of the first two sprints, I did JIT design for the current stories using my trusty whiteboard. At the end of Sprint 1, I had the chance to do some refactoring but at the end of Sprint 2 there were a couple tough defects that consumed any time that could have been used for refactoring. So I really don’t like what I see. It’s not as elegant as it could have been had I imagined the individual components and their imminent conversations upfront. I mean I am really good at that! Futuristic Strategic Maximizer Adaptability Ideation plus 20 years of combined training and experience have made me Strong(ER) in application architecture.
Change is hard… but it’s early yet so the verdicts still out.