Why Versioning Matters

Versioning enables:

  • Persistence: Old references remain valid
  • History: Understanding what changed and when
  • Compatibility: Systems can adapt at their own pace
  • Audit: Tracing the evolution of content

Substantive vs Non-Substantive Changes

The standard distinguishes between changes that require a new version and those that don't—but the distinction requires interpretation. The threshold for what is "substantive" depends on your register's risk profile.

Risk-Based Thresholds

Low Risk

Only major meaning changes are substantive. Typos, formatting, and minor clarifications don't require versions.

High Risk

Any meaningful change is substantive. Even typo fixes that could change interpretation require versions.

What the Standard Says

A substantive change is one that has a major impact on the use of the concept or register item. A non-substantive change has minor or no impact on use.

The Challenge

"Major impact on use" is subjective. What breaks one consumer may be transparent to another. Here's a decision framework:

Decision Tree

  1. Does this change the identifier?
    • Yes → This is not a change, it's a new item
    • No → Continue
  2. Does this change what the item means?
    • Yes → Substantive (create new version)
    • No → Continue
  3. Could existing references become incorrect or misleading?
    • Yes → Substantive (create new version)
    • No → Continue
  4. Does this affect validation or processing rules?
    • Yes → Likely substantive
    • No → Non-substantive

Examples

ChangeTypeRationale
Fixing a typo in descriptionNon-substantiveMeaning unchanged
Adding an optional fieldNon-substantiveExisting use unaffected
Changing a code valueSubstantiveReferences using old value break
Changing definition significantlySubstantiveMeaning changed
Marking as deprecatedNon-substantiveStill valid, just discouraged
Removing a required fieldSubstantiveBreaks systems expecting it
Adding a new exampleNon-substantiveSupplementary information only
Tip: When in doubt, create a new version. The cost of an extra version is usually lower than the cost of broken integrations.

Versioning Schemes

Choose a scheme that matches your content and users:

Semantic Versioning

MAJOR.MINOR.PATCH (e.g., 2.1.3)

Communicates change impact through version number.

  • MAJOR: Breaking changes
  • MINOR: New features, backward compatible
  • PATCH: Bug fixes, backward compatible

Best for: APIs, software-like content

Date-Based

YYYY-MM-DD or YYYYMMDD

Simple, unambiguous, sortable.

  • Clear when version was created
  • Easy to sort chronologically
  • No semantic meaning

Best for: Time-sensitive reference data

Sequential

v1, v2, v3 or 1, 2, 3

Simple counter, no embedded meaning.

  • Easy to understand
  • Ordering is clear
  • Requires external documentation for meaning

Best for: Internal use, simple registers

Hash-Based

a1b2c3d4

Derived from content, ensures uniqueness.

  • Guaranteed unique for content
  • Detects accidental duplication
  • Not human-readable

Best for: Content-addressable systems, git-like

Version Compatibility

When you release a new version, what happens to systems using the old one?

Compatibility Types

TypeDefinitionExample
Backward CompatibleNew version works with old consumersAdding optional fields
Forward CompatibleOld version works with new consumersIgnoring unknown fields
Breaking ChangeOld consumers fail with new versionRemoving required fields

Managing Breaking Changes

  • Communicate early: Warn users before making breaking changes
  • Provide migration path: Document how to adapt
  • Overlap periods: Support both versions during transition
  • Sunset old versions: Clear timeline for deprecation

Version Lifecycle

Versions progress through states:

Draft

Created but not yet approved

Current

The active, recommended version

Deprecated

Still works, but migrate away

Superseded

Replaced by newer version

Retired

No longer available for use

Versioning Anti-Patterns

Version Everything

Creating a new version for every typo fix or minor edit.

Consequence: Version explosion, user confusion.

Better: Batch minor changes, version meaningfully.

Never Version

Modifying content in place without creating versions.

Consequence: Lost history, broken references.

Better: Version substantive changes.

Delete Old Versions

Removing old versions to save space.

Consequence: Broken citations, lost history.

Better: Archive, don't delete.

Semantic Versioning for Non-Semantic Content

Using MAJOR.MINOR.PATCH for content where the distinctions don't apply.

Consequence: Confusing version numbers.

Better: Match scheme to content type.

Related Topics