Introduction to the Software Architect
Definition
The definition of software architecture varies because if its various responsibilities within methodologies. Most agree, however, that software architecture involves compromise. The software architect can be a function of a software designer or a titled role. What is also agreed upon is that the software architect is responsible for coordinating many of the efforts of creating the system artifacts and insuring that the design remains within the constraints established by the system, the business, the industry and many other factors.
One definition states that an architecture "describes the overall organization and structure of the system in terms of it's major constituents and their interactions"(1).
Role of the Software Architect
The role of the software architect, as mentioned previously mentioned, wears many hats and has many responsibilities. They must have an understanding of the industry, the business and the technology in order to understand the constrains that must exist for the system. For instance, when putting together a system for insurance organizations, specific care must be paid to securing member healthcare data AND any payment data. The architect must be knowledgeable about HIPAA regulations and PCI Compliance issues.
Skills Needed
The skills needed as a software architect includes, of course, techical skills like knowledge of methodologies like Agile, RUP and possibly waterfall, knowledge of technologies like J2EE and .Net and soft skills like effective communication, leadership, problem domain knowledge and the ability to motivate.
Responsibilities of the Software Architect
The responsibilities that fall under the perview of the architect encompasses many of the responsibiliities that are also that of software designers. In Agile, for instance, there is no true architect role as the architecture is being built as the system evolves. In RUP, on the contrary, the architect role is defined though it is seen as an orchestrating or coordinating role. In my experience architects have functioned as designers, designing classes, refining the analysis and tightening the software architecture documents.
Some architecture responsibilities are broken down to the following:
I.T. Architect-Focused on Hardware
Enterprise Architects-Responsible for larger system integrations touching all aspects of the organization
Business Architects-Focused on the constrains required by the business/industry
References and Resources:
(1) "Fundementals of Software Engineering", Second Edition, Ghezzi, Jazayeri, Mandrioli, Prentice-Hall
Mastering Object-Oriented Analysis and Design with UML 2.0, IBM Press
