Many people hear about software architecture but don’t really know what it means or why it can be helpful. But when working on a software project, it is primordial to dedicate time to get a good software architecture, because if you think about, it’s the base of all the projects. So why is having a good software architecture so important?
What is Software Architecture?
When we talk about the architecture of a software, we talk about a plan that describes a set of aspects and decisions that are important to a software. This implies taking into consideration all kinds of requirements (performance, security, etc.), the organisation of the system, how do the the system parts communicate between each other, if there are some external dependencies, what are the guidelines and implementation technologies, what are the risks to take into consideration, and many more.
Going back to what I said, the architecture of a Software includes decisions. If you would make a change to one of the software’s aspects or decisions, would there be a huge impact and would it be very hard to change it?
Most probably, the answer will be yes. So why is it that we talk so much about having a good software architecture?
Why is Software Architecture so important?
Here are the three main reasons why a good software architecture is so important when it comes to development.
- A basis for communication: software architecture is a sort of plan of the system and is primordial for the understanding, the negotiation and the communication between all the stakeholders (user side, customer, management, etc.). In fact, it makes it easier to understand the whole system and therefore makes the decisions process more efficient.
- The earliest decisions: the first decisions taken are at this stage. Those early decisions have a huge importance on the rest of the project and become very difficult to change the more we advance in the process
- Transferability of the model: software architecture defines the model of the software and how it will function. Having it makes it possible to reuse this model for other softwares; code can be reused as well as the requirements. All the experience we get while doing that architecture is also transferred. This mean that we know and can reuse the consequences of the early decisions we took on the first place.
In other words, the architecture will define the problems you might encounter when it comes to implementation. It also shows the organisational structure and makes it much easier to take decisions and manage all sort of change. It also permits us to get a better estimate of the time & costs of a project.
What is a good software architecture?
It’s very difficult to determine what is a good software architecture and there is no real right answer to this question. What we can say is that it makes products cheaper to develop and to maintain. In general, the facets of a good architecture are all interrelated and depend on each other. Like what?
- The software architecture should be strong and easy to maintain when we find bugs
- Should have domain concepts that nearly all the members will understand
- It should be flexible and extendible, usable on the long term
- Make it possible to adapt to requirements
- Scalability, scalability & scalability: high capacity
- You shouldn’t find repetition in the code
- Refactoring should be easy
- Should respond positively to change, when adding features, performance should not decrease
Many people believe that only by looking at the final product, you can know that you have a good software architecture. That is definitely not true. But looking at the product, you can find “signs” of a good one. Again, this does not mean that if the following points are seen in the software, it automatically implies that you’ve got a great software architecture! Now that we made this clear, what are those indicators that could show your software has a good architecture?
- The software is user friendly
- The solution is flexible, users adapt it quite easily
- The software is scalable, he is able to support any type of growth (ex. more users)
- The software works the way the end user works
- The software has a high performance and runs fast
- It’s easy to modify or add functionalities
- You can easily run some tests on the software, at least it won’t be a huge problem
- Maintainability is made easy
- The software is strong and reliable
Hopefully this article helped you understand the importance of a good Software architecture and why we are so obsessed with having a good one! It’s always important to think on the long term, building a software to make it functional right now can do the same but will it really support any sort of growth & change?