The term ‘Software Architecture’, which originated long ago, has become predominant in the industry during the last couple of decades and this coincides with the evolution of new technologies such as Web Technologies and evolutionary methodologies such as Rational Unified Process and Agile Software Development in the IT industry. Software Architectures are the backbone of software products and hence software architects are very crucial to the success of software projects. Depending on its size, project teams consist of one or more architects who are responsible for providing a sound architecture for the proposed software system. Projects that involve cross-functional solutions based on multiple technologies, platforms and user groups need a dedicated team of architects in addition to a typical design team. The characteristics of software architects and their role have evolved over a period of time. Whether we follow distributed agile or traditional methodologies the role of an architect continues to be significant.
A myth about the term ‘Architect’ in both Software Engineering and Civil Engineering is that an architect is an individual who brings just a good amount of technical experience in the respective engineering discipline. Though this is the fundamental requirement, an architect needs more than the technical skills specific to the project he or she has been hired for. The definition of ‘Software Architecture’ would help us identify the desired characteristics of ‘Software Architects’ – the not-so-new but, evolving breed of software professionals.
Software Architecture has been defined by various organizations and professionals. Here is a definition that consolidates many such definitions:
“Software Architecture is based on strong architectural principles and guidelines. It provides the blue print of the proposed software system and such a blue print consists of all necessary views of the software system, its components, their interaction and addresses the requirements (both functional and non-functional). Besides, it exploits the available technology with a clear strategy in order to reduce the impact on existing systems in an enterprise, remains cost-effective and delights the stakeholders.”
Evidently, it is not enough if software architecture addresses the functional and non-functional requirements of a project or product. The architecture itself has to be based on strong principles, guidelines and it must address the long-term requirements related to the structure of the software system itself. The long-term requirements related to the structure of the software are derivable from the best case requirements, long-term focus of the IT organization, reuse considerations, technology preference, proposed budget, wish lists and other emerging technologies that could benefit the organization.
This makes it clear that all user requirements mapped into an excellent set of use cases is just one of the inputs to the architect or architecture team. An architect need not wait until all detailed requirements are documented and use cases are identified. The architect can start his activity with initial requirements, high-level use cases, based on a set of organizational standard (or project specific) architecture goals, principles (typically a set of Dos and Don’ts) and guidelines, keeping in mind the clear picture of the customer’s IT infrastructure, mission and vision. This is because an architecture that is not aligned to customer’s IT infrastructure, mission and vision would prove itself to be fruitless and evolve as a major risk for the project as well as the organization as a whole.
In my opinion, Software Architect is a professional who is not only broadly technical with deep experience in certain technologies but also very good at soft skills especially in the areas of business communication, conflict resolution, self-expression, emotional intelligence, and team skills. When an architect or a team of technical architects meets a project team to present product architecture there could be conflicting issues, interests and alternative solutions. The architect needs to have strong skills in putting his architecture across by means of presentations or discussions. He has to be open-minded to encourage, understand and appreciate suggestions. Meanwhile, he must be time-bound and decisive to make his team as well as his stakeholders understand the rational behind the proposed or renewed architecture. And he must carry the right level of self-esteem and feel proud of the final decision and exhibit ownership throughout the product life cycle.
In summary, software architects need to be experienced in various areas including core technologies, peripheral technologies, application development & implementation and a variety of soft skills. Software architects need to hone their skills and build expertise to research and understand emerging technologies, technology trends, as well as client’s IT infrastructure, mission and vision. Finally, they need to have necessary expertise in identifying and using software processes, tools and techniques in order to architect the software system, document the architecture with required granularity (with APIs and code samples), communicate it to the project team and be a mentor for the team in implementing the system. With these qualities, this new breed of software professionals can definitely be identified and admired as visionaries for the software project and team they are working with!
What is your view of a Software Architect?