Architecture as Language

Software architecture is a somewhat funny thing. Everybody in software development agrees that we need it in some way, shape or form. However, we cannot agree on a definition, we don’t really know how to manage it efficiently in non-trivial projects and we usually don’t have ways to express a system’s architectural abstractions precisely and concisely. Asking some of my customers to describe a system’s architecture, I get responses that include specific technologies, buzzwords (such as AJAX or SOA) or vague notions of “components” (like publishing, catalogue or payment). Some have wallpaper-sized UML diagrams, the meaning of the boxes and lines not being really clear. All of these things are aspects of the architecture of their system. But none of those explanations represent a concise, unambiguous and “formal” description of the core abstractions of a system.