Prompting Efektif untuk Menghasilkan Kode

Sejak asisten AI seperti Claude atau Copilot jadi bagian dari alur kerja sehari-hari, saya perhatikan ada pola yang membedakan developer yang produktivitasnya benar-benar naik dengan yang justru menghabiskan waktu lebih banyak untuk memperbaiki hasil AI. Bedanya bukan di model yang dipakai, tapi di cara meminta. Prompt yang asal-asalan menghasilkan kode yang asal-asalan juga — AI akan mengisi kekosongan konteks dengan asumsinya sendiri, dan asumsi itu jarang cocok dengan yang ada di kepala kita.

Dalam pekerjaan saya sehari-hari yang banyak berurusan dengan sistem klinik dan aplikasi Laravel/Vue, saya menyusun beberapa prinsip prompting yang konsisten memperbaiki hasil. Tiga hal utamanya: konteks, batasan, dan definisi selesai.

Beri Konteks Secukupnya, Bukan Sebanyak-banyaknya

Konteks yang baik bukan berarti menempelkan seluruh isi repository ke dalam prompt. Yang penting adalah konteks yang relevan dengan keputusan yang harus diambil AI. Misalnya, kalau saya minta dibuatkan endpoint API baru di Laravel, saya akan sertakan potongan model, relasi yang relevan, dan konvensi penamaan yang dipakai di project — bukan seluruh skema database.

Sebagai ilustrasi, prompt seperti ini biasanya lebih efektif daripada sekadar "buatkan endpoint untuk data pasien":

Buat endpoint GET /api/patients/{id}/visits
- Gunakan model Visit yang sudah ada (relasi belongsTo Patient)
- Ikuti pola response JSON seperti di PatientController::show()
- Pakai form request untuk validasi, bukan validasi inline
- Sertakan pagination default 20 per halaman

Konteks seperti ini memberi AI "rel" untuk berjalan, sehingga hasilnya konsisten dengan gaya kode yang sudah ada, bukan kode generik dari tutorial internet.

Tentukan Batasan Secara Eksplisit

Batasan adalah hal yang paling sering dilewatkan dalam prompting, padahal ini yang paling menentukan apakah kode hasil AI bisa langsung dipakai atau harus dirombak ulang. Batasan bisa berupa teknologi yang boleh dipakai, batasan performa, atau constraint bisnis.

Beberapa batasan yang biasa saya sertakan:

  • Versi framework/library yang dipakai (karena API bisa berbeda jauh antar versi)
  • Tidak boleh menambah dependency baru tanpa disebut eksplisit
  • Harus kompatibel dengan struktur multi-tenant atau multi-database yang sudah ada
  • Batasan keamanan, misalnya data sensitif tidak boleh masuk log

Tanpa batasan ini, AI cenderung memilih solusi "paling umum" di internet, yang belum tentu cocok dengan arsitektur project. Saya sering menganalogikan ini seperti brief ke junior developer: instruksi yang jelas soal apa yang tidak boleh dilakukan sama pentingnya dengan apa yang boleh.

Definisikan 'Selesai' dengan Jelas

Ini bagian yang paling sering saya lihat terlewat. Banyak prompt berhenti di "buatkan fitur X" tanpa menjelaskan kriteria kapan hasil itu dianggap benar. Padahal AI, sama seperti developer manusia, butuh target yang bisa diverifikasi.

Definisi selesai yang baik biasanya mencakup: contoh input dan output yang diharapkan, kondisi error yang harus ditangani, dan — kalau relevan — perintah untuk menyertakan test. Misalnya menambahkan kalimat seperti "sertakan unit test untuk kasus data kosong dan format tanggal tidak valid" membuat AI berpikir tentang edge case, bukan hanya jalur bahagia (happy path).

Takeaway

Prompting efektif untuk kode pada dasarnya adalah komunikasi teknis yang baik: konteks yang relevan, batasan yang eksplisit, dan kriteria selesai yang terukur. Ketiganya mengubah AI dari sekadar generator kode generik menjadi kolaborator yang benar-benar memahami konvensi dan constraint project kita. Semakin spesifik dan terstruktur prompt yang kita tulis, semakin sedikit waktu yang terbuang untuk mengoreksi hasilnya.