DN-008
Data-Driven Design + MDD
Document Information
Prinsip
"Jika sebuah sistem bisa dibuat menggunakan data (parameter), jangan membuat sistem baru."
Konsekuensinya dua arah, dan keduanya sama pentingnya:
- Ke dalam kode — satu mesin generik + tabel data, bukan cabang logika per kasus.
- Ke dalam dokumen — angka dipisahkan dari penjelasannya. MDD menyimpan angka, GDD/DN menjelaskan alasannya. Programmer cukup membaca MDD untuk mengisi konfigurasi game.
Usulan Asli
Dipertahankan apa adanya sebagai catatan asal-usul:
Contohnya AI. Daripada membuat 15 script AI untuk 15 hewan, kita cukup punya 1 Animal AI Engine dengan data berbeda untuk setiap spesies: Fear Radius, Walk Speed, Run Speed, Personality, Habitat, Spawn Weight.
Dengan pendekatan ini, menambah hewan baru bisa dilakukan hanya dengan mengisi data tanpa menulis ulang logika AI. Ini akan sangat menghemat waktu dan membuat target 3 bulan jauh lebih realistis.
Aku juga ingin mulai menyusun Master Data Document (MDD) secara paralel dengan GDD. MDD tidak berisi penjelasan, hanya angka dan data. Nantinya programmer cukup membaca MDD untuk mengisi konfigurasi game, sedangkan GDD menjelaskan alasan desainnya.
Status Implementasi
Usulan MDD dijalankan penuh dan tumbuh melampaui tiga dokumen yang disebut di usulan asli:
| Dokumen | Isi |
|---|---|
| MDD-001 | Animal List — 28 spesies × 15 kolom. |
| MDD-002 | Weapon List — statistik senjata dan ammo. |
| MDD-003 | Item List — Varian Backpack, Consumable, Fuel, Companion, Skin, Mount, Character, Catalyst, Accessory. |
| MDD-004 | Biome & Spawn Data — 7 biome, distribusi 28 spesies, Spawn Weight. |
| MDD-005 | Economy & Price List — peta sumber harga, bukan tabel harga (lihat Batas Prinsip). |
| MDD-006 | Player Progression Data — Level, Hunter Rank, Achievement, Unlock, reward. |
| MDD-007 | Loot & Collection Data — Trophy Room, Pedestal, Statue Miniatur. |
| MDD-008 | Personality Profile Data — 4 profil AI (lihat DN-007). |
Di lapisan teknis, prinsip ini menjadi salah satu Architecture Pillar di TDD-001: "tabel MDD diterjemahkan apa adanya menjadi ModuleScript data, bukan logika if/else per spesies." Setiap MDD punya satu file pasangan di ServerStorage/GameData/.
Bagaimana Prinsip Ini Terbukti
Bukan klaim teoretis — berikut kejadian nyata di proyek ini, tempat prinsip ini menghemat pekerjaan yang besar:
- Skala Rarity 1–10 → 1–30 (Fase F). Seluruh kurva harga dirancang ulang dan 27 spesies diregenerasi dari formula, bukan disunting satu per satu. Kalau harga ditulis manual per spesies, perubahan pikiran sebesar ini praktis mustahil dilakukan.
- DN-011 menyimpan pengali, bukan harga. Nilai Caravan disimpan sebagai ×Base Price. Ketika kurva harga berubah dan paket contoh melonjak dari 7.170 ke 13.780 Coin, tidak satu angka pun perlu dihitung ulang di DN-011.
- Statue Miniatur (MDD-007). 28 spesies × 3 tier = 84 ambang, dihasilkan dari satu formula tiga-peluruhan — bukan 81 angka yang ditetapkan tangan.
- Kapasitas Companion. Formula
Size × 3ditetapkan di Fase F-5, lalu ternyata menghasilkan tepat 6 slot untuk Beagle — angka yang sudah dikunci pemilik proyek jauh sebelumnya. Formula yang terverifikasi, bukan dicocokkan belakangan. - Personality (DN-007). Tiga dari empat spesies contoh berganti profil sepanjang pengembangan. Karena perilaku adalah data, tiga perubahan pikiran itu berarti tiga sel diubah — bukan tiga script ditulis ulang.
Pola yang muncul dari semuanya: yang sesungguhnya dibeli prinsip ini bukan kecepatan menulis kode di awal, melainkan kemurahan berubah pikiran di kemudian hari. Proyek yang angkanya ditetapkan manual akan mempertahankan keputusan yang buruk semata-mata karena mahal untuk diperbaiki.
Batas Prinsip — Kapan Ia Gagal
- Satu angka wajib punya satu pemilik. Data-driven hanya bekerja kalau tiap angka hidup di satu dokumen dan yang lain merujuk, tidak menyalin. Proyek ini sudah beberapa kali tergigit justru di sini: harga hewan pernah diduplikasi di MDD-005 lalu drift dari MDD-001; snapshot GDS berulang kali tertinggal dari MDD sumbernya. Itu sebabnya MDD-005 dicabut isinya dan berubah peran menjadi peta sumber harga — menerapkan prinsipnya sendiri alih-alih membangun ulang tabel duplikat.
- Data tanpa pemakai adalah beban, bukan cadangan. Kolom HP Recovery Value bertahan di 27 baris MDD-001 lama setelah satu-satunya pemakainya (Emergency Supplies) dicabut. Data mati tetap menuntut disalin ke setiap cermin dan tetap menyesatkan pembaca. Dihapus, bukan disimpan.
- Formula tidak boleh dipaksakan ke hal yang memang bukan pola. Nilai Stamina Recovery lama ditetapkan manual per spesies dan tidak pernah mengikuti rumus apa pun — memaksakan formula ke sana hanya akan menghasilkan angka yang rapi tetapi salah. Kalau sesuatu benar-benar bersifat kasus per kasus, jujur saja mencatatnya sebagai data manual.
- Prinsip ini tentang menghindari sistem baru, bukan menghindari keputusan baru. Ia menjawab "bagaimana menyimpannya", bukan "berapa nilainya". Menetapkan harga tetap menuntut penalaran desain — lihat MDD-005 Basis Kalibrasi Sink.
Dependencies
- DN-007 — Personality AI (penerapan pertama prinsip ini).
- CDR-007 — Technical Philosophy.
- CDR-009 — Development Philosophy.
- MDD-001 s.d. MDD-008 — seluruh lapisan Master Data.
- MDD-005 — Economy & Price List (peta sumber harga, "satu harga satu sumber").
- TDD-001 — Script & System Architecture (Architecture Pillar "Data-Driven",
ServerStorage/GameData/). - PHDS-002 — Naming Convention & Identifier Standard (prefix ID per kategori data).