From the course: Azure Microservices with .NET Core for Developers

The importance of software architecture - Azure Tutorial

From the course: Azure Microservices with .NET Core for Developers

Start my 1-month free trial

The importance of software architecture

- Before we can talk about microservices, let me tell you. Microservices is just one kind of software architecture and it might not be suitable for every project. The architecture determines the quality and duration of software, because it's the core structure of any system. While there is no universally accepted definition, we can now take the one described by Bass, Clements, and Kazman in their book, "Software Architecture in Practice." The software architecture of a program or computing system is the structure or structures of the system which comprise "software elements, "the externally visible properties of those elements, "and the relationships among them." All software, regardless of its type and size, has an architecture. Therefore, if you don't explicitly design it, you will get one anyway, and you probably don't like what you get. We might think that the design of software architecture is only one of the parts in a sequence of activities and that it must be completed after obtaining and understanding the entire requirements of the system, just before development and implementation. The truth is, software architecture starts during the requirements analysis, then it gets greater emphasis during the design, and continues throughout the implementation. We even keep polishing it during the tests and later, during the deployment. As you can see, software architecture is an activity present throughout the entire lifecycle of software. Software architectures seek to expose certain minimum levels of quality. These will be based on the real requirements of the system in question, since they are born and are identified through the business objective. The term, quality attributes, refers to the characteristics of the product used by decision-makers to judge their quality. Some of these attributes are performance, availability, interoperability, modifiability, usability, extensibility, scalability, security, resilience, stability, et cetera. A software architecture cannot have all quality attributes, since many of them contradict each other. Therefore, you must identify which attributes have the highest priority in your system and work hard to achieve that without worrying about the rest. What you do have to worry about is technical debt. This term was coined by Ward Cunningham, one of the signers of the Agile manifesto, in 1992. It refers to decisions that seem convenient and timely at the time, but, on the other hand, cause an increase in the complexity and cost of the software in the long term. There could be different reasons that can result in this degradation of software quality, but, generally speaking, is the result of implementing features in a system where its architecture is not fully known, or where the architecture is deficient from the beginning. I invite you to, at all times, be aware of the technical decisions you make in your software project.

Contents