What Is Software Architecture

In this chapter, we cover the essentials of forming software REST-based software architecture.

  • We will look at what software architecture is.

  • We will then look at how to select a framework for RESTful Web Services, a web framework, a business-tier technology, and a persistence mechanism.

  • Finally, we will review some popular patterns and best practices and take a look at the application architecture covered in the course.

The goal is to establish the context for the discussions after this chapter on data-driven development using the REST architectural style.

What is software architecture?

Software architecture refers to the higher-level building blocks of a software system. Like architecture in the real world, software architecture defines the high-level system structure of the software components, the discipline of creating the component hierarchy, and the documentation of this structure. It also forms a set of architectural design decisions that show the structure and the rationale behind it.

At the start of product development, an architect creates a software architecture that forms the basis of design and development for the technical requirements for the project.

Non-functional requirements

When we look at how software development started, we mainly see a focus on the required functionality and a data-driven flow. However, modern application development has extended the focus to quality attributes such as:

  • Extensibility
  • Reliability
  • Performance
  • Scalability
  • Maintainability
  • Availability
  • Security
  • Backward compatibility
  • Usability

These attributes play an important role in software architecture and are popularly known as non-functional requirements.

There are many architectural patterns and styles that have evolved over time with both the functional and non-functional requirements. Software architecture is typically built on a solid foundation using one of these proven architectural mechanisms.

How to pick the right architecture

A poor architecture may expose risks such as unstable systems, being unable to execute immediate or future business requirements or difficulty in managing a production environment.

When the architect first studies the requirements of the new system, they should check to see if the use case can be designed and implemented using an already established architecture pattern.

Because it costs time and money to change an architecture late in the project, this initial phase is very important. One should be very careful when creating software architecture because it is not only costly but also difficult to change, and it may put your application at risk.

The software architecture should have a number of goals beyond basic functionality; it should be flexible and be able to adapt to new business requirements and challenges. For example, a system under development may have the requirement of doubling the number of registered users within a year.

  • Each component of the architecture should have a single responsibility or an aggregation of cohesive functionality.
  • A specific component should not be aware of the details of other components.
  • Duplication should be avoided, and specific functionality should be implemented in one and only one related module.

Importance of picking the right software architecture

Communication between stakeholders is another key to good architecture. As with software architecture plans, there are proven patterns and best practices that you can rely on for success. The most popular way to reduce complexity is by separating concerns and views so that they can be addressed by specific stakeholders.

Modern product development does not allow an upfront, big design; it promotes the use of the agile methodology to break the design into smaller pieces. It should also reduce risk by analyzing the system using modeling techniques and visualizations. For example, a system may be first drafted using enterprise modeling tools like Enterprise Architect or Rational Rose.

The entire team may work in parallel, describing the design and the architecture using those tools. Finally, the architecture developed can be evaluated by proven techniques like the Software Architecture Analysis Method (SAAM).

SAAM was the first documented software architecture analysis method, developed in the 1990s to analyze non-functional requirements and flexibility for change. An in-depth discussion of these techniques is beyond the scope of this course.

We will take a look at the REST architecture in the next lesson.