Characteristics of the Software Architect
"The software architect must be well-rounded, posses maturity, vision, and a depth of experience that allows for grasping issues quickly and making educated, critical judgment in the absence of complete information." (Rational Unified Process)
Role of the Software Architect
- The software architect has overall responsibility for driving the major technical decisions, expressed as the software architecture. This typically includes identifying and documenting the architecturally significant aspects of the system, including requirements, design, implementation, and deployment "views" of the system.
- The architect is also responsible for providing rationale for these decisions, balancing the concerns of the various stakeholders, driving down technical risks, and ensuring that decisions are effectively communicated, validated, and adhered to.
Skills of the Software Architect
- Experience in both the problem domain, through a thorough understanding of the requirements, and the software engineering domain. The software architect must provide the global vision for the project.
- Leadership in order to drive the technical effort across the various teams, and to make critical decisions under pressure and make those decisions stick. To be effective, the software architect and the project manager must work closely together, with the software architect leading the technical issues and the project manager leading the administrative issues. The software architect must have the authority to make technical decisions.
- Communication to earn trust, to persuade, to motivate, and to mentor. The software architect cannot lead by decree, only by the consent of the rest of the project. In order to be effective, the software architect must earn the respect of the project team, the project manager, the customer, and the user community, as well as the management team.
- Goal-orientation and Pro-activity with a relentless focus on results. The software architect is the technical driving force behind the project, not a visionary or dreamer. The career of a successful software architect is a long series of sub-optimal decisions made in uncertainty and under pressure. Only those who can focus on doing what needs to be done will be successful.
Many Hats of the Software Architect
- Visionary – Discovers innovative and novel approaches, translating highly-abstract concerns into tangible opportunities… and results
- Manager - Coordinates with all stakeholders to formulate and communicate a practical blueprint
- Salesman - Sells the ideas and appropriateness of the solution
- Developer – Helps develop POC or pilot to validate solution, patterns, practices, and principles
- Leader - Shepherd's from ambiguous and abstract to concrete and practical
- Coach – Mentors and coaches others on effective application of industry best practices
- Governor – Helps to establish architectural standards and guidelines
- Abstracts the complexity of a system into manageable models that describes the essence of a system by exposing important details and significant constraints.
- Creates and communicates tailored views of the software architecture to appropriate stakeholders at appropriate intervals.
- Provides leadership on critical decisions that designate a specific direction for a system in terms of implementation, operations, and maintenance. These decisions usually result in tradeoffs that define key characteristics of the solution, and they must be well documented and easily understood.
- Establishes quantifiable objectives that encapsulate quality attributes based upon which the fitness of the architecture is measured.
- Proactively leads the implementation during all iterations and monitors the adherence of the implementation to the chosen architecture.
- Collaborates with the Project Manager and other key disciplines to prioritize use cases and organize work to drive down risk and encourage strong project control structures.