Thoughts on the World

Characteristics of a Software Architect

The construction analogy tells us that there is no single role for an architect - he may be any combination of client, project overseer, inspector, trouble-shooter and builder as well as some combination of visionary, designer, problem solver and mentor. Neither is an architect defined by a single body of knowledge or expertise - a competent housing architect would not be qualified to tackle a bridge or a skyscraper.

The role may vary from senior strategic adviser to programmer, but an architect will always deliver some key views and contributions. An architect who can design a web-based business solution, but knows when client-server is better, might also recognise when the requirement demands a larger-scale TP or real-time solution, but might not presume to design either.

If anything the software architect is defined by a set of viewpoints and attitudes:

  • The architect must make sure that the solution will manage change and control complexity. To do this he may have to stand in lieu of future users, developers and maintainers, extrapolating the requirements beyond the views of current stakeholders, which may be constrained by parochial or short-term considerations. This is the equivalent of Stewart Brand's "building for change".
  • The architect must deliver a solution which meets the users' needs. However, he does not have to meet every constraint, passing fancy or prescribed solution, especially when these are incompatible or generated by panic, religion or fashion (e.g. "We want a web-based solution"). The ability to say "No", or at least "What do you really need?" is even more important than "Yes, we can do it".
  • The architect sees the "big picture", and views a system and its context as a set of interacting components. The ability to take this view is probably what distinguishes the architect(s) on a project, from those whose mental model focuses on functionality, hardware, project or financial considerations. However, the architects must also be able to understand and discuss the system using those other mental models, and may have to act as an interpreter between them.
  • The architect is frequently an evangelist for new or different technologies, processes or solutions. However, he or she also has a key responsibility to help manage change, which may mean reining in enthusiasm where the risks and costs would outweigh the benefits.
  • The architect may be a key source of ideas, but must expect those to be adapted and changed as they are adopted by the rest of the team. Conversely the architect may have to adapt ideas originating elsewhere, but without losing the team's ownership of the solution.
  • The architect recognises that success in IT is about people, and understands both the processes of development and the factors which drive the various players. He or she has been "out there", so that requests or suggestions are realistic, not academic. A key role may be to help interpret between the people (developers etc.) actually doing the work, and senior managers who see projects in terms of money and "resources".
  • The architect will typically have general, not specific business knowledge. One of the key contributions may be to look at problems in a different way by applying analogies from different fields or projects. A true architect must not be parochial, and this means gaining experience in different roles and fields, probably with different employers. Having and using experience is more about attitude than years.
  • The architect has the ability to synthesise solutions, understanding new problems in the context of old ones.

To formalise Software Architecture, we have to define a basic set of knowledge and skills. However, this is likely to be quite "light": basic terminology, modelling skills, pattern literacy and so on. Different architects may need very different detail technical skills. We must also find some way to recognise the important attitudes and softer skills which really define an architect.