Our colleague, Leonard Abu-Saa, System Architect, published a very interesting article about “Software Architecture for developers”, in Today Software Magazine, no 47.
Leonard shares interesting facts about the role of the software architect, and of course about his passion for photography, integrated in “the big picture” of the software architecture.
Read more about his software architecture journey in the article below:
Software architecture plays a very important role in the delivery of successful software systems, yet it is being neglected by many teams. The software architecture role exists in every team. However, most of the time, the “architecture” reflects wishful thinking rather than reality. Many teams think that they do not need software architects, because they can “self-organize”. Many teams throw around words like “YAGNI”, “evolutionary architecture” and “emergent design”. Being agile has many benefits, but it does not discard the responsibility of having just enough upfront design.
What is Software Architecture?
In the IT industry, the term architecture has many meanings to many different people and there are a lot of definitions of what it means. Here are a few: “software design”, “the big picture”, “plan”, “technical direction”, “foundations”, “abstract view”, “non-functional requirements”, “standards and goals”, etc. The truth is that there isn’t a single valid definition. Therefore, there are many types of architecture: “application architecture”, “software architecture”, “it architecture”, “platform architecture”, “infrastructure architecture”, etc. What do they all have in common? Structure and Vision.
At a first glance, “software architecture” could be defined as the architecture for a piece of software. Right? It is true, but it goes beyond software design.
This is the term that developers use the most. Developers are familiar with the concept, because they create applications (desktop, web, mobile, etc.), and, in this context, architecture represents the building blocks which are predominantly programming languages, technology choices, frameworks, libraries, APIs, etc.
System Architecture scales one level up, and we think of the “software system” as being composed of multiple applications. We might have a web facing app communicating with a backend service, which, in turn, has access to a DB server/system. Of course, all of these applications must run on a piece of hardware. Therefore, system architecture is a mix of software and hardware.