Why Software Architecture Matters in Any Enterprise Software
Being a software architect, I often wonder how little people are concerned about the architecture of enterprise solutions. I get their point, however: why should they care as long as the software meets all operational requirements? In this article, I explain why you should care and why software architecture is crucial in any enterprise solution.
Why (the Lack of) Software Architecture Matters
Every software is designed to meet specific requirements derived from (1) the user goals, (2) the system goals (IT infrastructure), and (3) the business goals of both the customer and the software provider. As long as all (or most) of the requirements are met, everybody is happy, with the software contributing to the success of their businesses.
The problem is that, most often, the different goals and requirements can’t be fully aligned across these three areas. Instead, they compete with each other and need to be balanced carefully. This is where things start to get really complex and challenging. It is the software architect’s job to tie all those loose strings together and define the software’s basic structure. Only then, software developers have a solid foundation to build on and create a maintainable, future-proof solution.
Why is this so important? Typically, software lives far longer than the teams who created it. According to Luke Hohmann (2005), the lifetime of a system can „range from 12 to 30 or more years“, whereas most developers are only actively working on a system for 2–4 years. Throughout a system’s lifetime you will thus see many handovers to new developers. With this in mind, can you imagine why most software developers prefer to start a software project from scratch to maintaining an existing one?
Software developers typically work on very specific tasks—small parts of the system. A well thought out and clear software architecture brings order to the otherwise chaotic development of software. It helps new developers to quickly find their way into the system and maintain a reliable and future-proof solution. Without a clearly defined architecture, every developer works to his or her own liking and chances are good that you get to a point where any change may cause the software to break. Then, your options pretty much boil down to starting all over again. This is a nightmare scenario for any business critical enterprise solution and the organizations relying on it.
What Is Software Architecture?
Before we turn to the practical benefits of software architecture for customers and software users, let’s have a look at how software architecture is defined. Microsoft defines software architecture as „the process of defining a structured solution that meets all of the technical and operational requirements, while optimizing common quality attributes such as performance, security, and manageability. It involves a series of decisions based on a wide range of factors, and each of these decisions can have considerable impact on the quality, performance, maintainability, and overall success of the application.“ (Source: MSDN, What is Software Architecture?) „In other words, architecture is focused on organizing components to support specific functionality.“ (Source: MSDN, Key Principles of Software Architecutre)
Of course, these definitions could be extended with loads of technical aspects, but that is not the main aspect of software architecture. „More than any other aspect of the system, architecture deals with the ‚big picture'“, Hohmann (2005) says. Figure 2 schematically illustrates a common software architecture with components grouped by different areas of concern.
Practical Relevance for Businesses and Users
Now that we are clear about what software architecture is and what the risks are of not having (a good) one, I think we all agree that (the lack of) software architecture matters. But still, what’s in it for you as a software user and paying customer?
From a User Perspective
In general, users don’t care about software architecture. What they are concerned about is system functionality, performance, and reliability. All three have a significant impact on the users‘ experience and can quickly lead to frustration if they are bad. Good architecture helps to ensure that solutions are reliable, perform well, and meet all functional requirements.
From a Business Perspective
When companies decide to buy or license a software solution, they are concerned about functionality, performance, and reliability, too. But there is more to it. They also have to consider the new solutions‘
- compatibility and interoperability with existing IT systems,
- security and data protection,
- maintainability and fitness to being adapted to new or changing requirements (future-proofness),
- and costs.
This is especially true when it comes to business-critical solutions, since they can put an entire business at risk when they break.
In conclusion, we can say that software architecture, this often overlooked aspect of an enterprise solutions, can decide on the success or failure of an entire company. If it is well designed, „it is worth thousands of hours“ (Miguel Campião, 2015) and can save a lot of time and costs and can be a true driver of success.