Wednesday, January 24, 2007

Software Architecture - Zoom In Zoom Out

We have been very busy designing and skeleton-ing out a large system.

It is difficult because there are so many components, so many services to integrate with, and so many potential knobs to turn. This is not a web app and a database. This is a biggin. Getting the partitioning in the right places is crucial.

When I am in the details I panic that I can't see the forest from the trees.

When I am at 20,000 feet, I panic because modeling and hand-waving doesn't cut it.

The only solution of course is to alternate between zooming in and out like this until you are done.

I got a third of the way through my Masters of Software Engineering at OMSE before I "paused" to join an OSS ESB startup (now defunct). I learned a couple of things there - one topic that I retained and applied is Views.

I went back to this today because I had the "too much detail panic". I came across and ordered Software Systems Architecture which looks quite good. Take a gander at the Quick Reference Card (requires you to give up an email address).

I like the looks of it because it builds on the "views" concept and gives some more detail (i.e., perspectives). Anyway, unless someone comes up with a better idea, I will just create the hierarchy with the viewpoints and perspectives in our wiki and then I think I will feel better zooming in and out as I will have some structure and cross reference. Perhaps it will start to become paint by numbers at some point.

Let me know if you have other ideas.


Gabriel Gonzalez said...

First off, congratz for your blog, you spread interesting ideaos over it.

I am not sure why are you "in panic". Are you designing a new system and want to make it easier understand it insights?
Are you just working extending an older one so you have to get the whole picture of the system?

I often find useful doing a vetical cut to the system and look at it as a stack of layers from requirements to code :)

fuzzy said...

Hi Gabriel,

Thanks for the comment.

I'm just high strung that is all - panic is a more descriptive word :)

It is a large new system.

Yes vertical cut is a good description of what we are doing. That is what I meant when I said, "zoom in". When we zoom in, we are writing actual code as proofs of concept etc. The "zoom out" is where we model things.

Rebecca said...

I find the notion of views and perspectives on those views (perspectives being concerns that cut across various views) to be quite helpful in sorting out how to describe/define architecture. Software Systems Architecture by Nick Rozanski and Eoin Woods is a book that describes this.

Rebecca Wirfs-Brock

fuzzy said...

Thanks for the comment Rebecca.

Yep, that is the book I referenced in the post.

I have since received it and concur - it is quite good.

JT said...

Software Systems Architecture is a very good book for architects. I have it and refer it to peers. My only complaint is that the terms: view, viewpoint and perspective semantically sound like synonyms. The idea of testing your design with scenarios is critical to validate and breed understanding.