What’s with All These Roles?
I previously posted about some frustrations I’ve had when dealing with people in positions of authority who get too distracted from their intended responsibilities. Particularly the question of “why do we need architects?”
But what is an “architect”? I view them to be like meta-programmers. Where they deal with systems in stead of components, and should be more worried about load testing than memory profiling. It’s a matter of scope. If you are working on a single application or for a small enough company then you can get by without oversight, a reasonably experienced developer should be capable of making long-term decisions. If you have tens or hundreds of developers, multiple platforms, teams of developers working on separate initiatives and maintanence, not to mention hundreds or millions of dollars invested then you need at least on person acting as a coordinator and making sure all of the right pieces are fitting and everone is moving in the same direction. That person is your architect.
The architect is your person for the high-level organization of the system. I like to call it meta-programming, even though I know there is already a metaprogramming paradigm that is an evolution of aspect-oriented programming. In my definition the meta-programmer (architect) is working on defining the interactions between systems, standardizing interfaces and working with the business owners to make sure that the systems are supporting the business efficiently and effectively.
“But the architect should be concerned with memory profiling and components!” Yes, the should be. But I said “more concerned” not that it should be ignored. Given that you are dealing with an organization large enough to require technical coordination and oversight you probably are also going to have a staff of experienced developers who are responsible for the technical implementation of the systems. These people are usually called “application architects”, “lead developers” or “senior developers”. They usually work within a smaller scope of the overall system and are the ones working with the rest of the development team to develop and maintain a portion of the system. Typically they’ll work with the architect to make sure their work is in line with the goals of the organization, that their software will be appropriately efficient and interoperable. They are aslo the ones who will be more concerned with the memory profiler. Although, like the coding architect who should keep his or her development chops strong, the senior developer should be aware of the architectural goals and how the systems are intended to work.l