So, I currently am working as a Sr. Software Architect on a contract with a government agency. In this role I wear many hats, and so the the question I sometimes get is what exactly does a Software Architect do? What role do I play within a software development environment? So my answer to this is:
The role of a software architect is quite varied. An architect typically performs several roles and is involved in several tasks which include the following:
- Envisioning the software system
- Being chief strategist, advisor and mentor to the development team
- Mimicking the role of a customer or an actual user
The primary task is that of a problem solver. Problem solving is required in the problem space, where the architect focuses on requirements understanding and specification, and in the solution space, where the activities include the following:
- Coming up with various architecture viewpoints and design
- Making sure that the design is realized correctly during the implementation stage
- Making adjustments to the design to ease implementation challenges
- Communicating it well among all the stakeholders of the system
The deliverables of an architect are typically various kinds of documents and communication material. These may include various reports and studies, specification documents, design documents, guidelines and best practices to help the development team in realizing the design through correct implementation.
An architect needs to be involved in a lot of communication activities—most importantly, listening to various stakeholders. You can find a good architect always engaged in activities such as talking, discussing, brainstorming, presenting, meeting, reading, writing, consolidating, reviewing, browsing, thinking, analysing, teaching and mentoring. An architect is expected to help the project manager with work breakdown analysis, scheduling the tasks, risk analysis and mitigation activities. An architect invests a lot of time in talking to customers, partners and various third party vendors.
One of the major challenges of an architect is to stay ahead of all others in the learning curve and have the ability to predict common pitfalls. In other words, an architect is a person who is supposed to have all the answers. That means he or she needs to invest a lot of time in order to stay ahead of the rest by reading about the state of the art technology and business developments, attending and contributing in conferences, and continuing to have hands-on experience so that pilot tasks, testing, integration and verification can be done before involving other members in the development team.
An architect should be able to see the big picture of the proposed system and the environment in which it will be operating at all times. If he or she loses sight of this big picture, several problems can creep in. In fact, this ability distinguishes an architect from others on the development team, where the focus typically is on one aspect of system development like hardware, database design, functionality or project management.
This is the reason why it is highly recommended that the software architect be involved throughout the software development life cycle. Initially, at least till the implementation phase begins, the involvement and number of activities of the architect will be great—right through the requirements engineering phase, architecture and design phase. After the design phase, an architect is still required to make sure that her or his design is realized in the correct manner. That is when he or she can make minor modifications to the design if it helps in making implementation easier. Even during the integration and testing phase, the role of an architect becomes significant. During the maintenance phase, the architect can help in extending existing systems with newer functionality and in fixing errors.
Currently, in many software product companies, the role of a software architect is very well defined, but unfortunately the same cannot be said in most software services companies (like the one i work for). There is also confusion about this role as there are several titles and designation labels used for the role of a software architect: Solution Architect, Systems Architect, Technical Architect, Senior Consultant, J2EE Architect, etc., which does not really capture the semantics. You can find many solution architects actually performing other design tasks such as such as systems architecture or domain modeling functions.
The role of an architect in the services industry should be defined very clearly in the organizational hierarchy, and there should be a technical career path clearly defined for software engineers to become software designers and then software architects. This technical track should be recognized and compensated on par with the managerial track.
So there it is in a nutshell…