The architecture of a software system at a high level is a set of structures or elements and their relationships between them. They are usually considered “non-functional” quality requirements.
Good architecture is crucial at the beginning of a project since these decisions are time consuming to change. Some important questions to answer pertain to performance, availability, productivity, maintainability, security, and operations. While the answers to these questions can be changed after starting the development process, by knowing the client’s vision from the get-go, a developer can design the core of the app in a way that pleases the client today and in the future.
By taking the time to develop the architecture at the beginning, the changes made to the app later on will be smaller by comparison. This means there is less time between version updates which is beneficial for all involved. While it may seem tempting to produce an app quickly, the cost spent changing the architecture post-release will increase significantly. In addition, there may be clients who then have to wait longer for an updated app and will be dissatisfied.
What about Technology decisions? Since it’s not in the position descriptions of upper management to make technical decisions, the architect will need to choose the right tool for the job. Will the database be relational or NoSQL? Will the server run on nginx or apache2? Or will the app be programmed natively or cross-platform? The architect is responsible for identifying the end goal and designing the most efficient way to get there.
What about the people? Not every developer is created equal. Everyone specializes in a particular part of the system. Identifying which specialization will best accomplish the vision will allow the partnership between client and developer to flourish.