Image without description
  • Jacco Meijer
  • |
  • Mar 18, 2025

Visualizing IT Architecture in three languages, UML, C4 and ArchiMate

What are the differences and what are these languages most used for?

IT Architecture languages

UML, C4 and ArchiMate all three can be used for visualizing IT Architecture. This does however not mean that they are equal. Each of the languages was designed for a specific need.

UML originated in 1994 because there was a need to describe object-oriented software. In 2006 the need for more structure than the UML arrows and boxes resulted in the C4 language.

In 2002 ArchiMate development started because of the need for a language to describe an enterprise.

From an ArchiMate perspective C4 defines a number of viewpoints.

UML

The Unified Modeling Language (UML) was designed to be a general-purpose modeling language for visualizing system design. It provides a language for many types of diagrams including behavior diagrams, interaction diagrams, and structure diagrams.

UML is said to be decreasing in popularity (source: Google Trends) but the language being around for more than 30 years and it's general-purpose nature make that it's use is still widespread.

UML Diagrams

UML provides language for many types of diagrams. The model below shows the two major groups: behavior and structure. Where behavior contains a third group named interaction.

Image without description

Who uses UML?

As mentioned, the use of UML is widespread. Activity Diagrams are well known for visualizing system flows. Within software development these diagrams are often used:

  • use case diagrams, for interactions between actors;
  • class diagrams, for class relationships, attributes and methods;
  • sequence diagrams, for a sequence of messages between participants.
Image without descriptionImage without descriptionImage without description

C4

The C4 language was designed to be easy to learn and developer friendly. It reaches that goal by focussing on clarity and simplicity.

From the C4 documentation:

A software system is made up of one or more containers (applications and data stores), each of which contains one or more components, which in turn are implemented by one or more code elements (classes, interfaces, objects, functions, etc).

The four emphasized words in this one sentence correspond to the four static structure diagrams that define the core of C4.

  1. (system) context diagram
  2. container diagram
  3. component diagram
  4. code diagram

Additionally there's three more diagrams:

  1. system landscape diagram
  2. dynamic diagram
  3. deployment diagram

But that's it. Simple to use and easy to learn.

C4 elements

Image without description

Who uses C4?

C4 being specifically designed for software architecture it is mainly used by solution and software architects. Security and enterprise architects tend to choose for ArchiMate instead because of the limited C4 set of elements.

ArchiMate

From the three languages in this post, UML defines more than 100 elements. C4 is a lot simpler with no more than 10 elements. The 3.2 Specification of ArchiMate counts around 60 elements.

One of the ArchiMate design goals was to make ArchiMate 'as small as possible' and not to cover every possible edge case. When describing something as large as an enterprise, 'small' has relative meaning. Compared to C4, being able to model with 60 elements divided over six layers allows for much more aspects.

The image below however is really brief and shows the full ArchiMate framework.

Image without description

Who uses ArchiMate?

ArchiMate was designed to model an enterprise which makes it the obvious choice for Enterprise Architects. In a team of architects the language allows for clear communication between the layers that the ArchiMate framework defines.

As there are many architect roles, this paragraph evolved into a separate post. More on how architect roles map to the ArchiMate layers in the post below.

Image without description
  • Jacco Meijer
  • |
  • Mar 18, 2025

Architect roles in the ArchiMate context

An ArchiMate model that maps architect roles to the ArchiMate framework layers.

ArchiMate Elements

The list below gives an impression of the wide range of ArchiMate elements and what they are used for.

Motivation elements

Motivation elements are at the core of the ArchiMate language. These elements guide the design of an enterprise and answer to the 'Why' in the Zachman framework.

For example, strategy elements can influence goals. Another example is a business or application element that realizes a principle or a requirement.

Image without description

Strategy elements

Contrary to business and application elements, strategy elements do not define a service or an interface element. This is because the abstraction level of the strategy layer is higher than the business layer.

A capability, for example, can serve a value stream and a resource can be assigned to a capability that realizes a goal in the motivation stack.

Image without description

Business elements

Business elements model the operation of an enterprise.

These elements can be used to describe how e.g. a customer role relates to a business service, how a work processes relates to a service on the application layer or to e.g. detail the steps a business process.

Image without description

Application elements

Application elements model applications and information. The main active structure element is the component.

A function for example can be used to describe how a data object is accessed. With a component assigned to the function the software component that provides the function can be expressed. Interfaces and services are often used to connect functions and components to business elements.

Image without description

Technology elements

Technology elements model technical infrastructure. The main active structure element is the node.

A service is often modeled to serve a function on the application layer and a node typically connects to a network element which could connect to e.g. a device. Functions can be used to e.g. model data replication.

Image without description

Implementation and Migration elements

Implementation and migration elements are used for programs and planning.

An event could trigger a work package which could then realizes a deliverable.

Image without description

Relationships

ArchiMate defines structural relationships as shown in the first diagram below. The second diagram shows dependency relationships and the third diagram shows dynamic relationships. The last group with the Specialization relationship is named 'other'.

Image without descriptionImage without descriptionImage without description

C4 compared to ArchiMate

C4 can be seen as a subset of ArchiMate, the C4 diagrams can be expressed with the Archimage viewpoint concept. Depending on how you look at it, the C4 elements can be mapped in a couple of ways to ArchiMate elements.

System

The C4 system element is described as something that delivers value to users which could map to the ArchiMate value stream on the strategy layer. C4 also defines a system as something a single software development team is building. The ArchiMate application function or application component would then be a better fit.

Container

The C4 Container element is described as something that needs to be running for the system to work. The ArchiMate application component could be used to express this.

Component

The C4 documentation states that a Component is a hugely overloaded term. And of course, the word component can be used in many different ways. C4 defines it as grouping of related functionality encapsulated behind a well-defined interface. This could be an ArchiMate application component or application service. The well-defined interface can be modelled separately in ArchiMate by using the application interface.

Code

The C4 element Code is hard to model in ArchiMate. The application component can be used to express a software library and the data object can be used, but concepts like classes, attributes and methods are not available. The application component can be used for this if you really have to, but UML and C4 are a much better suited for this.

Application Component

Simply put, all C4 elements can be modeled with the ArchiMate application component. It makes clear how C4 and ArchiMate differ. C4 defines four sizes of application components whereas ArchiMate has nine different application elements like interface, function and service that can be used to add more detail.

Besides the application layer, ArchiMate defines five other layers and has motivation elements.

Structure as code

All three languages have structure as code equivalents of which PlantUml is the most popular. PlantUml can be extended to support the ArchiMate and C4 languages by using macro libraries.

PlantUml uses sequential text scripts to model a diagram. Because PlantUml sequence diagrams and text scripts share the same sequential nature sequence diagrams can conveniently be modeled with PlantUml.

For other diagrams and especially when modeling ArchiMate a platform like Bizzdesign Horizzon with integrated collaboration capabilities, comes highly recommended.


Other posts

Image without description
  • Jacco Meijer
  • |
  • May 1, 2025

CISSP certification and Enterprise Architecture

How do the CISSP certification domains relate to Enterprise Architecture and the ArchiMate layers?

Image without description
  • Jacco Meijer
  • |
  • Apr 23, 2025

Architect roles in the ArchiMate context

An ArchiMate model that maps architect roles to the ArchiMate framework layers.

Image without description
  • Jacco Meijer
  • |
  • Feb 18, 2025

OAuth 2.0 and OpenID Connect Sequence Diagrams

Technical specs can be hard to read. While still highly technical, the UML Sequence Diagrams provided in this blog are a lot easier to understand.

Image without description
  • Jacco Meijer
  • |
  • Jan 9, 2025

OWASP and CISSP

OWASP recommendations from the independent information security certification CISSP.

Image without description
  • Jacco Meijer
  • |
  • Mar 21, 2024

UI Library with MDX documentation

Using the simple Render JSX plugin for Esbuild this post shows how to setup a simple UI library.

Image without description
  • Jacco Meijer
  • |
  • Mar 20, 2024

Render JSX plugin for Esbuild

Transform Esbuild generated JSX bundles to HTML pages.

Image without description
  • Jacco Meijer
  • |
  • Mar 19, 2024

Esbuild as a static site generator for MDX

Static site generators gain popularity. This blog is about using Esbuild as a static site generator for MDX.

Image without description
  • Jacco Meijer
  • |
  • Mar 18, 2024

11ty and Github pages

Simplifying the Contentful-Gatsby-Netlfy trio.

Image without description
  • Jacco Meijer
  • |
  • Jun 30, 2022

NPM7 and @npmcli/arborist

@npmcli/arborist is a powerful library that handles the new NPM 7 workspaces. This blog is about a simple make tool that uses the library.

Image without description
  • Jacco Meijer
  • |
  • May 12, 2022

Comparing React app, Nextjs and Gatsby

A new React project starts with a React toolchain. Main tools in the chains are SSR, React server components and GraphQL.

Image without description
  • Jacco Meijer
  • |
  • May 10, 2022

Versioning strategy for NPM modules

It is important to be able to bump the version of a NPM package without side effects.

Image without description
  • Jacco Meijer
  • |
  • Apr 12, 2022

React component themes and CSS variables

Creating React components with flexible themes by using CSS variables.

Image without description
  • Jacco Meijer
  • |
  • Mar 21, 2022

Content modeling with variants

The efficiency of a variant field in a content model.

Image without description
  • Jacco Meijer
  • |
  • Mar 12, 2022

Documentation

Documenting a software project is challenging. Here's a few simple guidelines that help a team writing clear documentation.

Image without description
  • Jacco Meijer
  • |
  • Mar 11, 2022

Javascript history

In 1986 David Ungar and Randall B. Smith developed Self at Xerox PARC. Inspired by Java, Scheme and Self Brendan Eich created Javascript in 1995.

Image without description
  • Jacco Meijer
  • |
  • Mar 10, 2022

On Javascript transpilers, bundlers and modules

There's Javascript transpilers, modules, bundles and bundlers. This is a brief overview of all of these.

Image without description
  • Jacco Meijer
  • |
  • Feb 11, 2022

Agile Scrum

The Agile Scrum framework is flexible enough to be used in many different ways. Here's one way of working.

Image without description
  • Jacco Meijer
  • |
  • Jan 20, 2022

What happened to Wheelroom?

Founded in 2018. Started to fly in 2020 and abandoned in 2021. What happened?

Image without description
  • Jacco Meijer
  • |
  • Jan 19, 2022

Contentful, Netlify and Gatsby four years later

What did we learn from using Contentful for four years?

Image without description
  • Jacco Meijer
  • |
  • Jan 18, 2022

Typescript interface for React UI components

How to define an interface for React UI components that prevents breaking changes.

Image without description
  • Jacco Meijer
  • |
  • Jan 17, 2022

Naming React components

What's in a name? A clear naming strategy helps developers communicate. Most devs rather spend time writing component code than wasting time on a good component name.