The Architect Designs the System

To effectively make decisions, advocate for the architecture, mentor developers, and implement key parts of the architecture, the architect must be a technical leader. Although the project manager is responsible for schedule, budget, and resources, the architect is responsible for the technical direction of the project. The architect is involved in interviewing candidates for technical positions, motivating the team, communicating the vision, providing status updates to project management, and generally keeping the development of the system on track. To accomplish this, he or she needs the credibility that comes from mastery of the practice of software development.

The architect advocates consistent practices that improve the software development maturity of the development organization. The architect is a technical expert. He or she came up through the software development ranks. The architect may not have been the top developer in the group, but he or she has the communication, managerial, decision-making, and organizational skills necessary to be successful in a leadership position. However, the architect is the developer's best advocate for promoting technology, process, and sound design and especially for the professional status of the software development practice within the organization. The architect's skills are broad and deep. The architect should understand the software development lifecycle. He or she should be aware of current best practices and strive to implement them within the organization. The architect should have a deep understanding of the technologies used to implement the project, whether that be Java, C++, or COBOL. The architect should understand what it takes to administer systems from the database, network, and security perspectives. The architect should have a knack for modeling, whether that is UML or another notation. Models are the key artifacts used to communicate the architecture to stakeholders. The architect should be able to identify components and connectors to clearly communicate the design to those with different perspectives on it.

The architect should be skilled at finding the "centers," or those key designs that are cornerstones in the development of the software. In a GUI app, that might be the MVC architectural pattern that provides the metaphor for system construction. In a service-oriented architecture, it might be a model for an open layered service. These centers should be backed up with implementations that give it some concreteness. Some have said that the architect deals in the space where "the rubber meets the sky." These centers are those things that provide the large-grained ideas and structures for the software system. The centers are identified, articulated, communicated, advocated, and implemented. All other aspects of the system must find a place within or adjacent to these centers.