When it comes to building a software, a lot depends on the system architecture. The software architecture serves as a skeleton and largely defines the success of a software development project. A solid architecture does not end with the structure of the software. It conceives a comprehensive approach to finding the suitable technology stack that fits your project goals.
The person who is responsible for this is a solution/software architect.
Knowing what functions a solution architect performs, will help you assess his performance and stay in the know of whether the project will be successful.
Depending on the size and the scope of the projects, a solution architect may be present at all stages of the software development. However, the most important stages that largely define the success of the future software are presale and discovery stages.
Let us have a look at the key functions that a solution architect performs at presale stage.
– Identifying project needs (what is the purpose of a project)
– Setting business goals (what benefits a business will get out of it)
– Defining functional and non-functional requirements (what the system will do and how it will do it)
– Foreseeing risks (what may go wrong during the development process)
– Raising concerns (if all client’s requirements are viable)
– Predicting technical constraints (what actions or manipulations may be required for software and hardware)
– Anticipating legal constraints (including compliance with legal requirements).
During the discovery stage, a software architect will be responsible for:
– Writing a client proposal
– Creating a software architecture design
– Preparing a roadmap and the project estimate
– Taking part in selecting the project team.
The information gathered at the presale stage will contribute to the development of the software architecture at the discovery stage.
As you can see, a software architect should possess a number of hard and soft skills to be able to perform the functions laid out earlier. In addition, he should continuously learn about the new technologies to be able to suggest the most suitable architectural solutions and know the specifics of the business.
Another important factor is quality attributes that define the characteristics of the software. Depending on the software, each product will have a specific quality attribute that is vital for that particular software. Among those attributes, you will find performance efficiency, functional suitability, usability, compatibility, security, maintainability, reliability and portability.
There are a few methods that help processing quality attributes and enable a software architect to choose the most suitable software architecture:
– QAW (Quality Attribute Workshop) – helps to identify key attributes based on collective discussions of all project participants
– ADD (Attribute-Driven Design) – helps to select the software architecture based on the quality attributes for a project
– ATAM (Architecture Tradeoff Analysis Method) – helps to evaluate the software architecture design against the quality attributes and the business goals as well as identify the risks at the early stages of software development.
The nature of business often defines what type of software architecture will be the best fit.
Let us see what these types are:
1. Monolithic architecture
The name speaks for itself and implies that all software elements appear as a single codebase. While this may be a suitable solution for start-ups and smaller projects for its quick development process, it imposes major difficulties when it comes to changing the language, framework or library. In addition, it makes it challenging to scale a software product and fix errors without failing the whole system.
2. Layered architecture
This type of architecture allows splitting the codebase into three layers – the presentation layer (i.e. the front-end of the software), the business layer (i.e. the back-end of the software) and the database layer (containing all product data). The software requests happen in the exact order that the layers appear and cannot skip any of the previous layers. This makes it easier to perform tasks or changes on every layer of the development process without affecting other layers. Every layer can be created using different technology, which makes this type of architecture suitable for various projects. However, the layered structure results in more time-consuming development and maintenance process and lacks scalability.
3. Event-driven architecture
Event-driven architecture represents the type of decoupled pattern that processes status changes i.e. events in the software system. In the retail business, for instance, it can be any item that changed its status from ‘available’ to ‘out of stock’.
Event producers, event transport (shipping) and event consumers are the key elements of the event-driven architecture. This is the order in which the status of the events changes. The type of architecture provides great opportunities for scalability, distribution, high performance and receiving real-time data. The decoupled event layers save from the need of direct communication between unrelated layers however makes it hard to track down all the events. Also, if the event transport crashes, the whole system crushes with it.
4. Microservices architecture
This type of architecture is popular for its flexibility as it allows managing all software services independently. Scalability and changes can be implemented selectively on those levels where they are necessary. In addition, it is easy to maintain and fix errors without affecting the whole system. This type of architecture works great for large projects involving multiple services and extensive teams but can be somewhat heavy in performance and testing.
As we mentioned earlier, an ideal software architect should know the specifics of your business and your business ambitions to foresee possible modifications in your software.
At Magnise, we take a holistic approach to selecting software architecture professionals. We make sure that our software architects possess all technical and business-related skills to have a comprehensive assessment of the future project. We will be happy to provide you with detailed information about all the stages of software development and help you choose the most suitable software architect for your project. Get in touch with us to find out more.