Software Architecture & Design, Part I: Software Development Life Cycle, Software Architecture, and Architectural Pattern

Aykhan Nazimzada
6 min readNov 16, 2020

--

In this article, we will talk about one of the most confused concept Software Architecture & Design. We will deep dive in the topic so that no question marks leaves in our mind. We will start with Software Development Life Cycle. Furthermore, we will discuss about design and implementation phases of SDLC deeply, architectural patterns, and design patterns. At the end, there will be comparison between architectural pattern and design pattern.

Building a software is not just coding. This is not a new fact for anyone. However, most of the developers forget it to keep in mind which results in gaps between desired output and actual output of the software. Coding is an important part of the software engineering and development. However, it is not the only one. So, let’s first of all, consider the phases software engineer need to pass through.

In the picture above, you can find the phases of SDLC (Software Development Life Cycle). There are generally 6 phases; Planning, Analysis, Design, Implementation, Testing, and Maintenance. Each phase is an input for an upcoming phase, or each phase is an output of previous phase. We will discuss each one separately, but before, note that for different resources you can find different SDLC with different number of phases. Some of them separate Planning with Requirement Gathering or Testing with Deployment. However, main idea is same, and developer need to travel through all this processes.

1. Planning

Planning phase is also called Requirement Analysis. It is involved in gathering requirements by developer team from customer, stakeholders, market experts and others. This is the first and one of the most important part of the SDLC. Any miscommunication with customer in case of requirements will have big impact on final program. Moreover, potential risks are examined, market research are held. Most used and effective method of planning phase is JAD (Joint Application Development) session. I am not going to talk about JAD session, however, with the picture below, you can have some visual about it.

2. Analysis

This the phase where project goals are set. All the information gathered in the planning phase are being converted to a meaningful form that will help software engineers to start working on. Then, the development team determines what operations the intended application should have. In other words, in this phase, potential issues are defined, and solutions are provided in order to maintain the successful implementation of the software. An important item of this phase is writing SRS (Software Requirements Specification) Document to identify the scope of the project.

3. Design

With the help of SRS documentation, developers have now clear image on their head about how to optimally design the software architecture. All potential software architecture are defined in the DDS (Design Document Specification). Stakeholders reviews this documentation, and design decision made on based their feedback. This decision should be made carefully, because based on this decision, all inter elements of system will communicate each other. Therefore, it is better to have deep analysis to find most suitable one as it will ease the difficulty of implementation phase.

4. Implementation/Development

This the part where coding actually starts. Developers are starting implementation of the system according to decided architecture referring to DDS documentation. Developers use various programming tools like interpreters, debuggers, and compilers to generate the code, along with high-level programming languages. At the end of this phase, now, we have a functional system which can surely have bugs, glitches, and other problems.

5. Testing & Integration

In Testing phase, testers are working hard to detect errors in the software and report to developer team who will fix those problems. This process will continue till the quality standard of the software is reached. In the 2nd part, in Integration phase, developers have last chance before deployment to examine the system. Is the final output matches with the business requirements? Are there any remaining bugs? Whether integration of the system is sustained?

6. Maintenance

Deployment of the program is not the end. There is a Maintenance phase that will continue as long as system exists. In here, maintenance team are responsible for functionality of programs, detecting and fixing the future errors, adding new functionalities to the system and more details that can’t be fit to this page. The ultimate goal of the maintenance phase is to ensure that the product remains relevant and high quality.

Till now, all the information were the prerequisites for our topic Software Architecture & Design. Now, let’s zoom in to the Design and Development phases of SDLC.

In Design phase, we define the architecture of the software. There are Architectural patterns, Quality Attributes, Messaging mechanisms, APIs and other elements in this level. In this phase, we need to define all this stuff in order to have strong input for Development phase. For Development phase, we have Coding paradigms, Design patterns, Tooling, Automation and other macro elements.

Now, we have arrived part which developers mostly need to care about; output of the Design phase which is the architecture of the software.

“The Design output is the input of the development phase”.

So, what is Software Architecture? Let’s give a definition.

Software architecture is how the defining components of a software system are organized and assembled. How they communicate with each other. And the constraints the whole system is ruled by.

I know it is little hard to understand it from definition. No worries! For better understanding lets divide Software Architecture to 3 parts.

1) How the defining components of a software system are organized and assembled

Note that definition uses the words “organized and assembled” not built or implemented. In other words, Software Architecture deals with organizing the elements of a software systems, putting them into a structure. Moreover, making components of system organized and assembled. This structure is called Architectural Pattern.

2) How they communicate with each other

This part is I guess very straightforward. It means how the components of the system communicate with each other. This is Messaging mechanism and APIs.

3) The constraints the whole system is ruled by

These constraints are the non-functional attributes of the system. It is also called the “-ilities” of the system, for instance, scalability resolvability, adaptability and etc. Quality Attributes are vital as they affects architectural pattern choice and eventually impacts the development phase in many aspects.

I hope we can successfully define what the Software Architecture is. Some confuse the word Software Architecture and Architectural Patterns; however, patterns are structures to define Software Architecture. So, Software Architecture is more than a structure.

The Architectural Pattern is the overall structure of the system.

This is the pattern where in the implementation phase, your code will be built and developed. Some popular Architectural patterns are: Model-View-Controller, Client-Server, Layered architecture

The Architectural Pattern define the granularity of the components.

Here, granularity means that with how small or big components should system consist of. This is important for Implementation phase. You cannot start coding without knowing Architectural Pattern, in other words, without realizing every components of the system. Here is sentence that I liked mostly:

“Knowing the Architectural Pattern will help us make good decisions in the development phase”.

--

--