Recently there has been some discussion among some of my peers about the software design process. Particularly in and around Agile and if/where Architecture fits in. One argument is that with Agile, the Architecture is dictated by the Stories as they play out, other’s say that you can’t have both.
There are many ways to create software. They each have their intended ‘audience’. I use the term ‘audience’ because each software development technique was developed with a particular target developer type in mind. Now mind you, I’m used to being flamed in both email and face to face. I just tell it like it is.
So back to the discussions. Architecture happens. (Sounds like a good bumper sticker or tee-shirt). Whether you intend it or not. So really the question is what comes first? If your code comes first and your Architecture ‘evolves’, then you have no real control over it. If your Architecture comes first, your code will fit the architecture. That’s the rub. Agile methods say that the code drives the development, not the other way around.
People often compare developing systems to building houses. If so, then the Agile technique would have the builders framing out the bathroom before the slab was poured. Sounds crazy doesn’t it?
So let’s get to the truth. All software must spring from a need or a purpose. That purpose should then help you to envision a solution. You can then break that vision down into requirements or goals. Those requirements form the boundaries for your system. Next comes the Architecture. This Architecture ensures that the requirements and goals are met. Then the Architecture breaks down into Design and the Designs break down into code. Contrary to the Agile folks, there is no waste here.
So many of my peers were wrong. Code doesn’t come first. Architecture doesn’t come first. Even the Vision doesn’t come first. The need comes first. Our purpose is all about meeting a need or fulfilling a purpose. Architecture is the technique that we used to ensure that we meet that need or fulfill that purpose.
Case closed. Or is it…
Next time: we talk about where performance considerations should come in. Stay tuned!