Digital reconstruction of the Roman temple "Fanum Fortunae" by the sea: six-columned marble façade, triumphal arch and passers-by in the warm midday light.

What software architecture can learn from the architects of ancient Rome

What does an architect from ancient Rome have to do with modern software architecture? More than you think - discover Vitruvius' three principles for stable, functional and attractive systems.

Even in ancient Rome, the architect Vitruvius (Marcus Vitruvius Pollio) principles that are still valid today - not only in building construction, but also in software architecture. His famous trinity - Firmitas, Utilitas and Venustas - describes what makes good architecture: stability, functionality and attractiveness.

Vitruvius' architectural principles in the building industry

Vitruvius formulated his work between 33 and 22 BC around 15 BC De architecturain which he postulated that a building can only be considered successful if it fulfills three requirements1:

Firmitas - Stability:

A building must be durable and solid, resistant to weathering and loads.
Example: The Roman aqueducts have survived for centuries thanks to their massive stone arches and ingenious statics.

Utilitas - practicality:

A building must serve its intended purpose - be it residential buildings, temples or baths.
Example: The Colosseum, with its 80 entrances, was designed so that over 50,000 people could flow in and out in a very short time.

Venustas - Beauty:

Architecture should also be aesthetically pleasing and appeal to the senses.
Example: The proportions of the Pantheon are based on mathematical harmony, which is still considered beautiful today.

Transfer to software architecture

Just as buildings follow these three principles, digital systems should also Firmitas, Utilitas and Venustas unite. Software must also run stably, offer value-adding functionality and be perceived - by users as well as developers.

Firmitas - stability and durability

In terms of software architecture, this means that your system remains stable - even under load or in the event of an error. Or it can be restored quickly in the event of a failure.

You can achieve this, for example, by:

  • Redundancy & failover
    ≥ 2 pods + anti-affinity via zones, shared storage; PostgreSQL cluster with Patroni
  • Fault tolerance
    Timeouts, retries, bulkheads; monitoring via Prometheus
  • Backup & Recovery
    Snapshots with Velero/pgBackRest, infrastructure via Terraform, pg_restore + DR tests
  • Monitoring & Self-Healing
    Grafana/ELK combination, Kubernetes restarts, Argo rollouts, KEDA for autoscaling
  • Robust APIs
    Backwards-compatible REST/gRPC interfaces with OpenAPI/Protobuf

Utilitas - benefit and function

Architecture must serve its purpose.

A well thought-out software architecture ensures that the requirements placed on it are met. In contrast to buildings, software is frequently adapted or expanded. This means that the architecture must ensure that this can be done economically.

You can achieve this, for example, by:

  • Purpose-oriented architecture
    Patterns that support development & maintenance in the long term
  • Modularity
    Hexagonal architecture or Clean Architecture separates domain and technology
  • Domain-Driven Design (DDD)
    Bounded contexts, clear service responsibility
  • Scalability
    Event-driven microservices with Kafka or RabbitMQ
  • Configurability
    Feature toggles (e.g. openfeature.dev), plug-in systems
  • API-First
    Stable interfaces, independently deployable front & back ends

Venustas - Attractiveness and experience

Good architecture appeals to our senses.
In the digital space, this is reflected in a high developer experience (DX), clear interfaces and comprehensible code.

You can achieve this, for example, by:

  • Developer Experience (DX)
    Structured code, good documentation, consistent dev environments
  • Consistent APIs
    REST/GraphQL, speaking endpoints, suitable granularity
  • Readable code
    Linter, formatter, style guides, peer reviews
  • Modularity in the front end
    Micro front ends, component libraries, monorepos
  • UX-optimized backends
    Backend-for-Frontend (BFF), GraphQL for client-specific payloads
  • DX-Tools
    Fast CI/CD pipelines, Docker-based dev environments

Conclusion: Good architecture is interdisciplinary

Even if buildings and Software are completely different things - good architecture remains interdisciplinary. It unites Function, stability and aesthetics.

Ask yourself with every architectural design:
Does your system live Firmitas, Utilitas and Venustas?

Zdravko Lucic

About ME

Zdravko Lucic has a degree in computer science. He has been working for doubleSlash as Head of Architecture since 2009. As a senior solution architect and project manager, he has worked on numerous projects (especially at BMW AG) his extensive know-how in the design of (Enterprise) IT architectures has proven itself.

All contributions from Zdravko Lucic

Learn more

Further information on our website and in our newsletter

Arrow up