Why Anti-Patterns Matter

FERIN is deceptively simple. Many implementations fail not because the standard is complex, but because of poor design decisions. Understanding these anti-patterns will help you avoid them.

Content Anti-Patterns

Concept Granularity Too Fine

Problem

Creating a new concept for every minor variation. Example: separate concepts for "Meter (SI)", "Meter (survey)", "Meter (US)".

Consequences

  • Concept explosion makes navigation impossible
  • Users can't find the right concept
  • Maintenance burden becomes unmanageable

Solution

Use concept versions or attributes to capture variations. Only create new concepts when the fundamental meaning differs.

Concept Granularity Too Coarse

Problem

Putting everything in one concept. Example: a single "Unit" concept with a "type" attribute to distinguish length from weight.

Consequences

  • Can't model domain-specific properties
  • Validation becomes complex
  • Relations become meaningless

Solution

Create separate concepts for distinct types. Use inheritance for shared properties.

Using Concept Versions as Concepts

Problem

Creating a new concept version when the meaning has fundamentally changed, instead of creating a new concept.

Consequences

  • Version history becomes confusing
  • References to old versions become misleading
  • Can't properly model supersession

Solution

If the meaning changes, create a new concept with a supersession relation to the old one. Reserve versions for refinements.

Identifier Anti-Patterns

Meaningful Identifiers

Problem

Embedding meaning in identifiers. Example: us-dollar as an identifier.

Consequences

  • Can't change the name without breaking references
  • What if the meaning changes?
  • Identifier becomes misleading over time

Solution

Use opaque identifiers (UUIDs, sequential numbers). Use functional identifiers separately for human-readable codes.

URL-Based Identifiers That Break

Problem

Using URLs tied to specific infrastructure. Example: https://app-v1.internal.company.com/item/123

Consequences

  • URLs break when infrastructure changes
  • Can't migrate to new domains
  • Internal URLs exposed externally

Solution

Use stable, organization-level domains. Implement redirects for backward compatibility when infrastructure changes.

Reusing Identifiers

Problem

Reusing an identifier after content is deleted. "US was deleted, so we can use it for a new United States entry."

Consequences

  • Old references now point to wrong content
  • Breaks trust in the register
  • Audit trails become ambiguous

Solution

Never reuse identifiers. Mark as retired or invalid. Use a new identifier for new content.

Versioning Anti-Patterns

Versioning Everything as Major

Problem

Creating a new version for every minor change, treating all changes as substantive.

Consequences

  • Version explosion
  • Users can't tell what's significant
  • Maintenance complexity

Solution

Distinguish substantive from non-substantive changes. Only version when meaning or compatibility changes.

Modifying In-Place Without History

Problem

Updating content directly without creating change records or preserving previous state.

Consequences

  • Lost history
  • Can't audit what changed
  • Can't rollback

Solution

Always create change records. Implement append-only model for significant content.

Governance Anti-Patterns

Inadequate Role Separation

Problem

One person holding both Manager and Control Body roles in a high-risk register, able to approve their own changes without independent review.

Consequences

  • No real accountability
  • Potential for abuse
  • Regulatory failure

Solution

Match role separation to your register's risk level. For high-risk registers, ensure Control Body independence. For low-risk registers, combined roles are acceptable with documentation. See Risk Management for guidance on assessing your register's risk level.

Governance Theater

Problem

Having governance processes on paper that are routinely bypassed in practice.

Consequences

  • Process becomes meaningless
  • Real decisions happen elsewhere
  • Can't trust documentation

Solution

Either follow your governance or change it to match reality. Inconsistent governance is worse than minimal governance.

Missing Temporal Constraints

Problem

Not tracking when items become valid or expire. Content is just "valid" without time context.

Consequences

  • Can't handle planned changes
  • Historical queries become impossible
  • Transitions are sudden and disruptive

Solution

Track validFrom and validUntil dates. Plan transitions. Support time-travel queries.

Integration Anti-Patterns

Ignoring Cross-Register Dependencies

Problem

Items reference content in other registers without tracking those dependencies.

Consequences

  • References break when external content changes
  • No notification of upstream changes
  • Can't assess impact of changes

Solution

Document external dependencies. Subscribe to notifications from upstream registers. Version your references.

Related Topics