Visual Paradigm Desktop VP Online

Comprehensive Guide to ArchiMate for Enterprise Architecture

Introduction

ArchiMate is an open and independent enterprise architecture (EA) modeling language maintained by The Open Group. It provides a uniform representation for diagrams that describe enterprise architectures, enabling clear communication between stakeholders across business, application, technology, and strategy domains.

With the advent of Diagram as Code approaches using tools like VPasCode and Visual Paradigm, EA teams can now create, version, and collaborate on ArchiMate models more efficiently—making the modeling process more agile, AI-friendly, and integrated into modern DevOps workflows.

ArchiMate EA: Diagram as Code


Key Concepts in ArchiMate

1. Layers

ArchiMate organizes concepts into three primary layers:

  • Business Layer: Describes business services, processes, functions, actors, and roles.

  • Application Layer: Represents application components, services, interfaces, and data objects.

  • Technology Layer: Covers technology services, nodes, devices, system software, and artifacts.

Additionally, there are cross-layer concepts:

  • Strategy Layer: Resources, capabilities, courses of action, and outcomes.

  • Physical Layer: Equipment, facilities, and distribution networks.

  • Implementation & Migration Layer: Projects, work packages, deliverables, and plateaus.

2. Active Structure Elements vs. Behavior Elements

  • Active Structure Elements: Entities capable of performing behavior (e.g., Business Actor, Application Component, Node).

  • Behavior Elements: Units of activity performed by active structure elements (e.g., Business Process, Application Service, Technology Service).

3. Relationships

ArchiMate defines several relationship types:

  • Structural Relationships: Composition, Aggregation, Assignment

  • Dependency Relationships: Association, Dependency, Realization, Serving

  • Dynamic Relationships: Triggering, Flow, Access

4. Viewpoints

Viewpoints define subsets of the language relevant to specific stakeholders:

  • Business Process Cooperation Viewpoint

  • Application Usage Viewpoint

  • Technology Deployment Viewpoint

  • Strategy Viewpoint

  • And many more...


Benefits of Diagram as Code with PlantUML for ArchiMate

  1. Version Control: Store diagrams in Git alongside code.

  2. Collaboration: Multiple team members can edit via pull requests.

  3. Automation: Generate diagrams from CI/CD pipelines.

  4. AI-Friendly: Text-based format is easily parsed and generated by AI assistants.

  5. Consistency: Enforce naming conventions and modeling standards through templates.

  6. Reusability: Create reusable components and snippets.


Getting Started with ArchiMate PlantUML

Prerequisites

  • Install PlantUML (or use online editors like PlantText, PlantUML.com)

  • Use the ArchiMate plugin or standard PlantUML with custom stereotypes

Basic Syntax Structure

@startuml
skinparam backgroundColor white
title ArchiMate Example - Business Layer

' Define Business Layer Elements
actor "Customer" as Customer <<business_actor>>
rectangle "Order Processing" as OrderProcess <<business_process>>
rectangle "Sales Team" as SalesTeam <<business_role>>

' Define Relationships
Customer --> OrderProcess : triggers
SalesTeam --> OrderProcess : assigns

@enduml

ArchiMate PlantUML Examples

Example 1: Business Layer – Order Management Process

@startuml
skinparam backgroundColor white
title Business Layer - Order Management

' Business Actors and Roles
actor "Customer" as Customer <<business_actor>>
rectangle "Sales Representative" as SalesRep <<business_role>>

' Business Processes
rectangle "Place Order" as PlaceOrder <<business_process>>
rectangle "Validate Order" as ValidateOrder <<business_process>>
rectangle "Fulfill Order" as FulfillOrder <<business_process>>

' Business Services
rectangle "Order Service" as OrderService <<business_service>>

' Business Objects
rectangle "Order" as OrderObj <<business_object>>

' Relationships
Customer --> PlaceOrder : triggers
PlaceOrder --> ValidateOrder : flows to
ValidateOrder --> FulfillOrder : flows to
SalesRep --> ValidateOrder : assigned to
OrderService --> OrderObj : accesses
PlaceOrder ..> OrderService : uses

note right of OrderObj
  Contains:
  - Order ID
  - Customer ID
  - Items
  - Status
end note

@enduml

Example 2: Application Layer – E-Commerce System

@startuml
skinparam backgroundColor white
title Application Layer - E-Commerce Platform

' Application Components
rectangle "Web Frontend" as WebFront <<application_component>>
rectangle "Order Service" as OrderSvc <<application_component>>
rectangle "Inventory Service" as InventorySvc <<application_component>>
rectangle "Payment Gateway" as PaymentGW <<application_component>>
rectangle "Database" as DB <<application_component>>

' Application Services
rectangle "Order API" as OrderAPI <<application_service>>
rectangle "Inventory API" as InventoryAPI <<application_service>>

' Application Interfaces
rectangle "REST Interface" as RESTInterface <<application_interface>>

' Data Objects
rectangle "Order Data" as OrderData <<data_object>>
rectangle "Product Data" as ProductData <<data_object>>

' Relationships
WebFront --> RESTInterface : uses
RESTInterface --> OrderAPI : realizes
RESTInterface --> InventoryAPI : realizes
OrderSvc --> OrderAPI : provides
InventorySvc --> InventoryAPI : provides
OrderSvc --> OrderData : reads/writes
InventorySvc --> ProductData : reads/writes
OrderSvc --> PaymentGW : calls
OrderSvc --> DB : persists to
InventorySvc --> DB : persists to

note bottom of DB
  PostgreSQL Database
  Stores all transactional data
end note

@enduml

Example 3: Technology Layer – Cloud Infrastructure

@startuml
skinparam backgroundColor white
title Technology Layer - Cloud Infrastructure

' Technology Nodes
node "AWS Cloud" as AWSCloud <<technology_node>> {
  node "EC2 Instance" as EC2 <<technology_node>>
  node "RDS Database" as RDS <<technology_node>>
  node "S3 Storage" as S3 <<technology_node>>
}

node "On-Premise Server" as OnPrem <<technology_node>>

' Technology Services
rectangle "Compute Service" as ComputeSvc <<technology_service>>
rectangle "Database Service" as DBSvc <<technology_service>>
rectangle "Storage Service" as StorageSvc <<technology_service>>

' System Software
rectangle "Linux OS" as Linux <<system_software>>
rectangle "PostgreSQL" as PostgreSQL <<system_software>>

' Artifacts
artifact "Application WAR" as AppWAR <<artifact>>
artifact "Database Schema" as DBSchema <<artifact>>

' Relationships
EC2 --> ComputeSvc : hosts
RDS --> DBSvc : hosts
S3 --> StorageSvc : hosts
Linux --> EC2 : runs on
PostgreSQL --> RDS : runs on
AppWAR --> EC2 : deployed to
DBSchema --> RDS : deployed to
OnPrem ..> AWSCloud : connects to

note right of AWSCloud
  AWS Region: us-west-2
  VPC with private subnets
end note

@enduml

Example 4: Cross-Layer View – End-to-End Order Flow

@startuml
skinparam backgroundColor white
title Cross-Layer View - Order Processing End-to-End

' === BUSINESS LAYER ===
actor "Customer" as Customer <<business_actor>>
rectangle "Place Order" as BizPlaceOrder <<business_process>>
rectangle "Order" as BizOrder <<business_object>>

' === APPLICATION LAYER ===
rectangle "Web Application" as WebApp <<application_component>>
rectangle "Order Service" as AppOrderSvc <<application_component>>
rectangle "Order API" as OrderAPI <<application_service>>

' === TECHNOLOGY LAYER ===
node "Cloud Server" as CloudServer <<technology_node>>
rectangle "Java Runtime" as JavaRT <<system_software>>

' === CROSS-LAYER RELATIONSHIPS ===
' Business to Application
Customer --> BizPlaceOrder : triggers
BizPlaceOrder ..> WebApp : realized by
WebApp --> OrderAPI : uses
AppOrderSvc --> OrderAPI : provides

' Application to Technology
AppOrderSvc --> CloudServer : deployed on
JavaRT --> CloudServer : runs on
AppOrderSvc --> JavaRT : runs on

' Data Flow
BizOrder <.. AppOrderSvc : accessed by

note left of Customer
Initiates order via
web interface
end note

note right of CloudServer
AWS EC2 Instance
t3.medium
end note

@enduml

 

@startuml
skinparam backgroundColor white
title Cross-Layer View - Order Processing End-to-End

' === BUSINESS LAYER ===
actor "Customer" as Customer <<business_actor>>
rectangle "Place Order" as BizPlaceOrder <<business_process>>
rectangle "Order" as BizOrder <<business_object>>

' === APPLICATION LAYER ===
rectangle "Web Application" as WebApp <<application_component>>
rectangle "Order Service" as AppOrderSvc <<application_component>>
rectangle "Order API" as OrderAPI <<application_service>>

' === TECHNOLOGY LAYER ===
node "Cloud Server" as CloudServer <<technology_node>>
rectangle "Java Runtime" as JavaRT <<system_software>>

' === CROSS-LAYER RELATIONSHIPS ===
' Business to Application
Customer --> BizPlaceOrder : triggers
BizPlaceOrder ..> WebApp : realized by
WebApp --> OrderAPI : uses
AppOrderSvc --> OrderAPI : provides

' Application to Technology
AppOrderSvc --> CloudServer : deployed on
JavaRT --> CloudServer : runs on
AppOrderSvc --> JavaRT : runs on

' Data Flow
BizOrder <.. AppOrderSvc : accessed by

note left of Customer
  Initiates order via
  web interface
end note

note right of CloudServer
  AWS EC2 Instance
  t3.medium
end note

@enduml

Example 5: Strategy Layer – Digital Transformation Initiative

@startuml
skinparam backgroundColor white
title Strategy Layer - Digital Transformation

' Strategy Elements
rectangle "Digital-First Strategy" as Strategy <<strategy>>
rectangle "Customer Experience Capability" as CustExpCap <<capability>>
rectangle "Agile Delivery Capability" as AgileCap <<capability>>
rectangle "Cloud Migration Project" as CloudProject <<course_of_action>>
rectangle "API-First Initiative" as APIInitiative <<course_of_action>>

' Resources
rectangle "Development Team" as DevTeam <<resource>>
rectangle "Cloud Budget" as CloudBudget <<resource>>

' Outcomes
rectangle "Improved CX Score" as CXOutcome <<outcome>>
rectangle "Reduced Time-to-Market" as TTMOutcome <<outcome>>

' Relationships
Strategy --> CustExpCap : requires
Strategy --> AgileCap : requires
CustExpCap --> CloudProject : enables
AgileCap --> APIInitiative : enables
DevTeam --> CloudProject : assigned to
DevTeam --> APIInitiative : assigned to
CloudBudget --> CloudProject : allocated to
CloudProject --> CXOutcome : achieves
APIInitiative --> TTMOutcome : achieves

note bottom of Strategy
  3-Year Strategic Plan
  Focus: Customer-centricity
  and operational agility
end note

@enduml

Best Practices for ArchiMate Modeling with PlantUML

1. Use Consistent Naming Conventions

' Good
rectangle "Order Processing Service" as OrderProcSvc <<application_service>>

' Avoid
rectangle "svc1" as s1 <<application_service>>

2. Organize with Packages/Folders

package "Business Layer" {
  actor "Customer" as Customer <<business_actor>>
  rectangle "Order Process" as OrderProc <<business_process>>
}

package "Application Layer" {
  rectangle "Order Service" as OrderSvc <<application_component>>
}

3. Create Reusable Snippets

Define common elements in separate files and include them:

!include common_business_elements.puml
!include common_application_elements.puml

4. Use Color Coding for Clarity

rectangle "Critical Service" as CriticalSvc <<application_service>> #FF6B6B
rectangle "Standard Service" as StandardSvc <<application_service>> #4ECDC4

5. Document with Notes

note right of Element
  Detailed description,
  assumptions, and constraints
end note

6. Version Your Diagrams

Store PlantUML files in Git with meaningful commit messages:

git add architecture/order_processing.puml
git commit -m "Add Order Processing cross-layer view v1.2"

Integrating ArchiMate PlantUML into EA Workflows

1. CI/CD Pipeline Integration

Generate diagrams automatically on code changes:

# .github/workflows/generate-diagrams.yml
name: Generate ArchiMate Diagrams
on: [push]
jobs:
  generate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Generate PNG diagrams
        run: |
          docker run -v $(pwd):/data plantuml/plantuml /data/*.puml
      - name: Upload artifacts
        uses: actions/upload-artifact@v3
        with:
          name: diagrams
          path: "*.png"

2. Documentation Generation

Combine PlantUML diagrams with Markdown documentation:

# Order Processing Architecture

## Business Process Flow

![Order Process](diagrams/order_process.png)

## Application Components

![Application Layer](diagrams/application_layer.png)

3. AI-Assisted Modeling

Use AI tools to:

  • Generate initial PlantUML code from natural language descriptions

  • Review diagrams for ArchiMate compliance

  • Suggest improvements based on best practices

  • Convert between different EA notation formats

Example prompt for AI:

Generate an ArchiMate PlantUML diagram for a customer onboarding process 
that includes business actors (Customer, Sales Rep), business processes 
(Submit Application, Verify Identity, Create Account), application 
components (CRM System, Identity Verification Service), and their 
relationships.

Common ArchiMate Patterns

Pattern 1: Service-Oriented Architecture

 

@startuml
rectangle "Consumer Application" as Consumer <<application_component>>
rectangle "Service Interface" as ServiceInterface <<application_interface>>
rectangle "Service Provider" as Provider <<application_component>>

Consumer --> ServiceInterface : uses
Provider --> ServiceInterface : provides
@enduml

Pattern 2: Layered Architecture

 

@startuml
package "Presentation Layer" {
  rectangle "Web UI" as WebUI <<application_component>>
}

package "Business Logic Layer" {
  rectangle "Business Service" as BizSvc <<application_component>>
}

package "Data Access Layer" {
  rectangle "Repository" as Repo <<application_component>>
  rectangle "Database" as DB <<application_component>>
}

WebUI --> BizSvc : calls
BizSvc --> Repo : uses
Repo --> DB : accesses
@enduml

Pattern 3: Event-Driven Architecture

@startuml
rectangle "Order Service" as OrderSvc <<application_component>>
rectangle "Order Created Event" as OrderEvent <<application_event>>
rectangle "Inventory Service" as InventorySvc <<application_component>>
rectangle "Notification Service" as NotifSvc <<application_component>>

OrderSvc --> OrderEvent : publishes
OrderEvent --> InventorySvc : triggers
OrderEvent --> NotifSvc : triggers
@enduml

Conclusion

ArchiMate provides a powerful, standardized language for enterprise architecture modeling. By combining ArchiMate with Diagram as Code approaches using PlantUML, EA teams can:

✅ Increase agility through version-controlled, collaborative modeling
✅ Improve consistency with reusable templates and standards
✅ Enable automation via CI/CD integration
✅ Leverage AI for faster diagram generation and review
✅ Maintain documentation that stays synchronized with implementation

This approach bridges the gap between traditional EA practices and modern software development methodologies, making enterprise architecture more accessible, maintainable, and valuable to the organization.

Turn every software project into a successful one.

We use cookies to offer you a better experience. By visiting our website, you agree to the use of cookies as described in our Cookie Policy.

OK