The software architect role is responsible for the software architecture, which includes the key technical decisions that constrain the overall design and implementation for the project.


Topics

 

Signal
Signal


Implementation Model
Implementation
Model

           
 

Architectural Proof-of-Concept
Architectural
Proof-of-Concept


Reference Architecture
Reference
Architecture


Deployment Model
Deployment
Model


Design Model
Design Model


Software Architecture Document
Software
Architecture
Document


Analysis Model
Analysis
Model


Event
Event


Interface
Interface

 
Responsible For
 


Software Architect
Software
Architect


Incorporate Existing Design Elements
Incorporate
Existing
Design Elements


Structure the Implementation Model
Structure
the Implementation
Model

           

Describe Distribution
Describe
Distribution


Describe the Run-time Architecture
Describe
the Run-time
Architecture


Construct Architectural Proof-of-Concept
Construct
Architectural
Proof-of-Concept


Assess Viability of Architectural Proof-of-Concept
Assess Viability
of Architectural
Proof-of-Concept


Architectural Analysis
Architectural
Analysis


Prioritize Use Cases
Prioritize
Use Cases


Identify Design Mechanisms
Identify
Design Mechanisms


Identify Design Elements
Identify
Design Elements

 

 
Modifies
 

Review Record
Review Record


Analysis Class
Analysis
Class


Software Requirement
Software
Requirement


Design Subsystem
Design Subsystem


Design Package
Design Package


Design Class
Design Class


Enterprise Java Bean (EJB)
Enterprise
Java Bean
(EJB)


Implementation Subsystem
Implementation
Subsystem


Description

To top of page

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.

Related Information

To top of page

This section provides links to additional information related to this role.

 

Staffing

To top of page

Skills

To top of page

"The ideal architect should be a person of letters, a mathematician, familiar with historical studies, a diligent student of philosophy, acquainted with music, not ignorant of medicine, learned in the responses of jurisconsults, familiar with astronomy and astronomical calculations." - Vitruvius, circa 25 BC

In summary, 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. More specifically, the software architect, or members of the architecture team, must combine these skills:

  • Experience in both the problem domain, through a thorough understanding of the requirements, and the software engineering domain. If there is a team, these qualities can be spread across the team members, but at least one 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 in this environment of the project.

From an expertise standpoint, the software architect also needs to encompass the Role: Designer capabilities. However, unlike the designer, the software architect:

  • tends to be a generalist rather than a specialist, knowing many technologies at a high level rather than a few technologies at the detail level
  • makes broader technical decisions, and therefore broad knowlege and experience, as well as communication and leadership skills, are key.

Role assignment approaches

To top of page

If the project is large enough to warrant an architecture team, the goal is to have a good mix of talents, covering a wide spectrum of experience and sharing a common understanding of software engineering process. The architecture team need not be a committee of representatives from various teams, domains or contractors. Software architecture is a full-time function, with staff permanently dedicated to it.

For smaller projects, a single person may act as both project manager and software architect. However, if at all possible, it is better to have these roles performed by separate people, in order to ensure that time pressure on one role doesn't cause the other role to be neglected.

Further Reading

To top of page

See the references page, in particular the references on Software Architecture.



Rational Unified Process  

2003.06.13