- Dalam lingkungan pengembangan yang berkolaborasi dengan AI, manusia harus mendefinisikan arah proyek dan pengambilan keputusan secara jelas agar kualitas tetap terjaga
- Melalui dokumentasi yang akurat, baik AI maupun pengembang lain harus dapat memahami kebutuhan dan batasan secara jelas
- Bangun sistem debug dan proses code review untuk memperkuat keandalan serta proses verifikasi kode yang dihasilkan AI
- Pastikan stabilitas dan konsistensi kode melalui penandaan fungsi berisiko keamanan, pemisahan pengujian, dan aturan linting yang ketat
- Pertahankan kendali atas pembuatan kode AI dan maksimalkan efisiensi melalui pembagian unit kerja dan meminimalkan kompleksitas
1. Menetapkan visi yang jelas
- Manusia memahami dunia, tim, dan perilaku pengguna, tetapi AI tidak memiliki pengalaman sehingga memerlukan instruksi yang eksplisit
- Dalam proyek, keputusan yang tidak terdokumentasi akan diambil oleh AI sebagai gantinya
- Arsitektur, antarmuka, struktur data, dan algoritme perlu dibahas sebelumnya dan metode pengujiannya harus didefinisikan
- Keputusan jangka panjang dan sulit diubah harus selalu dikelola langsung oleh manusia
2. Menjaga dokumentasi yang akurat
- Agar AI dapat menghasilkan kode yang sesuai tujuan, penyampaian kebutuhan secara rinci sangat penting
- Karena pengembang lain juga harus dapat memberikan informasi yang sama kepada AI, dokumen dengan format standar perlu disertakan dalam repositori kode
- Catat secara rinci kebutuhan, batasan, arsitektur, standar coding, design pattern, dan sebagainya
- Gunakan diagram UML, flowchart, dan pseudocode untuk merepresentasikan struktur yang kompleks secara visual
3. Membangun sistem debug yang mendukung AI
- Siapkan sistem debug yang efisien agar AI dapat memverifikasi fungsi kode dengan cepat
- Contoh: kumpulkan log dari semua node dalam sistem terdistribusi dan berikan informasi ringkas seperti “data telah dikirim ke semua node”
- Dengan ini, biaya eksekusi perintah dapat ditekan dan kecepatan identifikasi masalah dapat ditingkatkan
4. Menandai tingkat code review
- Intensitas review harus dibedakan berdasarkan tingkat pentingnya kode
- Contoh: tambahkan komentar
//A setelah fungsi yang ditulis AI untuk menunjukkan apakah sudah ditinjau manusia
- Sistem ini memudahkan identifikasi dan pengelolaan kode yang belum ditinjau
5. Menulis spesifikasi tingkat tinggi dan menguji langsung
- Demi lolos pengujian, AI dapat mengakali dengan mock object atau nilai hardcoded
- Untuk mencegah hal ini, property-based testing harus ditulis langsung oleh manusia
- Contoh: restart server dan verifikasi konsistensi nilai dalam database
- Kode pengujian harus dipisahkan ke area terpisah agar AI tidak dapat mengubahnya
6. Memisahkan pengujian antarmuka
- Biarkan AI menulis pengujian antarmuka tanpa mengetahui konteks kode lain
- Dengan begitu, objektivitas pengujian tetap terjaga karena tidak terpengaruh oleh AI yang membuat implementasi
- Pengujian ini juga harus dilindungi agar AI tidak bisa mengubahnya secara sembarangan
7. Aturan linting dan formatting yang ketat
- Gaya kode yang konsisten dan aturan linting sangat penting untuk menjaga kualitas dan menemukan kesalahan lebih awal
- Baik AI maupun manusia dapat lebih mudah memeriksa kualitas kode
8. Memanfaatkan prompt code agent sesuai konteks
- Gunakan file prompt per proyek seperti CLAUDE.md untuk mengurangi biaya pemahaman awal AI
- Sertakan standar coding, design pattern, kebutuhan, dan lainnya untuk meningkatkan kualitas serta efisiensi pembuatan kode oleh AI
9. Mengidentifikasi dan menandai fungsi berisiko keamanan
- Fungsi yang sensitif terhadap keamanan seperti autentikasi, otorisasi, dan pemrosesan data harus ditandai secara eksplisit
- Contoh: gunakan komentar
//HIGH-RISK-UNREVIEWED, //HIGH-RISK-REVIEWED
- Jika AI memodifikasi fungsi tersebut, status review harus diubah secara otomatis
- Pengembang harus selalu memastikan status ini tetap akurat
10. Meminimalkan kompleksitas kode
- Satu baris kode yang tidak perlu pun menghabiskan context window AI dan menambah biaya
- Pertahankan struktur sesederhana mungkin agar AI dan manusia sama-sama lebih mudah memahaminya
11. Mengeksplorasi masalah melalui eksperimen dan prototipe
- Manfaatkan karakteristik biaya rendah dari pembuatan kode oleh AI untuk menguji berbagai solusi
- Buat beberapa prototipe dengan spesifikasi minimal untuk menjelajahi pendekatan yang paling optimal
12. Hindari pembuatan skala besar yang sembarangan
- Pekerjaan yang kompleks harus dipecah menjadi unit-unit kecil agar AI dapat menanganinya secara bertahap
- Contoh: alih-alih seluruh proyek, buat fungsi atau kelas secara terpisah
- Setiap komponen harus diverifikasi apakah sesuai dengan spesifikasi, dan
jika kompleksitas kode tidak lagi terkendali, proyek harus dikembalikan ke kondisi awal
1 komentar
Komentar Hacker News
Saya masih merasa proses menulis kode sendiri sambil merapikan alur pikir itu penting
Bagi saya, kode adalah semacam mekanisme pemaksa yang membuat saya mengasah detail
Rasanya menulis spesifikasi saja tidak memberi kedalaman seperti itu
Kalau proses itu diserahkan ke LLM, rasanya seperti pesawat kehilangan daya angkat lalu mental ikut macet
Stres dalam memecahkan masalah memang berkurang, tetapi motivasi untuk berpikir dan mencipta juga hilang
Di sekitar saya banyak yang suka AI menulis kode untuk mereka, tetapi saya bukan bagian dari kelompok itu
Sulit bagi saya mempercayai orang yang bilang bisa bikin SaaS sambil minum kopi dan menjalankan 5 agent
Kalau ingin kode berkualitas baik, saya rasa perlu benar-benar menyelam ke dalam kode sendiri
Meski begitu, untuk pekerjaan berulang yang sederhana seperti menulis tes atau menyelesaikan masalah konfigurasi, AI cukup berguna
Misalnya, saya menghidupkan lagi proyek yang saya tinggalkan 5 tahun lalu dengan Claude, dan dalam beberapa jam rasanya sudah maju setengah jalan
Hanya saja sekarang terasa seperti kembali ke pendekatan yang berpusat pada spesifikasi
Berkat agent, siklus mencoba dan membuang bisa berulang dengan cepat sehingga alur pengembangan iteratif tetap terjaga
Saya menganggap spesifikasi dan tes sebagai hasil kerja yang sesungguhnya, lalu terus merevisinya sambil merapikan pemikiran
Spesifikasi saja tidak bisa memuat seluruh kompleksitas dunia nyata
Kode yang ditulis LLM sering kali bertele-tele dan bergerak ke arah yang aneh, jadi tetap perlu dikelola langsung
Sebaliknya, LLM cukup bagus sebagai mitra untuk mendiskusikan dan mematangkan ide
Sekarang karena menulis kode jadi lebih murah dan cepat, mungkin justru kita perlu memperkuat tahap desain formal
Saya merasa hal yang paling besar pengaruhnya terhadap kualitas kode adalah menyiapkan alat analisis statis secara sistematis
Untuk TypeScript, saya menggabungkan
tsc,eslint,sonarjs,knip,jscpd,dependency-cruiser,semgrep, lalu menyatukannya lewat perintahpnpm checkSaya juga membuatnya berjalan otomatis lewat pre-commit hook agar masalah yang luput dari LLM bisa dicegah
Berkat ini, saat LLM mentok pun saya masih bisa memperbaiki secara manual dengan mudah
Kalau gaya kode konsisten, proses review jadi jauh lebih mudah, dan kebingungan berkurang meski kode AI dan kode manusia bercampur
Hanya saja, meski lint dan tes semuanya lolos, tetap bisa muncul kode yang berjalan tidak sesuai niat
Misalnya API yang mengembalikan array kosong alih-alih 404; secara sintaks benar, tetapi secara makna salah
Penilaian akurasi perilaku seperti ini masih jadi bagian yang paling sulit
Kadang saya merasa maintainability perlu diprioritaskan di atas aturan lint
Saya melakukan refactor secara rutin setiap kali menambahkan fitur
Setiap beberapa fitur, saya meninjau seluruh codebase dan merapikannya
Saya sudah menulis kode selama 40 tahun, dan justru sekarang saya paling puas dengan kode saya
Tapi berkat LLM, biaya refactor sekarang nyaris mendekati nol
Tidak ada alasan lagi membiarkan kode buruk tetap seperti itu
Menurut saya, nilai sebenarnya adalah memakai alat yang meningkatkan efisiensi untuk benar-benar meningkatkan kualitas
Saya membuat alat internal yang menandai baris kode di setiap commit dengan baik (hijau)/perlu refactor (kuning)/perlu ditulis ulang (merah)
Ini lebih rapi dan sistematis daripada komentar “TODO refactor”, dan saya berencana segera merilisnya sebagai open source
Saat ini saya merasa pengembangan berbasis spesifikasi adalah cara paling stabil untuk bekerja bersama AI
Saya menghabiskan lebih banyak waktu untuk mematangkan spesifikasi secara rinci dan saling bertukar ide dengan tim maupun AI
Kalau spesifikasinya tidak lengkap, AI akan membuat kode yang melenceng
Ketika pemahaman domain makin dalam, rasanya lebih baik menyuruhnya mengimplementasikan ulang dari awal
Waktu itu ada visi bahwa “cukup definisikan requirement, lalu sistem akan membangun semuanya sendiri”
Pada akhirnya gagal dan agile menjadi arus utama, tetapi sekarang rasanya teknologi membuat mimpi itu mungkin lagi
Nilai sejati AI ada pada kecepatan dan kemampuannya menangani ambiguitas
Tetapi kalau semua prosedur harus tetap dilalui, akhirnya terasa lambat seperti waterfall
Saya malah merasa lebih baik menulis kode sendiri lalu memakai AI sebagai reviewer putaran pertama
Tetap memvalidasi cepat dalam unit kecil adalah pendekatan agile yang benar
Terutama saran untuk menandai fungsi yang terkait keamanan; itu membantu menjaga konteks saat kode berubah kemudian
“Pecah jadi bagian kecil” memang dasar, tetapi sering terlewat oleh pemula
Lucu melihat orang sekarang berkat AI seperti baru menemukan lagi best practice dasar
Padahal hal seperti ini memang dari dulu seharusnya dilakukan
Sekarang ketika waktu coding berkurang, ada ruang lebih untuk mengerjakan hal-hal ini
Selain itu, AI benar-benar memanfaatkan dokumentasi, jadi menulis dokumentasi yang baik sekarang punya nilai langsung
Dulu dokumentasi sering diabaikan, tetapi LLM membacanya semua
Dulu saya menulis spesifikasi terperinci sebelum coding, tetapi kemudian sadar bahwa langsung masuk ke kode sering lebih cepat
Tapi sekarang apakah kita kembali lagi ke pendekatan berbasis spesifikasi?
Kalau kita menulis spesifikasi saat masalahnya belum sepenuhnya dipahami, akhirnya tetap belajar sambil coding
Sepertinya sekarang kita ada di tengah-tengah dua pendekatan itu
Hanya saja sekarang, berkat AI, biaya dari kode yang salah nyaris nol, jadi nilai spesifikasi terasa menurun
Ini mirip dengan cara pemrograman yang pernah dibicarakan Joe Armstrong
Sekarang akhirnya itu jadi realistis
Saat memegang posisi lead, saya menulis ticket dengan sangat detail
Itu untuk junior, tetapi juga agar saya sendiri tidak melupakan detail-detailnya
Namun pihak manajemen menentangnya sebagai “buang-buang waktu”, dan akhirnya saya kehilangan kebiasaan itu
Sekarang justru saya diminta menulis spesifikasi yang bahkan lebih rinci dengan lebih cepat
Saat memakai agent AI, saya penasaran soal rasio Markdown dan kode, serta keterbacaan hasil akhirnya
Saya juga bertanya-tanya apakah waktu review-nya benar-benar tidak lebih lama daripada menulis kode sendiri
Ironis melihat developer sekarang dengan antusias membela AI yang justru bisa menggantikan mereka sendiri
Tautan tweet terkait menyindir fenomena ini
Mungkin itu sebabnya muncul pesan “kalau tidak pakai Claude, kamu akan tertinggal”
tetapi pada akhirnya kemungkinan besar ini akan berarti penurunan permintaan dan kompensasi untuk developer
Terutama developer yang pekerjaannya hanya sebatas merangkai package NPM akan lebih berisiko