- Pabrik perangkat lunak mengoperasikan loop yang berulang mengumpulkan konteks, bertindak, dan memverifikasi dalam skala besar dengan membungkusnya dalam harness, dan terbagi menjadi pabrik terang tempat manusia memberi penilaian serta pabrik gelap yang menyerahkan sampai peninjauan kode kepada mesin
- Pembuatan kode, pengujian, dan pemindaian dapat diskalakan nyaris tanpa biaya, tetapi review dan penilaian manusia sulit diskalakan, sehingga kecepatan memverifikasi hasil secara murah dan andal menjadi bottleneck, bukan jumlah yang dihasilkan
- Jika manusia tidak membaca kode, akan menumpuk utang pemahaman (comprehension debt) antara skala kode dan pemahaman manusia, dan bahkan jika tes terus lolos, pada sistem kompleks yang dioperasikan jangka panjang masalah pemeliharaan bisa muncul belakangan
- Otomatisasi penuh hanya boleh diterapkan pada loop pendek yang memiliki kriteria penilaian yang langsung, tidak drift seiring waktu, dan sulit dimanipulasi; untuk pekerjaan seperti autentikasi, pembayaran, dan API publik yang biaya kesalahan dan cakupan dampaknya besar, review manusia harus dipertahankan
- Peran engineer bergeser dari menulis perubahan individual secara langsung menjadi merancang dan menjaga loop eksternal, serta memverifikasi bukti dari diagnosis, implementasi, dan pengujian yang dilakukan agen, lalu bertanggung jawab atas persetujuan dan hasilnya
Dari loop ke pabrik perangkat lunak
- Gagasan untuk menjadikan perangkat lunak sebagai proses produksi yang dapat diulang dan diukur dapat ditelusuri kembali hingga 「The economics of program production」 yang dipublikasikan Bob Bemer pada 1968
- Karena ide tidak mudah diproduksi massal seperti suku cadang mobil, upaya-upaya ini selama setengah abad terakhir umumnya tidak memenuhi harapan
- Perubahan dalam 2 tahun terakhir cukup besar untuk meninjau kembali gagasan lama pabrik perangkat lunak, tetapi jebakan lama bisa dikemas seolah peluang baru
- Seluruh sistem terdiri dari tiga lapisan: loop, harness, dan pabrik
- Loop adalah unit kerja minimum di mana satu agen mengumpulkan konteks, bertindak, lalu memeriksa hasilnya, dan mengulang sampai kondisi penghentian terpenuhi
- Loop engineering adalah pendekatan merancang sistem kecil yang memberi prompt kepada agen, alih-alih manusia memasukkan prompt setiap kali
- Harness mencakup sandbox tempat loop berjalan, alat yang dapat digunakan, memori yang dipertahankan antar eksekusi, dan gate yang menentukan apakah pekerjaan sudah selesai
- Model tanpa harness bisa berulang tanpa akhir, sehingga harness membuat loop menjadi berguna dan aman
- Pabrik perangkat lunak adalah struktur yang mengambil item dari antrean kerja, menjalankan beberapa loop berbasis harness secara bersamaan, lalu mengirimkannya ke production melalui gate review
- Ini lebih mirip bagan organisasi yang tersusun dari loop daripada satu agen tunggal yang lebih besar
- Unit kerja engineer juga bergeser dari perubahan kode individual ke loop, harness, dan alur antar-loop
Alur kerja dan bottleneck pabrik
- Visi kepemimpinan engineering, niat engineer, serta sinyal dari insiden dan permintaan pengguna masuk ke satu antrean kerja
- Harness memilih item, membuat perubahan, lalu CI, tes, analisis statis, dan berbagai pemindaian memeriksa perubahan itu secara paralel
- Jika gate review menyetujui, perubahan dideploy, dan data monitoring production kembali menjadi sinyal yang memicu pekerjaan berikutnya
- Pembuatan, pengujian, dan pemindaian dapat diskalakan dengan biaya yang dapat diabaikan, tetapi penilaian manusia pada gate review sulit diskalakan
- Apakah kecepatan pengembangan dan frekuensi deploy dapat ditingkatkan bergantung pada bagaimana bottleneck penilaian ini ditangani
Pabrik gelap dan utang pemahaman
- Dalam manufaktur, pabrik gelap adalah fasilitas yang beroperasi dengan lampu dimatikan karena mesin tidak memerlukan pencahayaan
- FANUC telah mengoperasikan pabrik seperti ini sejak 2001, dan Xiaomi juga membuka pabrik gelap yang sangat otomatis pada 2024
- Dalam pabrik perangkat lunak gelap, manusia tidak membaca kode, dan perubahan dideploy hanya berdasarkan verifikasi yang dilakukan mesin pembuat kode tersebut
- Kegelapan di sini bukan suasana negatif, melainkan berarti manusia telah menghilang dari proses menulis diff, mereview, dan mendeploy
- Menghapus review manusia membuat gangguan seolah hilang, sehingga throughput vertikal tim terasa meningkat tajam
- Namun, karena ada biaya tersembunyi, mempertahankan alur kerja seperti ini dalam jangka panjang lebih sulit daripada yang tampak
- Orkestrasi, prototyping berbasis sandbox, dan pemanggilan tool akan terus makin kuat, tetapi harness saja tidak cukup untuk menjaga kualitas codebase jangka panjang
- Utang pemahaman adalah kesenjangan antara jumlah kode yang ada dan jumlah kode yang benar-benar dipahami manusia
- Pabrik gelap menumpuk utang pemahaman dengan cepat bahkan saat tes terus lolos
- Berbeda dari perubahan langsung pada area kode kecil atau proyek akhir pekan, sistem lama yang kompleks dan telah dikembangkan lebih dari 10 tahun harus terus dipelihara dengan kecepatan profesional
- Jika proyek otomatisasi dijalankan selama 3~6 bulan, tim bisa kewalahan oleh kode yang tak pernah dibaca
- Ketika Dex Horthy menjalankan pabrik otomatis penuh selama sekitar 4 bulan tanpa manusia melihat kode hasil generasi, menemukan akar masalah tetap memerlukan debugging manual yang melelahkan
- Semakin penggunaan token dimaksimalkan, semakin diam-diam pemahaman manusia terhadap sistem berkurang
- Kegagalan bisa datang lambat dan diam-diam, alih-alih seluruh sistem yang selama ini lolos tes tiba-tiba runtuh sekaligus
Mengapa verifikasi menjadi batasan, bukan generasi
- Back pressure adalah prinsip memberi otonomi pada loop hanya sejauh hasilnya bisa diverifikasi secara murah dan andal
- Masalah intinya adalah kesenjangan antara kemampuan generasi yang nyaris tak terbatas dan perhatian manusia yang terbatas
- Jika rentang verifikasi tidak melebar, perubahan akan menumpuk; jika hanya menambah volume tanpa gate tepercaya, akan muncul PR berkualitas rendah dan cacat yang diproduksi
- Peningkatan performa model tidak otomatis mempersempit jarak antara generasi dan verifikasi
- Nilai arsitektur yang baik terlihat dalam hitungan bulan dan tahun, bukan detik atau menit
- Sulit menghitung fungsi biaya yang rapi atau sinyal evaluasi yang langsung untuk keunggulan arsitektur, sehingga keputusan desain kompleks pun sulit dilatih sebagai contoh yang baik
Cara menyalakan lampu kembali
- Bahkan di pabrik terang, agen tetap menangani sebagian besar implementasi, tetapi pada titik-titik di mana biaya keputusan yang salah tinggi, lampu dinyalakan dan manusia membaca hasilnya sebelum deploy
- Penilaian manusia tidak seharusnya ditempelkan hanya pada code review terakhir, tetapi dipindahkan ke tahap produk, desain, dan arsitektur sebelum agen memulai loop
- Meninjau rencana 200 baris selama 1 jam di awal dapat mengurangi review panjang yang harus membongkar 2.000 baris kode hasil generasi untuk mencari keputusan desain setelah implementasi
- Semakin besar biaya dan semakin lama dampak suatu keputusan, semakin perlu manusia terlibat sebelum implementasi; bahkan jika review awal sudah dilakukan, diff tetap diperiksa langsung bila perlu
- Jaring pengaman bukan teknik baru, melainkan terdiri dari praktik arsitektur yang sudah familiar
- Menangkap error di compiler, bukan di production, dengan type dan method signature yang baik
- Menyediakan seam pengujian agar perilaku bisa dipatok dan perubahan bisa diamati
- Menempatkan kode agar manusia maupun model mudah menemukan bagian yang dibutuhkan
- Menjaga call stack tetap pendek dan mudah dibaca
- Memperjelas batas komponen agar cakupan dampak perubahan terbatas
- Memungkinkan komponen diganti lewat dependency injection
- Arsitektur seperti ini juga menjalankan peran kedua: mencegah kesalahan agen coding otomatis dengan cara yang murah dan sulit dikelabui
- Agen seperti Claude Code dan Codex dilatih dengan reinforcement learning untuk harness dan penggunaan tool mereka sendiri, tetapi tidak serta-merta memberi maintainability jangka panjang
- Jaring pengaman harus berada di luar model, dan investasi arsitektur menjadi cara untuk memperoleh lebih banyak otonomi dengan aman
- Jika digabungkan dengan infrastruktur yang aman, sebagian loop pendek berisiko rendah dapat dijalankan tanpa awak
- Misalnya setiap malam GitHub Actions cron dapat memperbaiki tepat satu antipattern, pelanggaran lint, atau prop yang tidak perlu dibuat optional, lalu melakukan commit dan membuka satu PR kecil
- Target dengan biaya kegagalan tinggi seperti sistem autentikasi, engine pembayaran, dan kontrak API publik harus direview manusia dengan pengetahuan sistem dan penilaiannya
Loop yang layak diotomatisasi
- Agar loop dapat diotomatisasi penuh, pemeriksaannya harus murah, sering dijalankan, dan bergantung pada kriteria yang tidak mudah dikelabui
- Ini mencakup penilai yang jelas mengembalikan benar/salah, type gate, property-based test, dan agen review yang digabungkan dengan rubrik evaluasi nyata
- Putusan harus keluar segera dan tidak boleh drift seiring waktu
- Otomatisasi dimungkinkan ketika status selesai dapat dibuktikan oleh mesin, bukan hanya manusia
- Loop pendek lebih mudah diverifikasi daripada loop panjang
- Menurut aturan praktis Dex, agen bekerja baik pada 3~10 langkah, tetapi mulai kehilangan alur saat melewati 20 langkah
- Semakin banyak konteks menumpuk, semakin besar kemungkinan agen keluar jalur, dan loop panjang menyembunyikan error di sudut-sudut
- Jika biaya jawaban yang salah tinggi dan hanya manusia yang bisa menemukannya, lampu harus dinyalakan
- Ini mencakup bug production halus yang tak tertangkap tes, dampak yang luas, dan keputusan yang menentukan pekerjaan lebih dari 1 tahun
- Dalam kasus seperti ini, perhatian manusia adalah produk sebenarnya sekaligus sumber daya yang mahal namun esensial
- Jika semua loop disetel ke mode yang sama, keduanya akan gagal
- Jika semuanya dijalankan dalam kegelapan, sistem mungkin harus dibongkar beberapa bulan kemudian
- Jika semuanya dijalankan terang, review akan menjadi bottleneck raksasa
- Keterampilan inti adalah memutuskan pada titik mana lampu perlu dinyalakan di setiap loop
Graf dan state machine yang membungkus loop
- Pekerjaan agen kemungkinan besar pada akhirnya tersusun sebagai graf berarah, meskipun disebut finite state machine atau pemanggilan layanan bersyarat
- Setiap node adalah langkah eksplisit, dan edge antar-node adalah kondisi eksplisit
- Semua kode dapat direpresentasikan sebagai control flow graph, jadi strukturnya sendiri bukan hal baru
- Otonomi agen dibatasi ke dalam tiap node, bukan ke seluruh graf
- Upaya yang lebih baru adalah menghapus flowchart dan membiarkan model memilih jalur pada setiap pemanggilan tool sampai ia sendiri menyatakan selesai
- Setelah berbenturan dengan codebase lama, gerakan untuk kembali memiliki control flow pada dasarnya sama dengan memulihkan graf lama di sekitar loop
- Pekerjaan perbaikan bug berjalan berbeda dalam loop murni dan dalam graf
- Dalam loop murni, investigasi masalah, perubahan kode, pemilihan dan urutan eksekusi tes, retry, dan penilaian selesai semuanya diputuskan sambil berjalan
- Dalam graf, reproduksi bug atau permintaan informasi tambahan, identifikasi penyebab, perbaikan, pengujian, dan review sudah didefinisikan lebih dulu sebagai jalur
- Kegagalan tes kembali ke tahap perbaikan, keberhasilan berpindah ke review, dan pekerjaan hanya selesai jika disetujui
- Agen bertindak cerdas di dalam tiap node, tetapi tidak bisa menyimpang ke jalur yang tidak diizinkan
- Graf adalah bentuk visualisasi back pressure
- Dengan mengorbankan sebagian kebebasan agen, kita mendapatkan pemeriksaan wajib dan titik kegagalan yang bisa dibaca
- Jika eksekusi gagal, kita bisa mengidentifikasi node mana yang menghentikannya
- Seperti pendekatan 12-factor agents, banyak sistem agen lebih mirip “kode yang sebagian besar deterministik dengan langkah LLM yang dicampurkan di titik yang tepat”
- Pola yang sama juga muncul pada LangGraph dan LlamaIndex Workflows, hybrid workflow graph di atas agen yang diperkenalkan Jerry Liu, serta state machine dan actor model yang dihubungkan David Khourshid
- Di sini graf bukan berarti knowledge graph, melainkan graf berarah dengan alur kerja dan edge bersyarat yang telah didefinisikan sebelumnya
Manusia memiliki loop eksternal
- Manusia tidak hilang dari pabrik, melainkan berpindah dari lini eksekusi ke loop eksternal
- Agen menjalankan loop internal berupa investigasi bug, penulisan diagnosis, implementasi perbaikan, menjalankan tes, dan melaporkan hasil
- Engineer menilai apakah masalah diselesaikan dengan cara yang benar, memverifikasi diagnosis dan implementasi, menyetujui perubahan, dan bertanggung jawab atas hasil yang salah
- Di batas antara loop internal dan loop eksternal terdapat bukti seperti diff, tes, log, dan penjelasan singkat yang menghubungkannya
- Dengan type, seam pengujian, dan rubrik evaluasi, eksekusi agen dapat diawasi tanpa terlalu banyak pekerjaan manual pada setiap perubahan
- Posisi engineer bergeser dari menulis perubahan langsung di lini produksi menjadi merancang lini dan menjaga gate
- Model dan harness bisa ditingkatkan, tetapi mengotomatisasi penilaian manusia untuk mengidentifikasi masalah yang mahal dalam jangka panjang tetap sulit
- Yang paling berbahaya adalah membuat seluruh ruang kerja gelap sehingga manusia tidak bisa memeriksa apa yang sedang terjadi atau bahkan menemukan sakelar lampunya
Belum ada komentar.