Injecting Architecture Experience
In order to function effectively, the software architect must not become detached from the other technical leadership. This includes the chief software engineer, the software systems engineering lead, and the development team leads. The approach that works best for communication of both the top level and subsystem level of the software architecture is to create a small software architecture team made up of the key technical individuals on the development team. The size of this team should usually be limited to no more than seven individuals. If the development is geographically distributed, then a weekly meeting via network-connected meeting software and teleconference can work well. If the travel budget permits, it is good to have the software architect and a few key individuals travel to the different sites occasionally for some of the meetings. This can be done in conjunction with periodic technical interchange meetings with the development teams.
The architecture team is composed of team members, not representatives. When the team meets, the team members should be representing the best interests of the system architecture, not the individual groups they may feel the need to represent. These team members should report to project management personnel, not to the software architect. This will allow the software
architect to focus on the technical aspects of the system and not on the management tasks, such as performance reviews and other personnel management activities. However, a large project may require a small group of people that report to the software architect to support such activities as preparation of the top-level architecture document or definition/negotiation of interfaces between the software subsystems or processes.
The architecture team should take ownership of the overall software architecture and design. In addition, they are responsible for defining the design and coding guidelines. The software architecture team should be the group of individuals that makes the key design and implementation decisions.
They are responsible for making the architecture and design as effective as possible, given project constraints. In addition, both requirements and design changes to the system should be approved by this team.
The architecture team is a working group that approves all design reviews, documents, deliveries, and makes sure the software delivery and the architecture defined for that delivery are consistent. Members of this team should be invited to all key reviews. In addition, they should participate in many of the peer reviews and inspections of the design artifacts and code. Many of the members of the software architecture team will be development leads, since these are usually the senior technical members of the development team. This will also facilitate acceptance of decisions made by the team among the development team members.
It is important this team be composed only of technical design and development leads that are responsible for the software architecture, not just individuals who are interested in or who may need to review the architecture. One exception to this rule is that a technical lead from the test team is sometimes a good addition to the architecture team to ensure the testability aspects have
While project management support is important for the success of the software architecture team and managers should be used to facilitate the team activities, a manager should never lead the team nor should any managers be members of the team. These managers should not be making or guiding the technical decisions made by the software architecture team, other than to provide input on the budget and schedule aspects of architectural decisions. In order to facilitate communication, presentations should be scheduled for the sole purpose of communicating the latest architecture and related issues to the managers and other development team members. These presentations are effective communication and training sessions and will be effective in minimizing the number of requests to add interested individuals to the architecture team.