Software architect is a general term that may refer to a broad range of roles. There are many accepted definitions. Vendor neutral and consensual terminology and certifications are evolving around this role since the last decade.
The main responsibilities of this new role are:
This happened at the time when the object oriented programming (OOP) was getting widespread use (late 1990s and early 2000). With the help of OOP, increasingly larger and more complex applications were being built. There became a need to oversee from a high level these complex applications. Software Architects were given a this new responsibility that includes:
Therefore, a Software Architect has to be at least familiar about Unified Modeling Language and OOP. UML is a modeling language that became important for Software Architects to communicate their design to developers and other team members, it is like drawings for building architects. This is however not the only way for communicaition.
Because of the strategic bias, decisions that an architect will make will often differ from those that a developer or a project manager will make. In many ways, the architect acts as the business owner would if they were technically savvy. While a developer is working and focused on to develop a software component, not necessarily seeing how the components would work together. The Software Architect sees the big picture and defines the interaction between components.
Service-oriented architecture is a recent evolution that has the potential to simplify architects' jobs. This is primarily because it provides a way of thinking about architecture that is closely aligned with the architect's need to define the APIs of systems.
In addition, the architect may dictate various standards, including coding standards, tools, or platforms. The reason for doing so is to facilitate strategic goals, rather than to arbitrarily restrict the choices of developers.
In addition to verbal communication, there are various Software Architectural Models that specialize in communicating architecture.
Within the context of a single software project another distinction can be made between the physical architecture which relates to the hardware environment, and the software architecture, which involves the design methodology of the code.
Other architect titles that are in use, but without consensus on the exact meaning include:
The simple table below can further assist in understanding the differences between Software architects:
|Architect Type||Strategic Thinking||System Interactions||Communication||Design|
|Enterprise Architect||Across Projects||Highly Abstracted||Across Organization||Minimal, High Level|
|Application Architect||Component re-use, maintainability||Centered on single Application||Single Project||Very Detailed|
|Solution Architect||Focused on solution||Very Detailed||Multiple Teams||Detailed|
In the software industry, there is a fair amount of conflict between Application and Solution Architects, and Enterprise Architects. Looking at the table above, it is not hard to see why. For example, Application and Enterprise Architects are almost completely opposite in terms of focus!
The overwhelming popularity of the term Architect in the context of software development can be traced to the day Bill Gates announced that he was relinquishing the title of President and CEO of Microsoft and assuming the role of Chief Software Architect. Presumably, this title was meant to reflect his role as an overseer of many software development projects at Microsoft. Suddenly lots of people decided that their job title also needed to include the word "Architect". Gates has since moved on.
It is generally agreed that a simplified construction metaphor is flawed with regard to software development. Nevertheless, the term is still meaningful in the sense that it describes the "design" aspect of the job.
Partly, this is the fault of the flawed construction metaphor (architect handing blueprints off to builder). Also, many "Waterfall model" development methodologies of the past encouraged this style of working.