Introduction to Software Architecture

Work in progress. This note is still being written and incomplete.

Origins of Software Architecture

Software engineers have always used software architectures, often without explicitly realizing it.

Software architecture developed to address important software engineering problems, including:

  • Essential software engineering difficulties
  • Problems associated with programming-in-the-large
  • The need for software reuse

Many architectural ideas also originated from non-computing domains.

Software Engineering Difficulties

Software engineers deal with a unique set of problems because software systems are:

  • Highly complex
  • Intangible
  • Expected to meet tremendous demands
  • Required to conform to changes in other engineering areas

Software is not useful by itself in the same way as a physical product such as a car. Therefore, it must adapt to changes in its surrounding environment.

Software engineering difficulties can be divided into two categories:

TypeDescription
Accidental DifficultiesProblems that can potentially be eliminated through better techniques, tools, or abstractions
Essential DifficultiesFundamental problems that cannot be completely eliminated

Accidental Difficulties

Accidental difficulties are problems for which solutions exist or may be discovered.

Past increases in software productivity came partly from overcoming accidental difficulties.

Inadequate Programming Constructs and Abstractions

Early programming languages made software development more difficult.

This difficulty was reduced through the development of high-level programming languages.

High-level languages improved programmer productivity by providing better abstractions.

Long Programming Turnaround Time

Programmers previously had to wait a long time to see the results of their programming decisions.

This problem was reduced through time-sharing.

Time-sharing reduced turnaround time to a level approaching the limits of human perception.

Heterogeneous Programs

Using different and heterogeneous programs created difficulties for software developers.

This was addressed through integrated software development environments.

These environments integrate different development tasks into a common environment.

Written by October 5, 2026 2 min read
Was this helpful?