Teori yang Sudah Ada
Setiap cacat MOAD memiliki solusi yang sudah diketahui puluhan tahun sebelum deteksi sistematis pada 2026. Cacat-cacat tersebut tidak bertahan karena tidak ada yang tahu lebih baik. Mereka bertahan karena mengetahui tidak sama dengan mendeteksi.
MOAD-0001: list.contains O(N²)
Donald Knuth, 1973. The Art of Computer Programming, Volume 3: Sorting and Searching. Hash table untuk pencarian O(1) telah sepenuhnya dispesifikasikan beserta analisisnya pada 1973. Perbedaan antara pencarian linear O(N) dan pencarian hash O(1) — telah didokumentasikan, diformalkan, dan banyak dikutip. Java merilis HashSet pada versi 1.0 (1996). Python merilis set sebagai tipe kelas satu pada versi 2.4 (2004). Perbaikan tersebut sudah ada selama 30 tahun sebelum menjadi idiom bawaan di setiap ekosistem.
Richard Hamming, 1986. Kuliah Bell Labs (kemudian diterbitkan sebagai The Art of Doing Science and Engineering, 1997). Hamming secara eksplisit mengajarkan kompleksitas algoritmik, perbedaan antara benar & efisien, serta bahaya membangun sistem yang bekerja pada skala kecil tetapi gagal pada skala besar. Ia menyebutnya 'merancang untuk masalah yang Anda lihat hari ini, bukan masalah yang akan Anda hadapi besok.'
MOAD-0002: Kopling Keadaan Global Bersama
David Parnas, 1972. 'On the Criteria To Be Used in Decomposing Systems into Modules.' CACM, Desember 1972. Parnas berpendapat bahwa modul harus didekomposisi dengan penyembunyian informasi — setiap modul memiliki keadaannya sendiri, tanpa global mutable yang dibagikan. Ini adalah pendahulu teoretis langsung dari perbaikan Intertangle. Parnas secara eksplisit menyatakan: keadaan global bersama menciptakan kopling tak terlihat yang tidak terungkap oleh pengujian.
MOAD-0003: Kebocoran Identitas ThreadLocal
Java 1.2, 1998. ThreadLocal dikirimkan sebagai kelas pustaka standar Java. Saat thread pooling + ThreadLocal hidup berdampingan, mekanisme kebocoran sudah ada. Cacat ini bersifat struktural: pembawa yang umurnya adalah thread, bukan unit kerja. Dokumentasi telah memperingatkan hal ini sejak awal siklus hidup Java EE.
MOAD-0004: Kredensial yang Dicatat
RFC 1945, 1996. HTTP/1.0 mendefinisikan header Authorization. Cacat pencatatan kredensial menjadi mungkin sejak header Authorization ada. OWASP didirikan pada 2001 dan mendokumentasikan pencatatan kredensial sebagai kelas kerentanan dalam panduan pertamanya. Polanya: Authorization header → log middleware → kredensial teks-jelas di disk. Diketahui sejak spesifikasi autentikasi HTTP pertama.
MOAD-0005: Thundering Herd / Cache Stampede
Unix kernel, 1993. Masalah 'thundering herd' — N proses dibangunkan secara bersamaan pada suatu event bersama — muncul dalam diskusi pengembangan kernel Unix sejak awal 1990-an. Karya Doug Schmidt tentang pola Reactor (1994) dan Half-Sync/Half-Async (1995) menangani sinkronisasi di tingkat infrastruktur. Varian cache stampede (N thread menghitung nilai yang sama saat cache miss) didokumentasikan dalam literatur sistem terdistribusi pada tahun 2001.
---
Teori: lengkap. Alat deteksi: tidak ada. Kesenjangan antara 'dapat diketahui' dan 'terdeteksi' berkisar antara 28 hingga 54 tahun tergantung pada cacatnya.
Kesenjangan Pengetahuan
Timeline menunjukkan bahwa setiap cacat MOAD memiliki solusi yang sudah diketahui setidaknya 28 tahun sebelum deteksi sistematis. Kesenjangan terpendek (MOAD-0003) adalah 28 tahun. Kesenjangan terpanjang (MOAD-0002) adalah 54 tahun.
Ini bukan cerita tentang ketidaktahuan. Knuth, Parnas, Hamming — mereka adalah penulis yang paling banyak dikutip dalam ilmu komputer. Karya mereka diajarkan di universitas. Kosakata mereka (Big O, information hiding, algorithmic complexity) menjadi kurikulum standar.
Why Code Festers: Five Conditions
Sebuah cacat tidak bertahan secara kebetulan. Lima kondisi struktural, yang semuanya hadir secara bersamaan, menciptakan lingkungan fester. Hilangkan salah satu saja dan deteksi menjadi mungkin.
Condition 1: Correct Output
Sebuah list dan sebuah set menjawab pertanyaan keanggotaan secara identik. list.contains(x) dan set.contains(x) mengembalikan boolean yang sama. ThreadLocal yang membawa identitas usang tetap membawa sebuah identitas — hanya saja identitas tersebut milik permintaan yang salah. Kredensial yang dicatat log dicatat dengan benar — kredensial tersebut mencapai file log tanpa kesalahan. Cacatnya bukanlah sebuah malfungsi. Ia hanya menjadi malfungsi dalam hal biaya atau konsekuensi keamanan. Tes yang memeriksa output lolos. Tes yang memeriksa biaya atau konsekuensi keamanan: sebagian besar belum ditulis.
Kondisi 2: Tidak Ada Tes Kompleksitas di CI
Dijkstra mengatakan 'testing shows the presence of defects, not their absence.' Hamming menambahkan: cacat yang kita uji adalah cacat yang kita temukan. Pipeline CI di 2026 menguji: kebenaran, keamanan tipe, kontrak API, perilaku fungsional. Mereka tidak menguji: kompleksitas algoritmik per operasi, pertumbuhan memori per panggilan, pembersihan header otorisasi, siklus hidup identitas thread.
Tidak ada tes yang dijalankan. Tidak ada tes yang gagal. Pipeline berwarna hijau. Cacatnya tidak terlihat.
Kondisi 3: Asal Usul Small-N
Kode ditulis dan direview di lingkungan pengembangan. Grafik pengembangan memiliki 50 node. Beban permintaan pengembangan memiliki 10 thread bersamaan. Tingkat cache miss pengembangan rendah (cache hangat, sedikit kunci). Pada N=50, biaya O(N²) adalah 2.500 operasi. Tidak terlihat. Pada N=50.000, biayanya adalah 2.500.000.000 operasi. Build 17 menit alih-alih build 1 detik.
Penulis yang menulis kode tidak pernah melihat N=50.000. Reviewer yang menyetujuinya tidak pernah melihat N=50.000. Cacat tersebut tidak terlihat pada skala saat kode ditulis.
Kondisi 4: Copy Menyebar Tanpa Konteks
Algoritma yang benar bersifat instruktif. Tutorial mengajar dengan contoh yang benar. Dokumentasi menampilkan kode yang berfungsi. Kerangka Tarjan SCC yang sama — visited = [], if n not in visited di dalam — muncul di GHC, Maven, Python pip, Cargo, TypeScript compiler, Kotlin compiler, Scala compiler, dan javac. Tim berbeda, bahasa berbeda, dekade berbeda. Fosil yang sama. N=50 milik penulis asli tidak ikut menyebar bersama kode. Yang menyebar: keluaran yang benar. Yang tertinggal: asumsi performa.
Kondisi 5: Skala Tumbuh di Sekitar Kode yang Membeku
Kode tidak memburuk. Infrastruktur yang berskala. Pemecah dependensi yang ditulis tahun 2003 untuk 200 paket berjalan pada 50.000 paket di tahun 2024. Tidak ada yang menulis ulang — ia bekerja. Tidak ada yang memprofilkannya — CI berwarna hijau. Nilai N yang membuat biaya O(N²) menjadi bencana datang secara bertahap, tak terlihat, pada skala produksi. Saat itu penulis asli sudah tidak ada. Kode tersebut menjadi dependensi. Tidak ada yang menyentuh dependensi yang bekerja.
Diagnosis: Lima Kondisi
Lima kondisi: keluaran yang benar, tidak ada pengujian kompleksitas, asal-usul N kecil, penyalinan tanpa konteks, skala tumbuh di sekitar kode yang membeku.
Semua lima kondisi hadir pada setiap MOAD secara bersamaan. Ini bukan kebetulan — ini adalah tanda struktural dari kelas cacat sedimen.
Apa yang Dikatakan Hamming
Kuliah Richard Hamming tahun 1986 di Bell Labs — diterbitkan tahun 1997 sebagai The Art of Doing Science and Engineering — berisi peringatan yang terbaca seperti deskripsi langsung pola cacat MOAD. Ia tidak sedang mendeskripsikan MOAD. Ia sedang mendeskripsikan kecenderungan struktural sistem rekayasa untuk mengeras di sekitar keputusan yang benar secara lokal tetapi menjadi mahal secara global.
Hamming tentang kompleksitas: 'Tujuan komputasi adalah wawasan, bukan angka. Namun Anda harus memiliki kompleksitas algoritma yang tepat atau angkanya tidak akan pernah keluar. Algoritma O(N²) yang berjalan pada N=100 tidak akan berjalan pada N=1.000.000 sebelum Anda pensiun.'
Hamming tentang penyalinan: 'Insinyur hebat tidak hanya menyalin solusi. Mereka memahami mengapa solusi itu bekerja, dalam kondisi apa ia berlaku, & apa yang akan merusaknya. Solusi yang disalin tanpa kondisinya adalah bom waktu.'
Hamming tentang pengujian: 'Menguji apa yang Anda ukur bukanlah hal yang sama dengan mengukur apa yang penting. Kami membangun suite pengujian yang rumit untuk properti yang kami pilih untuk diuji. Kami membiarkan properti yang tidak kami pilih tidak diuji. Apa yang tidak kami uji adalah yang mengejutkan kami di produksi.'
Hamming on scale: 'Kesalahan yang Anda buat di tahun pertama sebuah proyek adalah kesalahan yang masih Anda perbaiki di tahun kesepuluh. Asumsi awal mengeras. Proyek berkembang di sekitarnya. Tidak ada yang menulis ulang fondasinya.'
Kesenjangan Antara Peringatan dan Operasionalisasi
Peringatan Hamming benar. Mereka diajarkan. Mereka dikutip. Mereka diberikan dalam kurikulum. Namun peringatan bukanlah detektor. Hamming menggambarkan bentuk cacatnya. Ia tidak membangun alat yang berjalan di CI dan menandai jalur panas O(N²), kebocoran identitas ThreadLocal, atau pencatatan kredensial. Kesenjangan antara 'dapat diketahui' dan 'dapat dideteksi' adalah kesenjangan antara teori dan operasionalisasinya sebagai infrastruktur otomatis.
MOAD ada karena bidang ini membangun infrastruktur kebenaran, bukan infrastruktur performa atau keamanan pada tingkat yang sama. Unit test: standar sejak 1970-an. Property-based test: standar sejak 1990-an. Benchmark kompleksitas algoritmik di CI: masih eksperimental pada 2026.
Mengoperasionalkan Peringatan
Hamming memperingatkan tentang pengerasan kompleksitas, properti yang tidak diuji, solusi yang disalin tanpa kondisinya, & skala yang menghancurkan asumsi awal. Ia memberi kita kosakata. Ia tidak memberi kita detektor.
Pipeline MOAD mengisi celah itu: scan → ticket → patch → unit test → disclose → PR → upstream merge. Ini adalah Hamming yang dioperasionalkan: bukan hanya peringatan, tetapi deteksi otomatis & pipeline perbaikan.
Tanda Tangan Fester
Cacat kelas MOAD memiliki tanda tangan yang dapat dikenali. Kelima kondisi hadir secara bersamaan. Semua lima dapat diperiksa sebelum menulis satu pemindaian pun:
1. Keluaran benar? Jalankan rangkaian pengujian standar. Jika lolos, cacat tersebut merupakan properti performa atau keamanan, bukan kebenaran. Artinya CI standar tidak akan menangkapnya.
2. Tidak ada complexity test? Periksa konfigurasi CI. Apakah ada tahap benchmark? Apakah tahap tersebut membandingkan perilaku algoritmik (bukan hanya wall time) terhadap commit sebelumnya? Jika tidak: kondisi terpenuhi.
3. Berasal dari Small-N? Periksa git blame & commit asli. Berapa ukuran dataset pada implementasi pertama? Apakah ukuran tersebut lebih kecil dari beban produksi saat ini lebih dari 100×? Jika ya: kondisi terpenuhi.
4. Copy menyebar? Cari pola tersebut di seluruh codebase & ekosistem. Apakah pola struktural yang sama muncul di N≥3 codebase independen tanpa hubungan asal yang sama? Jika ya: fosil telah menyebar. Setiap salinan: situs fester baru.
5. Skala bertambah? Periksa metrik produksi. Berapa nilai N hari ini dibandingkan N saat pertama kali di-deploy? Apakah laju pertumbuhannya berkelanjutan? Pada N berapa defect ini menjadi kritis secara operasional?
Jika kelima kondisi telah diperiksa dan dikonfirmasi: Anda memiliki defect kelas MOAD. Perbaikannya selalu berupa penggantian satu baris atau satu metode. Penemuan adalah bagian yang sulit. Perbaikan adalah bagian yang mudah.
Inilah yang dimaksud Hamming: engineering bukan tentang perbaikan. Perbaikan sangat sederhana setelah Anda melihatnya. Engineering adalah tentang membangun sistem yang memungkinkan Anda melihatnya.
Terapkan Signature
Signature fester MOAD: output benar + tidak ada complexity test + berasal dari Small-N + copy menyebar + skala bertambah.
Tanda tangan ini tidak terbatas pada lima cacat MOAD. Ia menggambarkan kelas cacat yang tetap ada di sistem mana pun di mana pengujian kebenaran adalah satu-satunya gerbang kualitas otomatis.