Role of the Architect

A Software Architect provides a solution that the technical team can create and design for the entire application. A software architect should have expertise in the following areas −

Design Expertise

  • Expert in software design, including diverse methods and approaches such as object-oriented design, event-driven design, etc.

  • Lead the development team and coordinate the development efforts for the integrity of the design.

  • Should be able to review design proposals and tradeoff among themselves.

Domain Expertise

  • Expert on the system being developed and plan for software evolution.

  • Assist in the requirement investigation process, assuring completeness and consistency.

  • Coordinate the definition of domain model for the system being developed.

Technology Expertise

  • Expert on available technologies that helps in the implementation of the system.

  • Coordinate the selection of programming language, framework, platforms, databases, etc.

Methodological Expertise

  • Expert on software development methodologies that may be adopted during SDLC (Software Development Life Cycle).

  • Choose the appropriate approaches for development that helps the entire team.

Hidden Role of Software Architect

  • Facilitates the technical work among team members and reinforcing the trust relationship in the team.

  • Information specialist who shares knowledge and has vast experience.

  • Protect the team members from external forces that would distract them and bring less value to the project.

Deliverables of the Architect

  • A clear, complete, consistent, and achievable set of functional goals

  • A functional description of the system, with at least two layers of decomposition

  • A concept for the system

  • A design in the form of the system, with at least two layers of decomposition

  • A notion of the timing, operator attributes, and the implementation and operation plans

  • A document or process which ensures functional decomposition is followed, and the form of interfaces is controlled

  • Implementation details (that is, the folder structure of your repo)

  • Implementation design decisions (Do you use server side or client side rendering? Relational or non-relational databases?)

  • The technologies you choose (Do you use REST or GraphQl for your API? Python with Django or Node with Express for your back end?)

  • System design decisions (like is your system a monolith or is it divided into microservices?)

  • Infrastructure decisions (Do you host your software on premise or on a cloud provider?)

Last updated