---
title: "Rationale \u0026 Classification"
url: https://ott.earth/cdo/rationale-classification/
lead: "CDOs are the backbone of enterprise data strategy. They ensure every key business concept is defined, governed, and used — whether it's a regulatory code, a company-wide standard, or a project-specific object."
author: "Pavel Ott"
source: https://ott.earth/
license: CC BY 4.0
---

# Rationale & Classification

> CDOs are the backbone of enterprise data strategy. They ensure every key business concept is defined, governed, and used — whether it's a regulatory code, a company-wide standard, or a project-specific object.


CDOs fall into three classification tiers. **Architecture stability depends on a strong base of standardised CDOs** — the wider that base, the more resilient the enterprise.

<div class="cdo-pyramid-section">
<div class="cdo-pyramid-stage">
<figure class="pyramid-figure pyramid-stable">
<figcaption class="pyramid-cap pyramid-cap-good"><span class="cap-dot"></span>Stable — wide base of standards</figcaption>
<svg class="pyramid-svg" viewBox="0 0 420 360" role="img" aria-label="Stable CDO pyramid: External Standard base, Enterprise Canonical middle, Bespoke top">
<defs>
<linearGradient id="grad-ext" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" stop-color="#2A66B8"/><stop offset="100%" stop-color="#143769"/></linearGradient>
<linearGradient id="grad-can" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" stop-color="#5C97D9"/><stop offset="100%" stop-color="#3A6FB0"/></linearGradient>
<linearGradient id="grad-bes" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" stop-color="#D3E5F6"/><stop offset="100%" stop-color="#9DBEE3"/></linearGradient>
<linearGradient id="grad-ground" x1="0" y1="0" x2="1" y2="0"><stop offset="0%" stop-color="#22b3c4" stop-opacity="0"/><stop offset="50%" stop-color="#22b3c4" stop-opacity="0.7"/><stop offset="100%" stop-color="#22b3c4" stop-opacity="0"/></linearGradient>
<filter id="pyr-shadow" x="-20%" y="-20%" width="140%" height="140%"><feDropShadow dx="0" dy="8" stdDeviation="8" flood-color="#0b1a36" flood-opacity="0.28"/></filter>
<filter id="pyr-glow" x="-50%" y="-50%" width="200%" height="200%"><feGaussianBlur stdDeviation="6" result="b"/><feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge></filter>
</defs>
<ellipse class="ground-shadow" cx="210" cy="335" rx="180" ry="10" fill="#0b1a36" opacity="0.18"/>
<g class="pyr-stack" filter="url(#pyr-shadow)">
<g class="band-ext band-rise"><polygon points="35,325 385,325 320,220 100,220" fill="url(#grad-ext)"/><polygon class="band-shine" points="35,325 385,325 380,322 40,322" fill="rgba(255,255,255,0.18)"/></g>
<g class="band-can band-rise"><polygon points="100,220 320,220 260,118 160,118" fill="url(#grad-can)"/><polygon class="band-shine" points="100,220 320,220 315,217 105,217" fill="rgba(255,255,255,0.18)"/></g>
<g class="band-bes band-rise"><polygon points="160,118 260,118 210,20" fill="url(#grad-bes)"/></g>
</g>
<g class="pyr-labels">
<text x="210" y="55" text-anchor="middle" class="svg-title svg-title-dark">Bespoke</text>
<text x="210" y="78" text-anchor="middle" class="svg-sub svg-sub-dark">Local · Controlled risk</text>
<text x="210" y="160" text-anchor="middle" class="svg-title">Enterprise Canonical</text>
<text x="210" y="184" text-anchor="middle" class="svg-sub">Shared meaning across domains</text>
<text x="210" y="265" text-anchor="middle" class="svg-title">External Standard</text>
<text x="210" y="289" text-anchor="middle" class="svg-sub">Industry · Regulatory · Interop</text>
</g>
<line x1="20" y1="345" x2="400" y2="345" stroke="url(#grad-ground)" stroke-width="2"/>
<g class="anchor-marks" stroke="#22b3c4" stroke-width="1.4" opacity="0.55">
<line x1="60" y1="345" x2="55" y2="354"/>
<line x1="110" y1="345" x2="105" y2="354"/>
<line x1="160" y1="345" x2="155" y2="354"/>
<line x1="210" y1="345" x2="205" y2="354"/>
<line x1="260" y1="345" x2="255" y2="354"/>
<line x1="310" y1="345" x2="305" y2="354"/>
<line x1="360" y1="345" x2="355" y2="354"/>
</g>
</svg>
<div class="pyramid-meta">
<span class="meta-pill meta-good"><span class="meta-icon">✓</span> grounded</span>
<span class="meta-pill meta-good"><span class="meta-icon">✓</span> resilient</span>
<span class="meta-pill meta-good"><span class="meta-icon">✓</span> scalable</span>
</div>
</figure>
<div class="pyramid-divider" aria-hidden="true"><span class="vs-pill">vs</span></div>
<figure class="pyramid-figure pyramid-unstable">
<figcaption class="pyramid-cap pyramid-cap-bad"><span class="cap-dot warn"></span>Unstable — flipped pyramid</figcaption>
<svg class="pyramid-svg pyramid-svg-warn" viewBox="0 0 240 360" role="img" aria-label="Unstable inverted pyramid: too many Bespoke CDOs at the top, narrow standards base">
<defs>
<linearGradient id="grad-warn-bes" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" stop-color="#D3E5F6"/><stop offset="100%" stop-color="#9DBEE3"/></linearGradient>
<linearGradient id="grad-warn-can" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" stop-color="#5C97D9"/><stop offset="100%" stop-color="#3A6FB0"/></linearGradient>
<linearGradient id="grad-warn-ext" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" stop-color="#2A66B8"/><stop offset="100%" stop-color="#143769"/></linearGradient>
<radialGradient id="warn-aura" cx="0.5" cy="0.5" r="0.5"><stop offset="0%" stop-color="#E07A2A" stop-opacity="0.35"/><stop offset="100%" stop-color="#E07A2A" stop-opacity="0"/></radialGradient>
<filter id="warn-soft" x="-30%" y="-30%" width="160%" height="160%"><feDropShadow dx="0" dy="4" stdDeviation="5" flood-color="#5a1a00" flood-opacity="0.28"/></filter>
</defs>
<circle class="warn-aura" cx="120" cy="170" r="120" fill="url(#warn-aura)"/>
<g class="unstable-stack" filter="url(#warn-soft)">
<polygon points="15,20 225,20 190,98 50,98" fill="url(#grad-warn-bes)"/>
<polygon points="50,98 190,98 155,178 85,178" fill="url(#grad-warn-can)"/>
<polygon points="85,178 155,178 120,242" fill="url(#grad-warn-ext)"/>
<circle cx="120" cy="290" r="14" fill="url(#grad-warn-ext)"/>
</g>
<g class="stress-cracks" stroke="#E07A2A" stroke-width="1.6" stroke-linecap="round" fill="none" opacity="0.85">
<path d="M118 244 l-2 6 l3 4"/>
<path d="M122 244 l3 5 l-2 5"/>
</g>
<g class="motion-lines" stroke="#E07A2A" stroke-width="2" stroke-linecap="round" fill="none">
<path class="motion-l" d="M30 130 l-14 -8"/>
<path class="motion-l" d="M30 170 l-18 0"/>
<path class="motion-l" d="M30 210 l-14 8"/>
<path class="motion-r" d="M210 130 l14 -8"/>
<path class="motion-r" d="M210 170 l18 0"/>
<path class="motion-r" d="M210 210 l14 8"/>
</g>
<g class="ground-cracks" stroke="#E07A2A" stroke-width="2" stroke-linecap="round" fill="none">
<path d="M40 330 l20 -6 l18 8 l22 -8 l20 6 l22 -8 l20 6 l20 -4"/>
</g>
<text x="120" y="62" text-anchor="middle" class="svg-mini-title svg-title-dark">Bespoke</text>
<text x="120" y="138" text-anchor="middle" class="svg-mini-title">Canonical</text>
</svg>
<div class="pyramid-meta">
<span class="meta-pill meta-bad"><span class="meta-icon">!</span> top-heavy</span>
<span class="meta-pill meta-bad"><span class="meta-icon">!</span> coupling risk</span>
<span class="meta-pill meta-bad"><span class="meta-icon">!</span> drift</span>
</div>
</figure>
</div>
<p class="pyramid-arc">A healthy enterprise has a <strong>wide base of External Standard and Enterprise Canonical CDOs</strong> and a small, controlled set of <strong>Bespoke</strong> CDOs. If the pyramid flips — too many bespoke concepts at the top — architecture becomes unstable.</p>
</div>

## How each tier works

<div class="tier-grid">
<article class="tier-card tier-card-external">
<header><h3>External Standard</h3><span class="tier-tag">Industry / Regulatory</span></header>
<dl>
<dt>Who uses it?</dt>
<dd>All business units that must exchange data with partners, regulators or industry bodies.</dd>
<dt>Why it matters</dt>
<dd>Guarantees interoperability and compliance — the legal &amp; technical safety net.</dd>
<dt>Key governance</dt>
<dd>Track source authority &amp; version; never alter the definition — only map it internally.</dd>
</dl>
</article>
<article class="tier-card tier-card-canonical">
<header><h3>Enterprise Canonical</h3><span class="tier-tag">Cross-domain</span></header>
<dl>
<dt>Who uses it?</dt>
<dd>Cross-domain teams (e.g., sales, finance, operations).</dd>
<dt>Why it matters</dt>
<dd>Provides a single, shared meaning for data that lives in multiple systems.</dd>
<dt>Key governance</dt>
<dd>Managed by the Data Governance Council; changes require an RFC and impact assessment.</dd>
</dl>
</article>
<article class="tier-card tier-card-bespoke">
<header><h3>Bespoke</h3><span class="tier-tag">Local Use</span></header>
<dl>
<dt>Who uses it?</dt>
<dd>Project or pilot teams where standardisation isn't feasible.</dd>
<dt>Why it matters</dt>
<dd>Allows rapid development while controlling the risk of accidental enterprise coupling.</dd>
<dt>Key governance</dt>
<dd>Label as "Bespoke", assign owner &amp; expiry date, review quarterly, and provide a migration path if it becomes widely useful.</dd>
</dl>
</article>
</div>

<div class="callout callout-warn">
<strong>Architectural rule:</strong> if the pyramid flips — too many bespoke concepts at the top — architecture becomes unstable.
</div>

