Information Technology Blog

Tuesday, November 08, 2005

Complexity; Software Architecture


This is a very much beaten up topic and often a cause of confusion. Software Architect is not totally unlike a traditional, structural Architect. I was biking to work today by a construction site; the guys were running around creating a foundation for a new high-rise. Before actual construction had ever begun, somebody had to come up with the vision, plan, process and prove of concept or model. There is nothing knew to it, every other industry does the same: electronics engineers, car designers etc. If house is build according to that plan and has problems – we know who is to blame.

Only a small fraction of software projects are successful. While there are many causes for this, in many cases the reason is lack of vision, experience, proven technical design (architecture) and prototype. Most people would be extremely frustrated if somebody would sell them a house which was not thought out before hand. It’s kind if ironic that we don’t have this high level of standard for the software. Many software projects are way more expensive then an average house.

I was reading a second edition of Code Complete by Steve McConnell and it’s got a chapter on Common Software Metaphors. Good metaphors are very useful for understanding better new problems and in our case learn to produce better quality software.

Here a very good description of the Software Architect role. Surprisingly (or ironically) it comes from Microsoft Solution Framework Agility slides.

The software architect’s main goal is to ensure success of the project by designing the foundations of the application. This includes defining both the organizational structure of the application and the physical structure of its deployment. In these endeavors, the architect’s goal is to reduce complexity by dividing the system into clean and simple partitions. The resulting architecture is extremely important because it not only dictates how the system will be built going forward, but also establishes whether the application will exhibit the many traits that are essential for a successful project. These include its usability, whether it is reliable and maintainable, whether it meets performance and security standards, and whether it can be evolved easily in the face of changing requirements.


I think complexity is the keyword here.

0 Comments:

Post a Comment

<< Home