Software architecture is the process of creating a high level structure for any software project. This should be based around the requirements of what we want the system to do, resulting in the guidelines meant to be used in the actual development process.
During our years of experience with our software architecture consulting service, we have witnessed how people underestimate the importance of Software Architecture. Some don’t even know what it is or how it can benefit them to clearly define their software architecture requirements before developing new software.
Let’s say a developer is like a builder. Can a builder start constructing without an architect? Well, in theory this is possible but in the long run the house or building will not have a proper foundation to support an earthquake or any other structural change if expansion is required. Solid foundations for the software project will warrant that the project will be scalable and powerful.
So, in order to understand the key forces that are framing architectural decisions at the moment that will have an effect in future decisions for scalable projects, we need to talk about user demand, business demand, the concept of support to work with different work styles and workflows, and most importantly the improvement of adaptability of software design. Here are some key concepts to understand the different approaches of software architecture:
- Service Oriented Architecture (SOA) or user empowerment: Is driven by vendors, products and technologies. It always represents a business activity with a specific outcome and a given aim. Since it is intended for the end user, it has to be intuitive and has to be concerned with correct behavior, good performance and flexibility. Making it easy for the customer to interact with the application instead of misleading with poor user experience like many do. Understanding of scenarios and the process of making them as simple as possible will deliver an excellent user experience.
- Market Maturity: Take advantage of available technology when designing a new software solution since these languages and frameworks are already proven solutions to common problems. By doing this, we can focus our time and effort in what is really important, building the value added functionality to your software project.
- FURPS: This acronym stands for Functionality, Usability (UX), Reliability, Performance and Supportability. More specifically, when talking about FURPS, we should think about capability, reusability, security, performance, etc. All of these are important aspects to take into consideration when thinking about software architecture. Since the technology world is constantly evolving, it is important to keep an eye on new trends, composition models, increase in network bandwidth, hardware performance, cloud-based computing and any other operation you can automate within the software.
The current philosophy on software architecture is evolution and unfortunately, information is sometimes limited at the beginning of the project. Therefore, the software design will need to be adjusted as more information becomes available and the software solution is tested in a production-like environment.
Here are some questions to keep in mind when thinking about software architecture:
- What are the fundamental components of software architecture that could create a great impact if you get them wrong?
- Which components of the software architecture are most likely to change, or its final decision can be postponed until later on in the project with a minimal or no impact?
- What are your main theories and how will you validate them?
- What events or situations may force you to adjust your software architecture?
To wrap it up, it is important to start with a basic software architecture to get a general understanding of then gradually refine your initial design as you obtain more information. It is important to probe all major stakeholders that will use the software solution in order to make sure requirements are aligned with user needs and prevent any major potential problems from arising in the future.