Passing software monolith and entering into the cloud native era, software architecture has become more important. Because in cloud native application development, we develop self sufficient micro services that are responsible to do exactly one job. To do so, a big cloud product needs to be segregated and modularised carefully. These modules need to communicate with each other and need to be reusable. This is exactly where software architecture comes handy. Before diving into architecture details we need to be clear what is software architecture, architects and architecture modelling. In this blog I will explain what is software architecture? Who are software architects? What are the responsibilities of an architect and what is architecture modelling? And before all of them, why should we talk about architecture?
What do we want?
Software is not visible and not tangible. But we want to talk about them, share knowledge and information on software. We want to convince and defend our ideas and we want to discuss them with others. We need an efficient and easy to understand medium for communication. We need to zoom out and zoom in on a topic whenever required, and want to describe the same in different levels of abstraction and from different perspectives. We need to have clear knowledge what micro service is responsible for which module in the cloud product. We need to know how these modules will interact with each other? As one will depend on another we need to know if one can rely on another. How should the cloud product behave if few modules are not alive? How do we reuse one module or micro service ? Software architecture allows us to do all of them.
What is software architecture?
As per Wiki “Software architecture refers to the fundamental structures of a software system and the discipline of creating such structures and systems. Each structure comprises software elements, relations among them, and properties of both elements and relations.” Means software architecture is a blueprint of what runs on a machine, it's a pictorial representation of what we can't touch and see. We can depict the product as a whole with a high level of abstraction and each of its modules in detail. The pictures are called models.
We need a standard which is understandable across industry.
We need to define a common language and graphical notation for communication and visualization.
A Model makes it easier to understand the idea by looking at a picture.
It's easier to convey the idea by depicting as well and something to point at when discussing.
It's also a documentation of the whole and part of a complex software system. As software does not have physical existence so it is difficult to visualize.
We need to have fewer diagrams, notations and elements which are generic enough yet can describe a wide range of software/systems.
What is the Job of an Architect?
An Architect needs to have empathy for the audience, he/she needs to put him/herself in the shoes of the audience.
An Architect needs to capture and present information in a crisp and easy to understand manner.
Architects need to design a software system and part of it but an architect's work is not only limited to creating the designs.
Architects need to gather technical information from various sources( e.g. Stakeholders, documents, live software)
Prepare presentation/documentation for various stakeholders
Discuss with developers and stakeholders. A good communication skill is needed.
Aligning the development with different groups, means ”who does what?” For this reason, the architecture needs to be layered and modular. Starting from a high-level layer that will provide an overview to a detail so that the business, technology and database layer can be separated. And within each layer a clear modularization so that each module can be developed by a different team/individual. Yet providing an interface which will bind the different modules/pieces.
Who are the communication partners?
An architect is the central contact point for communication. Stakeholders are:
Architects: Other architects in the team, with whom the architect needs to work.
Software Developers: Architect needs to gather technical information of the software (if existing) from developers and incorporate it in the design. Also, technical limitations need to be taken from developers/experts. In turn, architects provide architectural guidelines and specifications to developers to follow and implement the software piece.
Documentation Developers: developers who prepare technical documentation and user manuals need to know the architecture on a high level.
Customers: Architect provides a proposal for implementation and gathers requirements and feedback from customers and incorporates them in the design and architecture.
Managers: The management who needs to run the project must understand the details so that they can plan development efforts and timeline and also can communicate with other development teams.
What are the Do’s of an architect?
Along with the content (the diagrams)
Proper Structure of the document
Proper explanation in a written form
Setup the context and provide an overview (when documenting)
Verbal and Non-verbal (body language) behaviour
When you use different colours in the diagrams make sure the colours can be distinguished when printed in a grey scale.
Add comments/labels whenever needed, it helps diagram components to self-describe. You can even add Icons and screen shots inside the elements if that helps. Showing tables inside storages can be used to show examples. Arrows are important to show the flow of information, request/response etc.