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