- Setelah melakukan refactoring bertahap pada lapisan akses data Rust sepanjang 17.155 baris yang ditulis agen, token input yang dibutuhkan untuk perubahan fungsi yang sama turun dari 159.564 menjadi 27.360, atau turun 83%
- Total jumlah kode hampir tidak berubah, tetapi dengan memisahkan kode terkait ke file-file yang lebih kohesif, agen dapat membaca hanya sekumpulan file minimum yang diperlukan untuk perubahan
- Token input tidak banyak berkurang sampai file terbesar cukup diperkecil; pada akhirnya lapisan data dipecah menjadi 19 file Rust dan ukuran file terbesar turun dari 17.155 baris menjadi 3.695 baris
- Token output dan jumlah implementasi fitur hampir tidak berubah, dan Claude juga tidak mampu memilih atau menjalankan refactoring yang tepat secara konsisten sendiri, sehingga dibutuhkan arahan manusia yang aktif untuk perencanaan dan eksekusi
- Dengan harga input Sonnet 5 sebesar $3/MTok, penghematan per perubahan hanya sekitar $0,397, tetapi ini menunjukkan kemungkinan penurunan biaya yang berulang setiap kali lapisan akses data dimodifikasi setelahnya
File 17.155 baris yang dibuat agen
- Aplikasi pendukung kerja ini memiliki web UI dengan pembaruan dan pencarian dinamis, modal dan autosave, integrasi dengan sistem eksternal, machine learning dan analisis teks, pekerjaan latar belakang, serta lingkungan deployment otomatis
- Dari total sekitar 150 ribu baris, sekitar 120 ribu baris adalah Rust dan sisanya TypeScript serta Terraform; sebagian besar ditulis agen menggunakan Claude Code dan sebagian Cursor
- Pengembang hampir tidak pernah membaca atau meninjau kode, kecuali sesekali melihatnya karena penasaran
- Lapisan akses data tumbuh melewati 6.000 baris karena semua kueri baca/tulis mengulang konfigurasi permintaan HTTP yang sama serta encoding/decoding JSON, dan akhirnya satu file Rust mencapai 17.155 baris
- Modul ini tidak memiliki penghapusan duplikasi maupun bahasa internal, ekstraksi fungsi terbatas, dan hampir tidak ada ekstraksi kelas, tetapi memiliki antarmuka yang harus dipertahankan dan batas yang jelas sehingga cocok untuk eksperimen refactoring
Metode pengukuran dengan mengulang perubahan yang sama
- Tujuannya adalah memeriksa apakah investasi token pada refactoring saat ini bisa menurunkan konsumsi token untuk perubahan fitur di masa depan
- Karena agen tidak belajar dari pekerjaan sebelumnya, pada setiap tahap sub-agen baru diminta melakukan perubahan yang sama persis agar efek pembelajaran tidak tercampur
- Eksperimen dijalankan dalam urutan berikut
- Menulis rencana keseluruhan sesuai prinsip refactoring yang ketat
- Mendefinisikan perubahan representatif dalam satu prompt
- Meminta sub-agen melakukan perubahan dan melaporkan konsumsi token untuk mengukur nilai dasar
- Membuang hasil perubahan lalu menerapkan satu tahap refactoring
- Mengulangi proses melakukan perubahan yang sama lagi dan membuang hasilnya
- Mencatat biaya token, waktu eksekusi, dan jumlah baris kode di tiap tahap
- Karena Claude tidak dapat memberikan jumlah token real-time secara andal, agen diminta melaporkan jumlah karakter kirim/terima, lalu jumlah karakter dibagi 4 dengan tiktoken untuk mendekati jumlah token
Hasil pengukuran per tahap
- Pada kondisi dasar, lapisan akses data dan file terbesar sama-sama 17.155 baris, total kode Rust adalah 50.359 baris, dan perubahan representatif memerlukan 159.564 token input, 1.705 token output, serta 342 detik
- Setelah 15 tahap, lapisan akses data menjadi 16.608 baris, file terbesar 3.695 baris, total kode Rust 49.812 baris, dengan 27.360 token input, 2.113 token output, dan waktu eksekusi 454 detik
- Pada tahap-tahap menengah, token input ikut turun seiring mengecilnya file terbesar
- Setelah tahap 7, ekstraksi
queries.rsmembuat file terbesar menjadi 15.670 baris dan input turun menjadi 151.850 token - Setelah tahap 8, ekstraksi
traits.rsmembuatnya menjadi 13.845 baris dan input menjadi 132.558 token - Setelah tahap 12, pemisahan
store/menurunkannya menjadi 9.269 baris dan input hingga 104.080 token - Setelah pemisahan
store/terakhir, file terbesar menjadi 3.695 baris dan input anjlok menjadi 27.360 token
- Setelah tahap 7, ekstraksi
- Lapisan akses data akhir terdiri dari 19 file Rust, dan file terbesar menjadi library pengujian
- Pada refactoring lanjutan, pendekatan yang sama dapat diterapkan ke file pengujian tersebut
Mengapa token input turun 83%
- Token input untuk pekerjaan yang sama turun dari 159.564 menjadi 27.360, sehingga menghemat 132.204 token
- Karena total jumlah kode di lapisan akses data hampir tidak berubah, ini bukan hasil dari berkurangnya kode yang perlu dibaca
- Agen berhasil mengidentifikasi kumpulan file minimum yang dibutuhkan untuk pekerjaan, lalu membaca area kode yang makin kecil; ini juga terlihat pada output penalaran dan ringkasan pembacaan file Claude Code
- Jika file hanya dipecah kecil-kecil secara acak, agen justru harus membaca banyak file untuk mencari kode terkait sehingga efek yang sama sulit didapat
- Penurunan terbesar terjadi pada pemisahan terakhir, tetapi itu dimungkinkan karena tahap-tahap sebelumnya telah mengekstrak duplikasi dan membentuk struktur inti yang berulang
- Urutan ini bukan dirancang sebelumnya demi penghematan biaya, melainkan muncul dari proses refactoring umum: menghapus duplikasi lokal terlebih dahulu, menampakkan inti bersama, lalu memecahnya menjadi file-file kecil
Token output dan dampak finansial
- Token output yang dihasilkan saat menulis perubahan representatif hampir tidak berubah, sehingga refactoring tidak berhasil mengurangi ukuran perubahan aktual
- Harga token output memang 5 kali token input, tetapi jumlah absolutnya jauh lebih kecil
- Dengan harga input Sonnet 5 sebesar $3/MTok, penghematan per perubahan adalah sekitar 39,7 sen
- Belum diketahui apakah penghematan akan terus terakumulasi pada debugging, fitur yang lebih kompleks, atau refactoring skala seluruh codebase, dan juga belum diketahui biaya refactoring itu sendiri
- Juga belum jelas apakah refactoring yang menurunkan token output memungkinkan, karena pada perubahan representatif yang sederhana, noise dari generasi kode nondeterministik menutupi perbedaan akibat perubahan struktur
Refactoring bersama Claude
- Claude tidak bisa melihat kode lalu memilih sendiri refactoring yang akan diterapkan; hasil nyata sesuai dengan pekerjaan yang secara langsung diperintahkan dalam prompt
- Walau ada tahap refactoring eksplisit dalam harness pengembangan, Claude tidak memperbaiki file 17.155 baris itu melalui mekanisme tersebut
- Dalam proses perencanaan, Claude Code menemukan ekstraksi fungsi sebagai langkah pertama, sedangkan Claude.ai bahkan mengidentifikasi ekstraksi seluruh kelas klien
- Untuk perubahan mekanis digunakan skrip Python dengan
grepdansed, tetapi skrip itu sering bingung karena indentasi - Pemisahan file store yang paling bernilai terlewat pada percobaan pertama dan diterapkan lagi pada tahap lanjutan; karena itu jumlah tahap pada hasil pengukuran tidak cocok dengan tahap rencana di lampiran
- Seluruh eksperimen memakan waktu sekitar 8 jam dan sebagian besar berjalan tanpa pengawasan
- Setelah 6 jam 40 menit, ditemukan tahap yang terlewat dan dilakukan satu kali intervensi
- Penyebab utama lambatnya eksekusi tes bukan Wi‑Fi hotel yang lambat, melainkan cache build sementara Cargo yang tumbuh terlalu besar
Prompt perubahan representatif
- Setiap sub-agen hanya diberi codebase dan dokumen arsitektur, lalu diminta mengimplementasikan trait publik asinkron
ItemWatchStoreyang sama - Trait itu mencakup tiga metode berikut
watch_item(&self, item_id: &str, user_id: &str) -> Result<()>unwatch_item(&self, item_id: &str, user_id: &str) -> Result<()>watched_items_for_user(&self, user_id: &str) -> Result<Vec<String>>
- Informasi watch disimpan di koleksi Firestore
item_watchesdengan fielditemId,userId,createdAt - Mengembalikan
Vec<String>berisi item ID tanpa struct record Rust terpisah - Pada
FakeStoreditambahkan fieldVec<(String, String)>di memori, dan padaFirestoreStoreimplementasi dibuat dengan pola HTTP yang sudah ada - Di akhir respons, agen diminta mencetak JSON berisi file yang dibaca dan jumlah karakternya, serta jumlah karakter respons, dan diinstruksikan untuk tidak meng-commit kode
Rencana refactoring yang diterapkan
-
Tahap 1 — ekstraksi kelas
FirestoreClient- Memisahkan tanggung jawab koordinasi kueri domain dan pengiriman HTTP Firestore
- Memindahkan
reqwest::Client,project_id,MetadataAuth, serta penanganan URL dan header autentikasi ke struct baru - Dalam rencana, ini mengurangi sekitar 1.200 baris dari implementasi
FirestoreStoredan menambah sekitar 120 baris ke klien
-
Tahap 2 — ekstraksi fungsi
extract_doc_id,new_link- Menyatukan ekstraksi ID pada 20 parser dokumen dan pembuatan
Linkyang berulang 62 kali - Diperkirakan mengurangi sekitar 500 baris
- Menyatukan ekstraksi ID pada 20 parser dokumen dan pembuatan
-
Tahap 3 — ekstraksi fungsi pipeline kueri link
- Menyatukan pola pengumpulan hasil kueri di sekitar 15 tempat dan pencarian satu target ID di sekitar 8 tempat
- Diperkirakan mengurangi sekitar 200 baris
-
Tahap 4 — ekstraksi fungsi kondisi link
FakeStoreInner- Memisahkan transformasi
inner.links.iter()yang berulang di sekitar 15 metode menjadi dua metode - Diperkirakan mengurangi sekitar 120 baris
- Memisahkan transformasi
-
Tahap 5 — pengenalan fungsi pembuat nilai Firestore
- Mengganti ekspresi
json!untuk string, timestamp, dan lainnya yang berulang lebih dari 128 kali dengan empat pemanggilan fungsi - Mengubah macro multi-baris menjadi pemanggilan satu baris, diperkirakan mengurangi sekitar 80 baris
- Mengganti ekspresi
-
Tahap 6 — ekstraksi
FieldsBuilder- Menyatukan pola pembuatan field map pada sekitar 20 encoder ke dalam builder
- Mengurangi encoder sekitar 40 baris menjadi sekitar 12 baris, dengan total pengurangan yang diperkirakan 500–600 baris
-
Tahap 7 — pemisahan
queries.rs- Memindahkan 32 konstanta
LinkQuerydan tipe terkait ke modul terpisah - Mengurangi sekitar 800 baris dari
mod.rstanpa mengubah pemanggil yang ada
- Memindahkan 32 konstanta
-
Tahap 8 — pemisahan
traits.rs- Memindahkan 17 trait publik dan tipe error terkait lalu mengekspornya kembali
- Mengurangi sekitar 1.900 baris dari
mod.rs, tetapi file baru juga menjadi sekitar 1.900 baris
-
Tahap 9 — pemisahan
traits/per domain- Membagi trait ke
planning.rs,content.rs,people.rs,system.rs - Tanpa mengubah definisi maupun pemanggil, ukuran file dibatasi ke sekitar 300–650 baris per file
- Membagi trait ke
-
Tahap 10 — pemisahan
codec.rs- Memindahkan encoder/decoder dokumen, parser,
FieldsBuilder, dan fungsi pembuat nilai - Setelah tahap 6, ini menjadi modul sekitar 400–500 baris dan mengurangi sekitar 500 baris dari
mod.rs
- Memindahkan encoder/decoder dokumen, parser,
-
Tahap 11 — pemisahan
fake_store.rs- Memindahkan
FakeStore,FakeStoreInner, dan 18 implementasi trait - Mengurangi sekitar 4.700 baris dari
mod.rs
- Memindahkan
-
Tahap 12 — pemisahan implementasi
FirestoreStore- Menempatkan struct, constructor,
FirestoreClient, danMetadataAuthdistore/mod.rs, lalu membagi implementasi trait ke file-file per domain - Mengubah file sekitar 10.000 baris menjadi 10 file dengan ukuran masing-masing 120–650 baris, dan menjadikan
mod.rsfile re-export sekitar 100 baris
- Menempatkan struct, constructor,
-
Tahap 13 — menempatkan tes bersama modul target
- Tanpa mengubah kode tes, memindahkannya ke bawah masing-masing file implementasi
- Mengurangi sekitar 2.000 baris dari
mod.rs, dan menambah 200–700 baris tes terkait ke tiap file
Keterbatasan dan eksperimen lanjutan
- Token yang dipakai untuk menulis dan menjalankan rencana refactoring tidak dihitung terpisah, sehingga biaya investasi refactoring tidak bisa dihitung dengan tepat
- Batas atas berdasarkan total penggunaan pada rentang waktu tersebut adalah 5 juta token, tetapi ini mencakup dua kali penulisan rencana, eksperimen dan desain perubahan representatif, serta pekerjaan lain
- Objek eksperimen masih berada pada tahap greenfield dan merupakan satu aplikasi besar yang dibangun serta dikelola satu pengembang, sehingga hasilnya tidak bisa digeneralisasi
- Pekerjaan lanjutan perlu mencakup pengukuran token refactoring yang akurat, perubahan yang lebih kompleks, refactoring dengan cakupan lebih luas, refactoring berkelanjutan, dan perbandingan nilai relatif antarpendekatan
- Eksperimen ini menjadi titik awal untuk mengukur sekaligus nilai waktu/uang dari refactoring dan biaya refactoring itu sendiri
1 komentar
Komentar Hacker News
Menarik melihat praktik terbaik pengembang yang dulu diabaikan oleh sebagian besar perusahaan IT diciptakan ulang sebagai praktik terbaik AI
Dulu, menaruh dokumentasi di dalam kode, tidak sekadar melempar tugas Jira, melainkan memberi konteks seluruh proyek, dan melakukan refactoring demi produktivitas jangka panjang dianggap membosankan
Sekarang, ketika hal yang sama dikemas sebagai menaruh dokumentasi AI di kode dan
CLAUDE.md, tidak mengendalikan detail lewat prompt, dan melakukan refactoring demi produktivitas AI, orang justru menganggapnya menarikManusia, meski tahu cara yang benar, bisa sibuk atau kehilangan fokus, sedangkan agen tidak bosan dengan tugas yang membosankan, sehingga prosedur yang terbukti efektif untuk manusia tetapi sulit diterapkan secara konsisten kini menjadi realistis
Berdasarkan spesifikasi bersama, agen terpisah digunakan untuk menulis implementasi dan pengujian, lalu agen audit memverifikasinya agar hasil mereka tidak saling terkontaminasi; ini adalah penerapan luas dan konsisten dari cleanroom engineering yang dikembangkan IBM untuk manusia pada tahun 1980-an, kini diterapkan pada AI
Ini bukan membungkus praktik lama agar tampak baru demi tren AI, melainkan menunjukkan dengan bukti bahwa praktik terbaik yang berusia lebih dari 20 tahun masih tetap relevan
Agen harus mempelajari ulang konteks di setiap sesi, sehingga nilai praktik terbaik menjadi jauh lebih besar dan efeknya juga langsung terasa
Meski begitu, menyenangkan bisa menjalankan CLI 100 kali selama satu jam untuk menguji kegunaan flag baru
Sebaliknya, AI akan bekerja sangat buruk atau bahkan tidak bisa berfungsi sama sekali tanpa fondasi seperti ini, sehingga praktik rekayasa yang sehat bukan lagi perbaikan jangka panjang, melainkan prasyarat mutlak
Bahkan jika efek bersihnya sama sekali nol, memasukkan AI ke dalam alur kerja tetap berguna karena memberi alasan untuk memperkenalkan praktik pengembangan yang semestinya
Tulisan ini bagus karena mengkritik AI secara konkret dan kuantitatif berdasarkan bagaimana alat AI benar-benar digunakan
Dibanding tulisan yang hanya membahas risiko sosial secara samar tanpa contoh penggunaan nyata, tulisan yang menunjukkan dengan ukuran apa yang tidak bisa dilakukan AI jauh lebih bermanfaat
Dengan alasan yang sama, laporan yang mewawancarai anggota Boko Haram untuk menyelidiki bagaimana AI digunakan dalam terorisme juga terasa mengesankan
Saya sangat menyukai refactoring yang dilakukan langsung tanpa AI
Tidak ada perubahan yang terlihat, tetapi ada kepuasan karena membuat situs web yang hasilnya mungkin tidak langsung tampak sekarang menjadi jauh lebih mudah dikelola di masa depan
Menemukan masalah yang sebenarnya sudah diselesaikan oleh pola mapan tetapi kembali dipecahkan oleh kode jalan pintas aneh dari masa lalu, lalu memindahkannya ke arah praktik terbaik tanpa menambah utang teknis baru, terasa menyenangkan seperti memecahkan teka-teki
Saya bahkan pernah mengimplementasikan semuanya sendiri secara seadanya, termasuk autentikasi, dan mempelajari cara kerja internalnya dengan cara yang sulit; hasilnya, saya juga mendapatkan bahan refactoring yang bisa dinikmati selama 10 tahun ke depan
Saya jadi memahami secara konkret maksud dari pernyataan bahwa codebase adalah satu sistem, dan mulai melihatnya pada level yang lebih tinggi sebagai organisasi kontinu atau jaring yang bisa ditarik dan ditekan
Bahwa AI bisa menghilangkan proses belajar seperti ini menyoroti masalah bagi pengembang junior. Untuk mendapatkan intuisi, tidak ada jalan lain selain menggali sendiri secara mendalam, dan meski Naur sudah memperingatkannya 40 tahun lalu, pelajaran ini terus dilupakan
Menurut saya, saat agen melakukan refactoring, keterlibatan manusia itu wajib
Model generatif bisa saja menemukan bagian yang terlewat saat fokus pada pekerjaan awal melalui model peninjau, tetapi masih diragukan apakah ia benar-benar memahami tujuan keseluruhan proyek dan cara kode terikat satu sama lain sehingga bisa menilai duplikasi atau struktur yang lebih elegan
Menyerahkan refactoring kepada coding agent itu mirip seperti meminta ahli bedah trauma meningkatkan kemampuan atletik; untuk melakukannya dengan benar dibutuhkan sudut pandang holistik
Hanya memecah file besar menjadi beberapa file tetaplah refactoring yang dangkal. Tanpa teori tentang kode mana yang harus tetap bersama dan apa yang perlu diekstrak menjadi fungsi utilitas, itu lebih mirip memecah bilangan besar menjadi bilangan kecil lalu menjumlahkannya kembali daripada faktorisasi
Agen kadang membuat sistem yang menyimpan dan menghitung ulang nilai yang sebenarnya sudah diambil dari API, tetapi manusia bisa melihat seluruh proyek dan dengan cermat menemukan bahwa data yang dibutuhkan sudah ada pada key tertentu di JSON
functools.partialalih-alih data classBatas file merepresentasikan batas subsistem logis sehingga memudahkan penalaran, dan konsep bahwa isi file lain pada dasarnya diperlakukan sebagai sesuatu yang opak juga sangat banyak dalam data pelatihan
Saya rasa kelebihan struktur ini bukan cuma sifat kebetulan dari kognisi manusia, tetapi juga punya sisi objektif
Pengalaman refactoring, cara menangani codebase orang lain, dan kemampuan menjelaskan niat masa lalu dan saat ini sebagai perancang asli sangat membantu
Bahasanya non-mainstream, dengan sedikit kerentanan dependensi dan mudah ditangani LLM, dan setelah bias ke JavaScript serta Python disingkirkan, kecepatan kerja meningkat besar
Ini adalah proyek JSR-223 yang menulis skrip dalam beberapa bahasa populer, tetapi semuanya dijalankan di JVM sesuai kebutuhan lingkungan: https://en.wikipedia.org/wiki/Scripting_for_the_Java_Platform
Di pasar kerja ini, kita harus menggunakan coding agent berbasis model frontier terbaru dan memahami dengan tepat kemampuan serta batasannya; jika memberi penilaian sebaliknya saat wawancara, itu bisa menjadi alasan gagal
Konteks yang ringkas bukan hanya mengurangi konsumsi token, tetapi juga meningkatkan penalaran dan memungkinkan lebih banyak lapisan dimasukkan ke dalam satu konteks untuk ditangani secara cerdas
Refactoring menuju abstraksi yang baik menghasilkan perangkat lunak yang melakukan generalisasi lebih baik, sehingga lebih mungkin benar bukan hanya pada kasus yang diuji tetapi juga pada kasus hasil interpolasi dan ekstrapolasi
Ada matematika teori informasi dan Bayes yang mendukung hal ini, dan perangkat lunak yang lebih efisien secara ekonomi dan energi menjadi lebih akurat terasa seperti kebetulan yang indah
Intinya adalah mengurangi entropi kode
LLM sudah cukup baik menalar makna bahkan dengan konteks yang sedikit
Menarik bahwa ada data yang ditunjukkan, dan itu sesuai dengan kesan saya bahwa LLM sangat diuntungkan oleh kode yang terpisah dengan baik, tetapi kemampuan mereka untuk membuat kode seperti itu sendiri tidak terlalu hebat
Kebanyakan pengembang manusia pun mungkin sama
Secara keseluruhan keuntungan AI besar, tetapi tetap perlu waktu untuk merapikan, dan saya masih merasa setiap baris tetap harus dibaca
Saya menunda sebagian review agar tidak menghambat progres tim lain, lalu belakangan membayar utang teknis yang lebih besar dari biasanya, tetapi melonggarkan bottleneck lebih dulu memang layak
AI telah membuat utang teknis lebih mudah ditarik dalam segala arti, dan jika diarahkan dengan baik juga cukup mampu melunasinya. Namun hasilnya berbeda-beda pada tiap orang: https://news.ycombinator.com/item?id=49035455
Sangat membantu jika ditunjukkan contoh kode yang tersusun baik atau repositori open source untuk memperlihatkan apa yang harus dan tidak boleh dilakukan
Sebagian besar manfaat ekonomi dari refactoring datang bukan dari penghematan token, melainkan dari peningkatan pemahaman manusia
Kita bisa lebih cepat menyelesaikan panggilan insiden jam 3 pagi, mengurangi bug yang masuk ke lingkungan produksi, dan merilis lebih cepat daripada pesaing
Yang terpenting, ketika orang memahami sistem, mereka jadi lebih bersedia memikul tanggung jawab dan kepemilikan, sehingga saat masalah muncul mereka lebih cepat memperbaikinya dan lebih proaktif terjun ke bagian yang perlu ditingkatkan
Poin utamanya adalah bahwa refactoring mengurangi konsumsi token, dan bagus bahwa efeknya diukur secara kuantitatif alih-alih dibahas secara abstrak
Namun Fowler mengatakan dalam 《Refactoring》 bahwa prasyarat penting refactoring adalah pengujian yang kokoh, dan terlepas dari AI saya rasa manfaat yang sesungguhnya ada di sini
Pengujian yang baik mencegah regresi yang dibuat manusia maupun robot, dan meninggalkan spesifikasi yang bisa dibaca keduanya dalam bentuk kode: https://www.oreilly.com/library/view/refactoring-improving-the/9780134757681/
Jika harga Sonnet 5 dihitung 3 dolar per MTok, maka jumlah yang dihemat pada perubahan mendatang yang menyentuh lapisan akses data adalah 39,7 sen
Jika mempertimbangkan penurunan harga OpenAI, model terbuka, dan tren jangka panjang turunnya harga token, itu mungkin tidak sebanding dengan biaya developer senior dengan tarif sekitar 100 dolar per jam untuk memandu refactoring
Kode yang dibuat agen telah menjadi gumpalan raksasa yang seolah hanya bisa dibaca dan dipahami oleh agen itu sendiri, dan di sini realitas di lapangan lebih penting daripada apakah itu fitur, bug, atau sifat emergen
Untuk menangani kode yang dihasilkan alat AI, kita justru kembali menjadi bergantung pada alat AI
Namun manusia juga sejak dulu membuat file yang sangat besar dan monorepo, dan berkat LLM pekerjaan mengedit serta me-refactor itu akhirnya menjadi cukup tertangani
Dalam situasi ketika codebase sudah terlalu besar dan berantakan untuk dipahami manusia, LLM mungkin bisa menyelamatkan kita; secara pribadi saya membenci file raksasa, tetapi prinsip perapian ala Fowler mungkin tidak lagi penting, dan itu terasa pahit
Bahkan karyawan yang biasa-biasa saja atau sesekali bagus pun kini bisa mengeksekusi dengan sangat cepat hal-hal yang dulu terhalang prosedur perusahaan, dan itu justru bisa mengubah mereka menjadi karyawan yang buruk
Jika agen membuat file atau fungsi yang terlalu besar, cukup beri instruksi untuk tidak melakukannya dan mereka akan mengikuti
Saya menganggap refactoring adalah salah satu tanda terbaik dari tim pengembang yang sehat
Refactoring sendiri memang punya manfaat, tetapi nilainya sering tidak terlihat dari sudut pandang product owner atau daftar tugas fitur
Jika tim melakukan refactoring demi kesehatan keseluruhan perangkat lunak, itu berarti pengembang merasa nyaman mengajukan usulan demi perangkat lunak yang baik, dan usulan itu diterima dengan serius
Pembusukan perangkat lunak paling parah terjadi ketika tim tidak punya motivasi atau kewenangan untuk mewujudkan visi tentang perangkat lunak berkualitas tinggi, dan jika tim bisa mengikuti penilaian mereka tentang keunggulan, itu umumnya pertanda baik
Tentu ada juga bentuk berlebihan seperti menulis ulang total dari Ruby, Node, Rust, lalu kembali lagi ke teknologi yang ramah agen, tetapi di lingkungan perusahaan jauh lebih umum melihat tim yang merasa tidak mendapat izin untuk melakukan perbaikan