Home / Blog / C4 & Software Architecture

When to Use C4 Instead of ArchiMate (and When to Use Both)

Ask an enterprise architect and a software architect which notation is "correct" and you'll get two confident, opposite answers, usually delivered with a little impatience at the question. The enterprise architect will point at a portfolio of four hundred applications and ask how C4 proposes to show which of them support the claims-handling capability. The software architect will point at an ArchiMate diagram with nine relationship types and forty stereotypes and ask why anyone would put a new developer through that just to understand one payments service. Both are right, because they're answering different questions. The interesting part isn't picking a winner — it's noticing that the two notations were built to solve different problems at different altitudes, and a lot of the friction people report comes from using one where the other was needed.

This isn't a diplomatic "it depends" dodge. There's a structural reason the two pull in different directions, and once you see it, deciding which to reach for — or when to reach for both — stops being a matter of taste.

Two notations built for different altitudes

ArchiMate exists to answer questions that cross layers: does this application serve a business process that actually matters to the organization? Which technology components realize which application services? If we retire this system, which business capabilities lose support? Its three core layers — Business, Application, Technology — and the formal relationship types that connect them (serving, realization, assignment, triggering, flow, and a dozen more) exist specifically so that a change at the technology layer can be traced up to a business consequence, and a business goal can be traced down to the systems that deliver it. That's the entire point of the notation. It was designed by people who needed to answer "what does this system actually do for the business, and what happens if it goes away" across a portfolio too large for any one person to hold in their head.

C4 was built for a narrower and much more common problem: a team needs to explain one software system to itself and to the people around it, at a few different zoom levels, without inventing a diagramming convention from scratch every time. Context, Containers, Components, and (rarely used) Code — four levels, a handful of shapes, boxes and arrows anyone can read in thirty seconds. It was designed by a working software architect, Simon Brown, specifically as a reaction against notations that required training to use and produced diagrams nobody outside the authoring team could parse. It doesn't attempt portfolio governance, business capability mapping, or motivation modelling, because that was never the job it was built to do.

So the fair comparison isn't "which notation is more powerful." ArchiMate is unambiguously more powerful, in the sense of having more concepts, more relationship semantics, and more reach across an organization. The fair comparison is "which notation is proportionate to the question you're actually being asked" — and most days, most people are being asked a much smaller question than the one ArchiMate was built to answer.

What ArchiMate is genuinely good at

The case for ArchiMate is strongest exactly where people usually stop reading: business-to-technology traceability across many systems at once. A few concrete things it does well that C4 was never meant to do:

The cost of all that reach is real, and worth being honest about. A newcomer looking at a well-populated ArchiMate model for the first time is looking at business actors, business processes, business services, application components, application services, technology nodes, artifacts, and a relationship set that distinguishes serving from realization from assignment from triggering from flow — with rules about which relationship types are even valid between which element types. None of that is accidental complexity; every piece of it exists because some enterprise architecture problem needed it. But it's a genuine learning curve and a genuine amount of ceremony to keep a model consistent, and most of it is dead weight if what you actually needed to communicate was "here's how our payments service talks to Stripe and our fraud engine."

What C4 is genuinely good at

C4's case is the mirror image: depth and clarity on a single system, at a cost that's close to zero.

The honest cost, in the other direction: C4 has no native way to say "this system supports the claims-adjudication business capability" or "retiring this container violates the data-residency principle," because it has no business layer and no motivation layer at all. It also has no concept of a multi-system portfolio — a Context diagram shows one system and its neighbors, but there's no C4 artifact for "here are our four hundred systems, grouped by domain, with ownership and lifecycle status." People sometimes stretch C4 to cover that ground by drawing a Context diagram per system and hoping the collection adds up to a landscape. It doesn't, because nothing formally connects them, and nothing enforces that the same real-world dependency is represented consistently across diagrams drawn by different teams at different times.

ArchiMate breadth across a portfolio versus C4 depth on one system ArchiMate — breadth Business layer Application layer Technology layer one system, in context of many zoom in C4 — depth Container: one system Web App API Service Database Queue containers, components, code
ArchiMate spans business, application, and technology across a whole portfolio; C4 zooms into one system's internal structure. Neither is a smaller or larger version of the other — they answer different questions.

Comparing them directly

DimensionArchiMateC4
Unit of analysisThe whole portfolio, across business/application/technologyOne software system, at up to four zoom levels
Learning curveSteep — dozens of element and relationship typesShallow — four diagram types, everyday vocabulary
Business alignmentNative — business layer, motivation layerNone — no business capability or goal modelling
Governance fitStrong — designed for institutional/regulatory useWeak — not built with governance frameworks in mind
Cross-system traceabilityNative — formal typed relationships across layersManual — context diagrams reference neighbors informally
AudienceEnterprise architects, governance boards, portfolio ownersDevelopers, solution architects, delivery teams
Time to a usable diagramHours to days, plus modelling conventions to agree onUnder an hour for a first Context diagram
Typical failure modeCeremony outweighs the question being askedStretched past one system, breaks down as false landscape

Where each one actually breaks

The failure modes are as informative as the strengths, because they're where people usually discover they picked the wrong tool six months too late.

ArchiMate breaks down, in practice, when it's applied to a single-system documentation problem that never needed layered traceability in the first place. A three-person team building one microservice does not need business actors, application services, and technology nodes modelled with formal realization relationships to explain how their service talks to a queue and a database. What happens instead, routinely, is that the notation's ceremony becomes a tax on documentation that discourages anyone from keeping it current — the diagram gets drawn once, for a design review, and never touched again, because updating it correctly means understanding relationship semantics nobody on the team has time to relearn.

C4 breaks down, just as predictably, when it's asked to do portfolio-level work it was never built for. The most common version: an organization draws a Context diagram for each of its thirty systems, and someone tries to staple those together into an application landscape. It doesn't work, because a Context diagram's "external systems" are informal boxes with no shared identity across diagrams — System A's Context diagram might draw System B as a single box labelled "Billing," while System B's own diagram calls itself something slightly different, and nothing in C4 forces those to reconcile. There's also nowhere in C4 to attach the business-capability question at all: "which of our systems support regulatory reporting" is not answerable from a stack of Container diagrams, because C4 was never given a business layer to answer it with.

Concrete guidance: who should reach for which

Stripped of the notation debate, the decision usually comes down to whose question you're answering and at what scope.

If you're a solution or software architect documenting one system for your own team — the usual case is a service or a small set of services one team owns end to end — C4 is almost always the right default. You want something a new hire can read in ten minutes, something a security reviewer can annotate without a notation lesson first, and something that doesn't demand upkeep discipline beyond "keep four diagrams roughly current." The Context diagram answers "what is this and who/what talks to it." The Container diagram answers "what are the moving deployable pieces." The Component diagram is optional and, honestly, often skipped in practice because code organization tends to answer that question better than another diagram would.

If you're an enterprise architect responsible for a portfolio and its alignment to the business — deciding what to retire, what to consolidate, which systems support which capability, what a new regulation touches — ArchiMate is the notation built for exactly that job, and reaching for C4 here means reinventing, badly, the parts of ArchiMate you actually need: typed cross-layer relationships, a business layer, and a shared identity for every system referenced from multiple views.

The size of the organization matters less than the shape of the question. A twelve-person startup with one product doesn't need ArchiMate even though it's a real company with real business goals — there's no portfolio to govern yet. A four-hundred-system public-sector agency documenting one new payments microservice for the delivery team building it doesn't need to route that documentation through the enterprise repository's full relationship vocabulary just because the organization happens to be large. Match the notation to the question being asked, not to the size of the org asking it.

A realistic scenario where an organization legitimately needs both

Take a mid-sized insurer with roughly one hundred and fifty applications, an enterprise architecture team responsible for the portfolio, and a dozen delivery teams each owning a handful of systems. This is not a hypothetical edge case — it's close to the median shape of any organization that would end up modelling its landscape in something like Mooodels in the first place.

At the enterprise level, the EA team maintains an ArchiMate application landscape: which applications exist, which business capabilities they support (claims intake, policy administration, fraud detection, regulatory reporting), which technology platforms they run on, and how a change to any one of them ripples through the others. This is the artifact the governance board reviews before approving a new system, the artifact that answers "what supports claims intake" during a merger due-diligence exercise, and the artifact that makes a decommissioning decision defensible rather than a guess.

Inside that landscape, the fraud-detection application is one box — one element, with a name, an owner, a lifecycle stage, and formal relationships to the systems it serves and depends on. But the team that owns fraud detection doesn't live at that altitude day to day. They need to know: does the new rules engine talk to the case-management API synchronously or through a queue? What does the ingestion container look like? What's the blast radius if the scoring service goes down? That's a C4 Context-and-Container conversation, scoped entirely inside the one box the enterprise landscape treats as a single element.

Both views are legitimate, both are necessary, and — this is the part that usually goes wrong — both are describing the same real system. The fraud-detection application in the enterprise landscape and the fraud-detection system in the team's C4 diagrams are not two different things that happen to share a name. They're the same object, looked at from two altitudes.

The question that actually matters: when the fraud-detection team adds a new container — say, a separate scoring service split out of the monolith — does that fact reach the enterprise landscape automatically, or does someone have to remember to go update a completely separate ArchiMate diagram in a completely separate tool, weeks or months later, if at all?

The usual pain: two toolchains, one system, no shared truth

Most organizations answer that scenario by running two disconnected toolchains — an EA repository for the ArchiMate landscape, and whatever the delivery teams use for C4 (often a lightweight diagramming format kept alongside the service repo, or a general-purpose diagramming tool). Nothing connects them except a person's memory and, if the organization is disciplined, a periodic manual reconciliation exercise.

The predictable result is drift. A container gets added, split, or retired inside a team's C4 diagrams as part of normal delivery work, and the enterprise landscape — which represents that whole system as a single box — has no way to know anything changed unless someone manually walks over and updates it. Multiply that by a dozen teams and eighteen months, and the enterprise landscape stops being trustworthy for exactly the governance questions it exists to answer. Worse, because the two toolchains use unrelated identifiers for what is conceptually the same system, there's no reliable way to even ask whether the C4 documentation for fraud detection agrees with what the enterprise landscape says fraud detection is — answering that requires a human to read both and compare them by eye, the same archaeology problem architecture repositories were supposed to solve in the first place.

The translation tax shows up in smaller ways too. Renaming a system means updating it in two places under two different naming conventions. A new relationship discovered at the container level — the fraud service now calls out to a third-party sanctions-screening API — technically changes the enterprise risk picture, but nothing forces that fact to propagate upward, because nothing links the C4 diagram's boxes to the ArchiMate element they're inside.

Why one model, two profiles, beats two toolchains

This is the specific problem a profile-based canonical model is built to remove. In Mooodels, ArchiMate and C4 aren't two separate products bolted together — they're two profiles that can be applied to the same underlying elements in the same model. The fraud-detection application isn't duplicated as "an ArchiMate element" in one system and "a C4 system" in another; it's one element with a stable identity, and the enterprise landscape view renders it through the ArchiMate profile (as an Application Component, with its formal serving and realization relationships to the business layer) while a nested view renders its internals through the C4 profile (as a System Context and Container diagram, using containers and the informal-but-precise C4 relationship style developers actually reach for).

Concretely, that fraud-detection system exists exactly once in the model, and each profile expresses a different facet of the same object rather than a separate copy of it. Seen through the ArchiMate profile it is an application-layer component with an owner, a lifecycle stage, and formal relationships to the capabilities it supports — claims intake, regulatory reporting. Seen through the C4 profile, the same element opens into a container view: a web gateway, a scoring service, a rules engine, a case database, and the calls and events running between them, each carrying the technology it actually runs on. Neither facet is a copy of the other. They are two vocabularies pointed at one object.

Add a container inside that C4 view, and the object it belongs to — the fraud-detection element itself — is the same element the enterprise landscape already has a box for, with the same stable ID. There's nothing to reconcile after the fact, because there was never a second copy to drift. The enterprise architect's impact-analysis query ("what depends on this application, and what does it support") still runs against the ArchiMate-layer relationships exactly as before; it's simply now backed by a model that also happens to contain the detailed internal structure the delivery team maintains for its own purposes, rather than a model that's blind to it.

This is also where an AI assistant earns its keep without being trusted to make the call unsupervised. Splitting a container out of a monolith, retiring a data store, or adding a new external dependency are exactly the kind of changes that are easy to make correctly inside one profile's view and easy to forget to reflect anywhere else. An assistant that can see the whole model — the ArchiMate relationships and the C4 containers together — can propose the update as a single reviewable ModelPatch: add the new container, and if the change plausibly affects a capability mapping or crosses a governance boundary at the ArchiMate layer, flag that as part of the same proposal instead of leaving it for someone to notice eighteen months later. Nothing is applied without a human approving the patch, but the proposal itself is only possible because the model underneath both profiles is the same object graph, not two files that happen to describe related things.

"Doesn't mixing two notations in one model just create a different kind of mess?"

Only if the two notations are forced to describe the same facts twice, which is exactly what a profile avoids. ArchiMate and C4 aren't being blended into a hybrid third notation here — each keeps its own vocabulary, its own relationship rules, its own diagram conventions, applied to the same underlying elements at different scopes. The enterprise landscape view never shows a C4 container, and the team's Container diagram never shows an ArchiMate business actor. What's shared isn't the notation; it's the identity of the object underneath it, which is precisely the thing that was silently duplicated — and silently drifted — under a two-toolchain setup.

"Does every team now have to learn ArchiMate to update their C4 diagrams?"

No, and that's the point of keeping profiles separate rather than merging them. The fraud-detection team works entirely in the C4 profile, in C4 vocabulary, at C4 zoom levels. They never touch a business layer or a realization relationship. The ArchiMate view of their system — its capability mapping, its place in the landscape — is maintained by the enterprise architecture team, using ArchiMate's own vocabulary, against the same element. Each side works in the notation suited to their question; neither has to learn the other's to keep their own accurate.

The pattern generalizes past insurance

Swap the industry and the shape holds. A public-sector agency running an ArchiMate-based enterprise repository while its teams document individual case-management or citizen-portal systems in C4 hits the identical translation problem, and needs the identical fix. A logistics company with an ArchiMate view of its warehouse-management and routing-optimization landscape, where each system's own team documents internals in C4, is the same pattern again. The common thread isn't the sector — it's the two-altitude structure that shows up wherever a portfolio-owning function and system-owning delivery teams both need architecture documentation to be trustworthy, without either side maintaining the other's notation by hand.

None of this is an argument that ArchiMate and C4 should be merged into one notation, or that one should be phased out in favor of the other — that would throw away exactly what each is good at. ArchiMate's formal, typed, cross-layer relationships are what make portfolio-wide governance queries answerable at all; simplifying them away in the name of consistency with C4 would make the landscape view useless for the questions it exists to answer. C4's deliberate simplicity is what makes it fast enough that teams actually keep it updated; loading it with ArchiMate's relationship vocabulary would kill the exact property that makes it work. The fix isn't a compromise notation. It's making sure the two notations describe one object, instead of two objects that happen to look alike.

Pick C4 when the question is about one system and the people who need the answer are the ones building it. Pick ArchiMate when the question crosses systems and has to hold up in front of a governance board. And when an organization genuinely needs both — which most organizations past a certain size do — the goal isn't choosing a winner or running two disconnected repositories that quietly disagree with each other over time. It's making sure "the fraud-detection system" means the same underlying thing whether someone is looking at it from the enterprise landscape or from inside the team that owns it — which is the problem Mooodels' profile model was built to remove, rather than manage.

See the model this article describes, working in a real editor.

Try the live demo