Advanced

Data Contracts & Schema Evolution in Production

Mencegah breaking change antar producer-consumer data dengan kontrak yang jelas

45 min read Updated Mar 2026 By DataLearn Team

Mode Baca Pemula

Anggap data contract sebagai "API spec untuk data". Fokus baca:

  1. Apa yang dijanjikan producer ke consumer
  2. Apa dampaknya kalau schema berubah tanpa aturan
  3. Bagaimana rollout perubahan tanpa mematahkan pipeline lama

Kamus istilah: DE-GLOSSARY.md

Prasyarat Ringan

Istilah Penting (3 Lapis)

Istilah: Data Contract

Definisi awam: Janji format data agar pengirim dan penerima tidak salah paham.

Definisi teknis: Spesifikasi skema, semantik, SLA, dan versioning antara data producer dan consumer.

Contoh praktis: event_time wajib ISO timestamp UTC, order_id wajib string non-null.

Istilah: Backward Compatibility

Definisi awam: Versi baru masih bisa dipakai oleh sistem lama.

Definisi teknis: Perubahan schema yang tidak mematahkan consumer yang masih memakai versi sebelumnya.

Contoh praktis: Menambah kolom opsional tanpa menghapus kolom lama.

Problem Bisnis yang Paling Sering

Tanpa Contract: "Works in Dev, Breaks in Production"

Komponen Wajib dalam Data Contract

Komponen Isi Minimum Kenapa Penting
Schema Nama field, tipe, nullable, default Mencegah parsing error
Semantics Arti bisnis per field Mencegah metric drift
Quality Rules Range, uniqueness, referential checks Deteksi anomali lebih dini
SLA/SLO Freshness, completeness, availability Ekspektasi layanan jelas
Versioning Policy Major/minor changes + deprecation window Perubahan aman lintas tim
Ownership Producer owner, consumer owner, escalation Incident response cepat

Schema Evolution Rules (Yang Aman)

Perubahan Compatibility Rekomendasi
Tambah field opsional Umumnya aman (backward) Boleh langsung, tetap umumkan change log
Hapus field lama Berisiko tinggi Deprecation minimum 1-2 release cycle
Ubah tipe field Sering breaking Buat field baru, migrasi bertahap
Ubah makna field Silent breaking change Wajib major version + komunikasi lintas tim

Decision Framework: Strict vs Flexible Contract

Kondisi Pilih Strict Pilih Flexible
Domain finansial, compliance tinggi Ya, wajib gate di CI + schema registry Tidak direkomendasikan
Eksperimen produk cepat Hanya untuk field kritikal Ya, dengan guardrail minimum
Banyak consumer lintas tim Ya, kontrak formal + deprecation policy Berisiko tinggi

Implementation Walkthrough

1) Definisikan Contract Spec

# contract/order_events.v2.yaml name: order_events version: 2.1.0 owner: data-platform@company.com sla: freshness_minutes: 15 completeness_min: 0.995 schema: - name: order_id type: string nullable: false - name: event_time type: timestamp nullable: false - name: gross_amount type: decimal(18,2) nullable: false - name: discount_amount type: decimal(18,2) nullable: true

2) Tambahkan Contract Check di CI

# Pseudo CI step if schema_change_is_breaking(new_schema, old_schema): fail_build("Breaking change detected. Create major version + migration plan")

3) Rollout Perubahan dengan Deprecation Window

  1. Release versi baru kontrak (misal v2.1) dengan changelog.
  2. Jalankan dual-write jika perlu (field lama + field baru).
  3. Monitor adoption consumer selama window deprecation.
  4. Hapus field lama setelah semua consumer migrasi.

Failure Modes & Anti-Patterns

Anti-Patterns yang Sering Terjadi

Production Readiness Checklist

Checklist Sebelum Contract Live

  1. Contract spec punya owner, version, dan changelog.
  2. Schema validation jalan otomatis di CI/CD.
  3. Compatibility policy didokumentasikan (backward/forward).
  4. Deprecation window dan komunikasi lintas tim sudah jelas.
  5. SLA/SLO freshness dan completeness sudah disepakati.
  6. Alert untuk contract violation sudah aktif.
  7. Runbook incident contract breach tersedia.

Exercise: Rancang Data Contract untuk Event Checkout

Buat contract untuk event checkout_completed dengan syarat:

Deliverable:

  1. Draft contract spec (field + type + nullable + semantic notes).
  2. Versioning policy (major/minor rules).
  3. Migration plan jika gross_amount dipecah jadi net/tax/fee.

Quick Quiz

1. Perubahan mana yang paling berisiko breaking?

A. Menambah field opsional
B. Menambah deskripsi dokumentasi
C. Mengubah tipe field yang sudah dipakai consumer
D. Menambah owner metadata

2. Tujuan utama deprecation window adalah?

A. Menambah kompleksitas release
B. Memberi waktu consumer migrasi tanpa downtime
C. Menghilangkan kebutuhan komunikasi
D. Mengurangi kebutuhan testing

References & Resources