My thoughts on upfront architecture and iterative development

Long ago, I was attending this training program on Software design and architecture. A very respected Architect was talking about upfront design. He was trying to illustrate the fact that upfront design was very critical and you should always design upfront keeping performance & extensibility in mind. He was giving analogy with the foundation of building which goes like this:

“If you build a five story building, you will never be able to extend it by another 5 story. So you should always prepare for worst”

… At that time, I agreed completely with him. After all, you can’t really extend a building that doesn’t have enough foundation for it, right !

About 5 years later and a couple of completely failed and successful project experience under my belt, I beg to differ. I have seen so many analogy with building houses to developing software! Is it because of Christopher Alexander and his influence in “Design Patterns”? Now a days, I find many of these analogy to be irrelevant, Because, “Software Development is not the same thing as Developing high rise Buildings! Period. “.

Have you ever been in a situation where you did foundation for a 10 story Building and after finishing the first two floor, you realize its not a House you want to develop, its an Airplane that is actually required ! Or even better, after developing a 10 story building, no one wants to live in that area?

Unless you are working on projects like “Facebook-Chat” where you know on the first day of release, you are going to get a million hit, It is always best to take the simple approach first. This is why I love Agile and Lean process. You do only what is necessary and when its necessary. In agile, we are always prepared to refactor, re-evaluate architecture, scrap the existing foundation if it doesn’t work.

Advertisements

One thought on “My thoughts on upfront architecture and iterative development

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s