MDG Technology patterns for common EA use cases
Your MDG Technology is the contract your metamodel enforces. It decides what your model is allowed to represent, how elements relate to one another, and which quality rules hold the whole thing together. Get that contract right and the model becomes navigable, reportable, and governable at scale. Get it loose and every downstream view inherits the ambiguity.
The short version: this is a reference guide to five MDG patterns we reach for again and again — capability maps, application portfolios, integration maps, process decomposition, and technology lifecycle. Each one gives you the element types to define, the tagged values that matter (with exact names and data types), the relationships to enforce, and the Quick Linker configuration that makes the pattern usable day to day. Copy them, adapt them to your standards, and ship them.
None of this is academic. A precise metamodel is the difference between an architecture anyone can query and a pile of diagrams only their author understands. The patterns below have been pressure-tested on real Sparx EA repositories — see why we build on Sparx EA for the platform reasoning behind them.
1. Capability Map (TOGAF-aligned)
What it does: represents a capability hierarchy with decomposition, linked to the business processes, applications, and organizational units that realize and own each capability. A standard TOGAF approach, structured so the graph reads cleanly for both stakeholder reporting and automated traversal.
Element types
Capability(stereotyped Business Function or custom)BusinessProcess(stereotyped Activity)ApplicationComponent(realizes capabilities)OrganizationalUnit(owns capabilities)
Key tagged values
| Name | Type | Purpose |
|---|---|---|
strategic_importance |
Enumeration: Strategic, Important, Operational, Legacy |
Prioritizes capabilities for investment |
maturity_level |
Enumeration: Nascent, Repeatable, Defined, Managed, Optimized |
Maturity model alignment |
owner_name |
String | Direct ownership reference (queryable) |
owner_unit |
Reference (to OrganizationalUnit) | Organizational context |
value_driver |
String | Links to business outcomes |
annual_investment |
String | Budget context (free-form; exact figures optional) |
Relationships
- Capability decomposes to Capability (stereotype:
decomposed_by) - Capability realizes BusinessProcess (stereotype:
realised_by_process) - ApplicationComponent realizes Capability (stereotype:
realises_capability) - OrganizationalUnit owns Capability (stereotype:
capability_owner)
Quick Linker config
- Source: Capability
- Target: ApplicationComponent, BusinessProcess, OrganizationalUnit
- Direction: Outbound (shows realizing apps, processes, owners)
- Display: Show tagged values for
strategic_importanceandmaturity_levelin tooltips
Why this works: stakeholders grasp it on sight, and the explicit relationships let a reader — or a reporting query — traverse the capability graph to answer "what apps support this capability?" and "who owns this?" without guessing. Because the tagged values carry the strategic and maturity signal directly, the same structure feeds gap analysis and stakeholder reporting straight from the model.
2. Application Portfolio (with lifecycle attributes)
What it does: captures the application landscape with vendor, version, lifecycle stage, and business criticality, linked to the infrastructure it runs on, the capabilities it realizes, and the data it touches. This is the backbone of any serious application portfolio management effort.
Element types
ApplicationComponent(stereotype:Application)Node(infrastructure; stereotype:HostingEnvironment)DataObject(consumed/produced data)Capability(realized by application)
Key tagged values
| Name | Type | Purpose |
|---|---|---|
vendor_name |
String | Application vendor |
vendor_product |
String | Product name or SKU |
current_version |
String | Current deployed version |
lifecycle_stage |
Enumeration: Strategic, Stable, Sunset, Retired |
End-of-life planning |
end_of_life_date |
Date (YYYY-MM-DD) | Support cutoff date |
business_criticality |
Enumeration: Critical, High, Medium, Low |
Downtime impact |
owner_team |
String | Support/operations owner |
annual_cost |
String | TCV or annual run-rate |
data_classification |
String | PII, Sensitive, Internal, Public |
Relationships
- ApplicationComponent
hosted_onNode - ApplicationComponent
realisesCapability - ApplicationComponent
consumesDataObject - ApplicationComponent
producesDataObject - ApplicationComponent
interfaces_withApplicationComponent (stereotype:api_interfaceorbatch_interface)
Quick Linker config
- Source: ApplicationComponent
- Target: Node, Capability, DataObject, ApplicationComponent
- Filters: Show only applications with
business_criticalityof Critical or High for the executive dashboard - Display: Lifecycle stage as icon; end-of-life date as alert if within 18 months
Why this works: portfolio planning is a standing conversation, and this structure puts every retirement, consolidation, and capability-gap question in one queryable place. Retirement roadmaps and vendor-consolidation cases fall straight out of the lifecycle and criticality tags, while the data_classification tag does double duty for integration governance and data-residency checks.
3. System Integration Map
What it does: documents the interfaces, protocols, data contracts, and message flows between applications — the closest thing most organizations have to an integration blueprint that is actually maintained.
Element types
ApplicationComponent(source and target)InterfaceSpecification(the contract)DataObject(payloads)TechnologyService(protocols and standards)
Key tagged values
| Name | Type | Purpose |
|---|---|---|
protocol_type |
Enumeration: HTTP/REST, SOAP/XML, Message Queue, Database, File Transfer, FTP, Direct |
Integration method |
data_format |
Enumeration: JSON, XML, CSV, Binary, Protobuf, Avro, EDI, Proprietary |
Payload structure |
call_frequency |
Enumeration: Real-time, Near-real-time, Batch Hourly, Batch Daily, Batch Weekly, On-demand, Event-driven |
Synchronization pattern |
sla_response_time |
String | e.g., "< 1 second", "< 5 minutes", "24 hour batch" |
sla_availability |
String | e.g., "99.9%", "Business hours only" |
owner_name |
String | Integration owner (usually the application owner on the source side) |
is_deprecated |
Boolean | Flag for sunset integrations |
replacement_interface |
Reference (to InterfaceSpecification) | Forward reference for decommissioning |
Relationships
- ApplicationComponent
integrates_withApplicationComponent via InterfaceSpecification - InterfaceSpecification
usesTechnologyService (protocol definition) - InterfaceSpecification
carriesDataObject (payload definition) - InterfaceSpecification
implemented_byApplicationComponent (the middleware that enables it)
Quick Linker config
- Source: ApplicationComponent
- Target: ApplicationComponent (showing all integrations)
- Filters: Option to show only
is_deprecated = truefor integration-rationalization views - Display: Protocol as edge label; SLA as tooltip; color-code by frequency
Why this works: integration debt stays invisible until someone maps it. Once the interfaces, protocols, and SLAs live as structured data rather than tribal knowledge, the brittle chains and soon-to-be-cut interfaces surface on their own, and questions like "show me all batch integrations" or "which apps call this service?" become an instant query instead of an afternoon of archaeology.
4. Business Process Decomposition (BPMN with organizational overlay)
What it does: a BPMN subprocess hierarchy linked to roles, systems, and data — who does what, with which systems, on what data.
Element types
Activity(stereotypedBPMNProcessfor top-level;BPMNSubProcessfor children)Role(org unit representing a job function)ApplicationComponent(systems used in a process step)DataObject(created, modified, used)Lane(swimlane; use to associate role with process)
Key tagged values
| Name | Type | Purpose |
|---|---|---|
process_stage |
Enumeration: Design, Active, Deprecated, Archived |
Process lifecycle |
owner_role |
Reference (to Role) | Accountable party |
cycle_time_target |
String | e.g., "5 business days", "4 hours" |
sla_definition |
String | Service level expectation |
manual_effort_hours |
Decimal | Est. human effort per instance |
exception_rate |
String | e.g., "2%", "< 1%" (typical exception frequency) |
is_automated |
Boolean | True if RPA or full system automation |
automation_tool |
String | e.g., "RPA UiPath", "Workflow Engine" |
Relationships
- BPMNProcess decomposes to BPMNSubProcess
- BPMNSubProcess
assigned_toRole (via Lane stereotype) - BPMNSubProcess
usesApplicationComponent - BPMNSubProcess
readsDataObject - BPMNSubProcess
writesDataObject - BPMNSubProcess
modifiesDataObject
Quick Linker config
- Source: BPMNProcess
- Target: All child processes, roles, applications, data objects
- Filters: Show only deprecated processes for sunset planning
- Display: Manual effort as process label; automation status as visual indicator
Why this works: most process modeling work ends up siloed in a separate tool, cut off from the application and organizational context that gives it meaning. Anchoring it in EA connects process design to the application landscape and the org structure, so the effort and exception tags expose exactly where the manual load and automation candidates sit.
5. Technology Lifecycle (standards categories)
What it does: a technology standards register showing adoption status across the organization — what is strategic, what is merely accepted, and what you are actively retiring.
Element types
Technology(generic; stereotyped by category)TechnologyService(if you are registering platforms as services)ApplicationComponent(that uses the technology)
Stereotypes by category
Language(Java, C#, Python, etc.)Framework(Spring, .NET, Django, etc.)Database(Oracle, PostgreSQL, MongoDB, etc.)Middleware(Kafka, RabbitMQ, etc.)CloudPlatform(AWS, Azure, GCP)DevTool(IDEs, CI/CD platforms, monitoring)
Key tagged values
| Name | Type | Purpose |
|---|---|---|
adoption_status |
Enumeration: Strategic, Accepted, Tolerated, Retiring, Retired |
TOGAF standards alignment |
standard_category |
String | e.g., "Database Platform", "API Framework", "Monitoring Tool" |
review_date |
Date (YYYY-MM-DD) | When status was last assessed |
next_review_date |
Date (YYYY-MM-DD) | When status should be reviewed again |
replacement_technology |
Reference (to Technology) | What to migrate to (if retiring) |
vendor_or_community |
String | e.g., "Oracle", "Apache", "Linux Foundation" |
version_range |
String | e.g., "8.x – 12.x", "Any" (to allow flexibility) |
approval_date |
Date (YYYY-MM-DD) | When the technology was approved |
rationale |
String | Why this technology is strategic/accepted/tolerated |
Relationships
- ApplicationComponent
usesTechnology - Technology
replaced_byTechnology (if retiring/retired) - ApplicationComponent
should_migrate_toTechnology (target technology for decommissioning)
Quick Linker config
- Source: Technology
- Target: ApplicationComponent (shows which apps use each technology)
- Filters: Display only
adoption_status = Retiringto identify migration targets - Display: Show adoption status as color; review date as alert if overdue
Why this works: technology standards are a governance asset, yet they usually live in a spreadsheet nobody trusts, severed from the model they are meant to govern. Pull them into EA and "which applications still run tolerated frameworks?" becomes an instant answer, with each deviation carrying its own business context — app, status, criticality, and migration priority, side by side.
Implementation notes
Getting started
- Choose the pattern that matches your highest-value use case.
- Create the stereotypes and tagged value definitions in your MDG Technology.
- Define the relationships — both the validation constraints and the Quick Linkers.
- Populate a pilot set of elements: one capability hierarchy, one application portfolio section, one process.
- Validate against your standards, then iterate on the tagged value definitions.
Quality checks
- Run a model validation rule to confirm every element of a type has its required tagged values populated.
- Use Quick Linker to spot missing relationships — an application that sits in the portfolio with no
realiseslink to a capability is an integrity gap, not a stylistic one. - Check that tagged value enumerations match your governance definitions. If you say "Strategic", make sure "Strategic" means the same thing everywhere it appears.
Why the metamodel carries the weight
All five patterns share one trait: clarity at the metamodel level. Explicit element types, specific tagged values, named relationships, and governance-aligned enumerations are what let a query — human or automated — read the model without guessing. A loose metamodel produces ambiguous answers no matter how good the question is; a precise one produces answers you can act on. That principle is exactly why disciplined enterprise architecture treats the metamodel as a first-class deliverable rather than a configuration afterthought.
These patterns are not gospel. Adapt them — your standards may use different terminology, and your industry may demand additional attributes. The structure is what travels: clear element types, specific tagged values, explicit relationships, and governance-aligned enumerations. Your metamodel is the foundation everything else rests on. Get it right and your architecture becomes navigable, reportable to stakeholders, and governable at scale.
Start with one pattern. Master it. Then add the others.
Want a metamodel your whole practice can build on?
Talk to a practitioner about shaping your MDG Technology and Sparx EA repository around the patterns your team actually uses.
Book a call →Keep reading
You might also be interested in
What Is MDG Technology in Enterprise Architect?
The definition behind the patterns — what an MDG Technology is and what it governs.
Read → InsightHow to Configure MDG Technology in Sparx EA
A governance-first setup guide for turning these patterns into a working MDG.
Read → PlatformWhy Sparx EA
The platform reasoning behind a metamodel-driven architecture practice.
Explore → DisciplineEnterprise Architecture
How we treat the metamodel as a first-class deliverable, not an afterthought.
See how →