Vibe coding mengubah cara perangkat lunak dibuat. Deskripsi dalam bahasa sehari-hari berubah menjadi kode dalam hitungan menit, dan layar yang kemarin masih kosong hari ini sudah bisa diklik. Kecepatan itu nyata, tetapi kecepatan saja bukan bukti kesiapan rilis. Artikel ini membahas checklist yang memisahkan prototipe akhir pekan dari perangkat lunak yang layak naik ke produksi.
Kode hasil AI boleh dipakai untuk produksi, asal setiap perubahan melewati empat gerbang yang sama seperti kode tulisan manusia: diff kecil yang dibaca sampai habis, tes yang ditulis dari spesifikasi, branch terpisah dengan jalan mundur, dan pemindaian keamanan sebelum rilis. Lewati satu gerbang saja, maka risiko yang ditanggung adalah data pengguna, reputasi produk, dan waktu perbaikan yang jauh lebih mahal daripada waktu yang dihemat saat generate. Saya menulis checklist ini dari praktik yang berulang kali terbukti di tim kecil maupun proyek solo: perlambat langkah generate, percepat langkah verifikasi.
Istilah vibe coding dipopulerkan Andrej Karpathy pada Februari 2025 untuk menggambarkan alur kerja yang menerima kode hasil model tanpa memeriksa implementasinya. Definisi itu cocok untuk proyek buang-pakai: demo satu malam, prototipe untuk presentasi, atau eksperimen yang tidak menyimpan data siapa pun. Begitu aplikasi menyentuh pengguna nyata, definisi itu tidak lagi cukup.
Perbedaan kuncinya terletak pada akuntabilitas. Pada engineering berbantuan AI, model tetap menulis draf pertama, tetapi manusia memegang arsitektur, batas perubahan, dan kebenaran hasil. Saya memegang prinsip ini di setiap proyek: kode adalah usulan sampai ada bukti bahwa kode tersebut berperilaku benar. Bukti itu berupa diff yang dibaca, tes yang lolos, dan perilaku aplikasi yang diuji langsung, bukan sekadar tampilan yang terlihat rapi.
Collins Dictionary bahkan memilih vibe coding sebagai Word of the Year 2025, tanda bahwa praktik ini sudah masuk arus utama. Arus utama berarti standar yang lebih tinggi, bukan lebih rendah. Pengguna tidak peduli apakah sebuah fitur ditulis manusia atau model; pengguna hanya merasakan apakah fitur itu bekerja, aman, dan bisa diperbaiki ketika rusak.
Kesalahan paling umum dalam vibe coding adalah meminta satu fitur utuh dalam satu prompt. Hasilnya tampak mengesankan, tetapi menyembunyikan logika berulang, spesifikasi yang terlewat, dan antarmuka modul yang tidak tersambung dengan benar. Membersihkan kerusakan semacam itu sering memakan waktu lebih lama daripada menulis potongan kecil sejak awal.
Aturan praktis yang saya pakai: kalau sebuah diff terasa terlalu besar untuk direview, diff itu memang terlalu besar untuk di-generate. Pecah fitur menjadi langkah kecil, satu perilaku per langkah, dan review setiap langkah sebelum lanjut. Satu sesi chat untuk satu fitur juga membantu, karena konteks yang menumpuk dari fitur lain sering membuat model mencampur keputusan lama dengan keputusan baru.
Review diff berarti membaca perubahan baris demi baris, bukan sekadar menjalankan aplikasi dan melihat hasilnya. Tampilan bisa benar sementara logika di baliknya salah: endpoint yang membuat data tetapi melewatkan langkah persetujuan, query yang mengambil data milik pengguna lain, atau penanganan error yang diam-diam menelan kegagalan. Panduan prompt yang jelas membantu di tahap ini, seperti yang dibahas dalam panduan prompt vibe coding yang jelas, karena prompt yang spesifik menghasilkan diff yang lebih mudah diperiksa.
Tes yang ditulis berdasarkan kode hasil generate hanya membuktikan bahwa kode tersebut berperilaku sesuai versinya sendiri. Sebuah tim pernah mengalami kasus ini secara menyakitkan: endpoint pembuatan data lolos semua tes, tetapi melewatkan langkah persetujuan wajib dan dokumen yang disyaratkan. Tes lolos karena tes itu mencerminkan apa yang dibangun model, bukan apa yang diminta spesifikasi.
Perbaikannya sederhana dan disiplin: tulis tes dari dokumen spesifikasi sebelum atau bersamaan dengan implementasi, lalu jadikan tes sebagai penegak spesifikasi. Setiap aturan bisnis menjadi satu kasus uji. Input kosong, data tidak valid, dan akses yang ditolak wajib masuk daftar kasus, karena di situlah bug produksi paling sering bersembunyi.
Verifikasi independen juga penting. Ketika agent yang sama menulis kode sekaligus tesnya, hasil hijau bersifat sugestif, bukan konklusif. Minta agent kedua, rekan tim, atau diri sendiri di sesi terpisah untuk memeriksa logika tes. Saya selalu menganggap tes yang belum dibaca manusia sebagai tes yang belum ada.
Untuk pemula, fondasi ini sebaiknya dibangun sejak proyek pertama, bukan ditambal belakangan. Artikel vibe coding buat pemula menunjukkan alur dari ide menjadi aplikasi jadi, dan checklist dalam artikel ini adalah lapisan berikutnya setelah aplikasi pertama itu berhasil jalan.
Agent tidak boleh commit langsung ke branch utama. Setiap perubahan berjalan di branch terpisah, melewati review, dan baru digabung setelah tes dan pemindaian lolos. Kebiasaan ini terdengar birokratis sampai suatu hari sebuah perubahan menghapus tes, mengganti nama fungsi secara diam-diam, atau merusak modul yang tidak disentuh.
Commit sering adalah penyelamat yang murah. Setiap langkah kecil yang terbukti benar langsung di-commit dengan pesan yang jelas, sehingga eksperimen yang gagal bisa dibatalkan tanpa mengorbankan pekerjaan yang sudah benar. Simpan juga satu versi yang diketahui bekerja sebelum memulai perubahan besar, dan uji bahwa versi itu masih bisa dipulihkan.
File konteks seperti CLAUDE.md atau aturan editor sebaiknya ringkas, di bawah lima puluh baris, dan hanya berisi perintah build, konvensi proyek, serta zona terlarang. Konteks yang terlalu panjang justru membuat model mengabaikan instruksi penting di tengah tumpukan instruksi lain.
Keamanan melengkapi disiplin branch tersebut. Laporan Veracode yang dikutip berbagai media menyebutkan bahwa 45 persen sampel kode hasil AI mengandung celah keamanan. Angka itu bukan alasan untuk menolak AI, tetapi alasan kuat untuk tidak melewatkan pemindaian. Jalankan analisis statis, pemindaian dependensi, dan pemindaian rahasia pada setiap commit, dan jadikan ketiganya sebagai gerbang yang memblokir rilis ketika gagal.
Tiga aturan keamanan yang tidak bisa ditawar:
Uji otorisasi secara eksplisit: coba akses data milik pengguna lain dengan akun yang tidak berhak. Pemindai otomatis sering melewatkan celah logika semacam ini, padahal celah inilah yang paling berdampak pada kepercayaan pengguna.
Tabel berikut merangkum perbedaan sikap yang menentukan apakah sebuah proyek hasil vibe coding layak naik kelas.
| Aspek | Prototipe Akhir Pekan | Rilis Produksi |
|---|---|---|
| Review diff | Opsional, cukup jalan | Wajib, dibaca sampai habis |
| Tes | Tes manual seadanya | Tes dari spesifikasi, termasuk kasus tepi |
| Branch dan rilis | Langsung ke utama | Branch terpisah, review, baru gabung |
| Keamanan | Tidak dipindai | Pemindaian statis, dependensi, dan rahasia memblokir rilis |
| Data | Data contoh bebas | Data nyata dilindungi, akses diuji |
| Jalan mundur | Buat ulang saja | Rollback teruji sebelum rilis |
| Pemilik perawatan | Tidak ada | Orang yang jelas bertanggung jawab atas perbaikan |
Proyek yang masih berada di kolom kiri bukan proyek yang buruk. Proyek itu hanya belum siap memikul tanggung jawab kolom kanan. Kejujuran tentang posisi proyek menghemat lebih banyak waktu daripada janji rilis yang dipaksakan. Pembahasan tentang tahap validasi ide sebelum membangun lebih jauh juga relevan di sini, seperti yang diuraikan dalam membangun MVP startup dengan vibe coding.
Sebelum sebuah pull request hasil AI digabung, jalankan checklist ini tanpa kecuali:
Checklist ini juga berlaku ketika memakai IDE AI seperti Windsurf atau Cursor. Perkakas boleh berganti, tetapi gerbangnya tetap sama, sebagaimana dijelaskan dalam panduan vibe coding Next.js 15 untuk solo developer yang menekankan alur kerja rapi untuk pengembang tunggal.
Ada momen ketika melanjutkan prompt justru memperlambat. Model mulai memperluas spesifikasi tanpa diminta, mengulang perbaikan yang sama tiga kali, atau menghasilkan kode yang semakin sulit dibaca. Pada titik itu, berhenti adalah keputusan teknik, bukan kekalahan.
Tulis sendiri bagian yang paling berisiko: logika otorisasi, perhitungan uang, migrasi data, dan integrasi dengan sistem luar yang sulit diuji ulang. Bagian-bagian ini menuntut pemahaman penuh, dan pemahaman penuh hanya datang dari menulis dan membaca kode tersebut secara langsung.
Prinsip yang sama berlaku untuk debugging. Kalau dua putaran perbaikan tidak menyelesaikan bug, kecilkan cakupan, buat reproduksi minimal, dan baca kode yang bermasalah baris demi baris. Model adalah mitra yang cepat, tetapi akuntabilitas akhir tetap berada di tangan manusia yang merilis.
Vibe coding bukan soal menerima semua yang dihasilkan model, dan bukan pula soal menolak model sepenuhnya. Vibe coding yang matang adalah pembagian kerja yang jujur: model mempercepat draf, manusia memegang bukti. Diff kecil, tes dari spesifikasi, branch yang disiplin, pemindaian keamanan, dan jalan mundur yang teruji adalah harga yang wajar untuk kecepatan tersebut.
Mulai dari proyek yang sedang berjalan: pilih satu pull request hasil AI terbaru, jalankan checklist 10 poin di atas, dan catat gerbang mana yang paling sering gagal. Gerbang itu adalah investasi berikutnya, entah berupa tes otorisasi, CI yang memblokir, atau kebiasaan review yang lebih ketat. Kecepatan tanpa gerbang hanya memindahkan pekerjaan dari hari ini ke insiden minggu depan, sementara kecepatan dengan gerbang adalah keunggulan yang bisa dipertahankan.
Bacaan lanjutan yang mendasari artikel ini: lima pelajaran vibe coding dari lapangan, penjelasan vibe coding dan pemeriksaan produksi, panduan pengembangan yang diarahkan AI, dan risiko serta praktik terbaik vibe coding.