Skip to main content

The APM+ data model

Before you commit a portfolio to a tool, you want to know how it models the world. This is the metamodel APM+ is built on — the entities, their attributes, and how they relate.

1. Entity-relationship diagram

Applications sit at the centre. Everything else — capabilities, vendors, owners, cost and lifecycle — hangs off them, so a single change (an owner leaving, a support date lapsing) ripples through every view.

erDiagram
    accTitle: APM+ entity-relationship diagram
    accDescr {
        Applications sit at the centre of the model. An application supports many
        business capabilities, is accountable to contacts through stakeholder roles,
        is supplied by a vendor and runs on vendor software, is built from technology
        stack components, is licensed under a licence model and metered by licence
        metrics, holds a lifecycle status, and integrates with other systems through
        interactions. Capabilities form a parent-child hierarchy and can be owned by
        a contact.
    }
    APPLICATION {
        string name
        string description
        enum   criticality
        date   in_service_date
        date   out_of_service_date
        int    freshness_score
    }
    CAPABILITY {
        string capability_code
        string name
        enum   criticality
    }
    VENDOR {
        string name
        string website_url
        enum   record_type
    }
    VENDOR_SOFTWARE {
        string name
        string version
        date   primary_support_end_date
        date   extended_support_end_date
        date   sustaining_support_end_date
    }
    CONTACT {
        string name
        string email
    }
    STAKEHOLDER_ROLE {
        string name
    }
    LIFECYCLE_STATUS {
        string name
    }
    LICENCE_MODEL {
        string name
        string cost_model
    }
    LICENCE_METRIC {
        string metric
        int    quantity
    }
    TECH_STACK_COMPONENT {
        string role
    }
    INTERACTION {
        enum   interaction_type
        enum   direction
    }

    APPLICATION      }o--o{ CAPABILITY          : "supports"
    CAPABILITY       ||--o{ CAPABILITY          : "parent of"
    CAPABILITY       }o--o| CONTACT             : "owned by"
    APPLICATION      ||--o{ APPLICATION_STAKEHOLDER : "accountable via"
    APPLICATION_STAKEHOLDER }o--|| CONTACT       : "is"
    APPLICATION_STAKEHOLDER }o--|| STAKEHOLDER_ROLE : "plays"
    APPLICATION      }o--o| VENDOR              : "supplied by"
    APPLICATION      }o--o| VENDOR_SOFTWARE     : "runs on"
    VENDOR           ||--o{ VENDOR_SOFTWARE     : "publishes"
    APPLICATION      ||--o{ TECH_STACK_COMPONENT : "built from"
    TECH_STACK_COMPONENT }o--|| VENDOR_SOFTWARE : "component"
    APPLICATION      }o--o| LICENCE_MODEL       : "licensed under"
    APPLICATION      ||--o{ LICENCE_METRIC      : "metered by"
    APPLICATION      }o--o| LIFECYCLE_STATUS    : "in status"
    APPLICATION      ||--o{ INTERACTION         : "integrates via"
                    

Diagram generated from the shipping schema. Some supporting entities (logical applications, per-status lifecycle dates, assessments and risk records) are omitted here for legibility — they are described below.

2. Application

The central record. An application carries a name, description and a criticality rating, links to the vendor and vendor software behind it, a lifecycle status, in-service and out-of-service dates, and a computed freshness score. It maps many-to-many to the business capabilities it supports and to logical applications (the business-facing grouping above physical systems).

Accountability is expressed through stakeholders and roles rather than a single owner field (see §5), so “who owns this?” is answered by role — Business Owner, Technical Owner, and so on.

3. Capability

A business capability has a code, a name, a criticality and an optional owner. Capabilities form a hierarchy — each can have a parent — so you can model an APQC-style tree and roll coverage up from leaf capabilities to domains. Applications attach to the capabilities they realise, which is what powers the heatmap: duplicate coverage in one place, gaps in another.

4. Vendor & vendor software

A vendor publishes one or more vendor software products. Each product records version, category, deployment type, and the three end-of-support dates that drive the lifecycle exposure view — primary, extended and sustaining support end dates (validated to fall in chronological order). System-maintained vendor records feed the public EOL database; tenants can also add their own.

5. Stakeholders & roles

Accountability is a through-relationship: ApplicationStakeholder ties an application to a contact in a named role (StakeholderRole). An application can have many stakeholders, and the same person can hold different roles on different applications. The refresh-campaign flow targets the Business Owner stakeholder specifically.

6. Lifecycle

An application has a current lifecycle status plus a history of dated lifecycle events (a status and the date it took effect), so you can see both where an application is now and its planned trajectory. Combined with vendor support dates, this is what the roadmap and the two-year exposure view are built from.

7. Cost & licensing

Cost is modelled, not a single number. An application references a licence model (which carries a cost model) and has one or more licence metrics — a metric and a quantity (seats, cores, and so on). Total cost of ownership is derived from these rather than typed into one field, so the working behind a TCO figure is always visible.

8. Technology stack & interactions

Tech-stack components link an application to the vendor-software products it is built from, so a single end-of-support date can be traced to every application that depends on it.

Interactions record application-to-application integrations — which systems exchange data, in which direction, and by what type — so the portfolio is a graph, not just a list.

9. Freshness (cross-cutting)

Every portfolio record carries a freshness score — a decaying measure of how recently it was confirmed accurate. Editing a field does not reset it; only an explicit owner confirmation or a refresh-survey writeback counts as a review. Scores are recomputed on a schedule, not on save, so “this record was last verified in March” is a fact you can trust rather than a side effect of someone tweaking a description.

10. Tenancy

Every portfolio entity above is scoped to the companies you can access; queries are constrained to your organisation's data at the data layer, not just hidden in the UI. See the Trust & Security page for how isolation and data residency work.

Back to top