Published on

What is software architecture?

image
Authors
  • avatar
    Name
    David Jimenez
    Twitter

Software architectures are approaches to writing software. They provide answers to at least two questions:

  • How should a system be broken up into components? And
  • How should those components interact with one another?

In the case of microservices, the architecture suggests that the system have a number of small services with defined responsibilities (e.g., handling authentication, or processing payments). These services can interact directly with each other (typically over HTTP), but they many not share resources like a database.

N-tier architectures break up system along functional components. One tier is in charge of, say, persisting data while another may handle business logic.

Monoliths, as the name implies, have only one component. That component, in turn, may follow a specific approach. Perhaps it is a simple website following the Model-View-Controller pattern.

This brings us to the point that software architectures apply to different levels. The may apply to entire systems, as the ones described above; to individual applications; or even to user interfaces. It's as if city planning, building architecture, and interior decoration were all bundled into one in the world of software.