Hitchhiker's Guide to Software Architecture and Everything Else - by Michael Stal

Monday, February 18, 2008


Today, I had an inspiration. My spouse told me it will take 5 minutes to get ready for leaving home, but actually it took her over 20 minutes. As those "events" constantly happen, my assumption is that women are moving with much faster speed than men. This way,  5 minutes on their spaceship equals 20 minutes of our time.

I also remember a professor at my university asking a student about the "evaluator problem".  The student did not really understand the question. Do you? Actually, the right answer turned out to be that he was using C style malloc for allocating storage in his compiler's attribute evaluator.

What can we learn from this? Humans might have a completely different perspective on reality depending on her/his background and context. Whenever we are dealing with architecture design, we'll have to communicate with all those stakeholders. In order to prevent misunderstandings like the ones illustrated above, we need to introduce a kind of formal language and a common scale - with other words: a common understanding.

One of the most critical points in design is the consideration and elicitation of requirements. This also holds for requirement priorities. For example, a project manager might be more interested in partitioning the architecture so that the different teams can develop in the most effective way, while an architect will follow a completely different rationale for modularisation.

In many projects I was also surprised by the fact how important a common project glossary is. Otherwise, people will interpret the same terms differently which is not a big boost for effective communication. For example, in one SOA-based project senior managers considered process monitoring to reveal the business perspective (Business Process Monitoring). They were interested to observe the number of successful business transactions or cash flow. What they actually got from development was system monitoring functionality such as showing load, bandwidth or faults. Guess, how long it took development to correct this?

It is very likely, that you also experienced the architecture/implementation gap in your career. This inevitably occurs whenever architects throw their design specification over the fence and then leave the development team alone.  Did you ever read a specification and understood it without any problems? Me neither! Some parts might be missing, other ones might not be implementable, and others might be contradicting. Even formal standards such as CORBA, SOAP, HTTP that were developed by expert groups within long time periods, reveal those problems. How can you then expect your own specification to be perfect? What is not perfect, will then be corrected or interpreted in unanticipated ways.

Thus, it is essential that such clarifications happen as soon as possible in a project.  It is your responsibility as an architect to tackle this problem. Remember how often I already mentioned that effective communication is the most important skill - one of the few moments where I do not abide to the DRY principle. There are lot of methods and tool that explicitly address this issue. Think of agile methods, domain driven design, use case analysis, to name just a few.

Reality is relative. Thus introduce a common frame of reference for the stakeholders. This holds for software engineering, but also for real life :-)


  • Good Morning,
    you are talking about a problem I nearly always have in my projects. I tried to take this a little bit further to make a connection to domain specific languages in my entry http://blog.schmelzer.cc/archives/18-The-need-of-a-common-language.html. I would love to here your comments.


    By Anonymous Anonymous, at 9:50 AM  

  • Dear Robert,

    Just read your posting.
    I agree that DSLs represent a really good way to define a commom vocabulary. The nice thing about DSLs is that they are not only constrained to define islands (i.e., a loosely coupled list of terms), but can connect the vocabulary via a grammar. You can compare this with individual patterns and pattern languages. Languages are the beasts that are really defined with a concise, formal semantics to prevent ambiguities. A minor concern could be the fact that only a few of us are good in language design. Thus, DSLs should somehow balance two forces: conciseness and practicability. And the language should serve all stakeholders involved. Your example might easily overwhelm a business person.

    By Blogger Michael, at 10:04 AM  

Post a Comment

<< Home