- Tool pengembangan berkualitas tinggi untuk SQLite yang sudah lama dirindukan akhirnya bisa diselesaikan dalam waktu singkat dengan bantuan AI
- Tantangan terbesar adalah membangun parser karena tidak adanya spesifikasi tata bahasa resmi dan codebase C yang kompleks
- Dengan memanfaatkan agen coding AI seperti Claude Code, implementasi awal bisa dipercepat, tetapi masalah kode spageti membuat proyek ini ditulis ulang berbasis Rust
- AI menunjukkan efisiensi besar dalam generasi kode, refactoring, bantuan belajar, dan peningkatan UX, tetapi juga menimbulkan efek samping seperti penundaan desain, keterputusan dari codebase, dan kecanduan pada dependensi
- Pada akhirnya, AI hanyalah alat untuk mempercepat implementasi; desain dan arah perangkat lunak tetap harus menjadi tanggung jawab manusia
Catatan 3 Bulan Membangun Tool Pengembangan SQLite dengan AI
- Sudah lama menginginkan tool pengembangan berkualitas tinggi untuk SQLite, tetapi tool open source yang ada kurang memadai dari sisi keandalan, kecepatan, dan fleksibilitas
- Saat memelihara PerfettoSQL, ada kebutuhan untuk fitur seperti formatter, linter, dan ekstensi editor, tetapi tidak ada tool yang benar-benar cocok
- Pernah ingin membuat tool baru sebagai proyek pribadi, tetapi tingkat kesulitan dan beban kerja berulang membuatnya tertunda selama bertahun-tahun
Tantangan proyek
- SQLite tidak memiliki spesifikasi tata bahasa resmi maupun API parser yang stabil
- Secara internal SQLite tidak membangun parse tree, sehingga logika parser harus diekstrak langsung dari source code
- Ada lebih dari 400 aturan tata bahasa yang harus dipetakan satu per satu, dan penulisan tes serta debugging menjadi pekerjaan yang sangat repetitif dan melelahkan
- Codebase C milik SQLite rumit dan sangat padat, sehingga sulit dipahami
- Struktur internalnya begitu pelik sampai butuh beberapa hari hanya untuk memahami API virtual table dan implementasinya
Proses pengembangan bersama AI
- Sejak akhir 2025, mulai memanfaatkan agen coding AI seperti Claude Code secara serius
- Pada awalnya, sebagian besar desain dan implementasi diserahkan ke AI dengan pendekatan “vibe-coding”
- Hasilnya memang berjalan, tetapi codebase berubah menjadi kode spageti yang terlalu kompleks untuk dipelihara
- Setelah itu, seluruh proyek ditulis ulang dengan Rust sambil menata ulang strukturnya
- Rust dipilih menggantikan C agar komponen tingkat atas seperti validator dan language server lebih mudah dikembangkan
- AI kemudian dibatasi sebagai “alat autocomplete yang diperkuat”, sementara desain, review, dan pengujian dipimpin langsung
- Juga dibangun scaffolding untuk memverifikasi hasil keluaran AI, seperti otomatisasi linting, validasi, dan pengujian
Hal-hal yang dimungkinkan oleh AI
-
Mengatasi inersia
- AI membantu memecah pekerjaan menjadi unit masalah yang konkret, sehingga lebih mudah untuk mulai
- Pola pikir bergeser dari “harus memahami parsing SQLite” menjadi “meninjau pendekatan yang diusulkan AI”, sehingga eksekusi menjadi lebih cepat
-
Kecepatan generasi kode dan refactoring
- Saat kebutuhannya jelas, AI dapat menulis kode yang standar dan konsisten dengan cepat
- Tetapi pada desain yang tidak standar, seperti struktur parser, AI justru mengganggu sehingga perlu ditulis langsung
- Setelah generasi kode skala besar, refactoring berkelanjutan menjadi keharusan untuk menjaga kualitas
-
Peran sebagai asisten belajar
- AI bisa menjelaskan konsep baru seperti algoritme formatting Wadler-Lindig secara real-time
- Ini memungkinkan masuk lebih cepat ke area yang belum akrab seperti Rust dan ekstensi VS Code
- Saat konteks proyek mulai hilang, pertanyaan seperti “jelaskan komponen ini” membantu memulihkan konteks secara instan
-
Meningkatkan tingkat kematangan hasil
- AI menurunkan biaya pengembangan fitur tambahan seperti ekstensi editor, binding Python, playground WASM, dan situs dokumentasi
- Karena beban implementasi berkurang, fokus bisa dialihkan ke peningkatan UX, seperti pesan error dan desain CLI
Efek samping penggunaan AI
-
Sifat adiktif
- Ada struktur hadiah ala mesin slot dalam kebiasaan mengulang “satu prompt lagi”
- Semakin lelah, kualitas prompt menurun, hasil ikut memburuk, dan lahirlah lingkaran setan
-
Keterputusan dari codebase
- Semakin banyak kode yang dihasilkan AI, semakin hilang pula rasa terhadap struktur detailnya
- Saat konteks hilang, percakapan dengan AI menjadi lebih panjang dan tidak efisien
- Sebagai solusi, dibentuk kebiasaan membaca langsung kode yang baru dihasilkan dan memeriksa “bagian mana yang akan saya tulis secara berbeda”
-
Penundaan dan pengikisan desain
- Karena refactoring terasa mudah, muncul kecenderungan untuk menunda keputusan desain yang inti
- Sekalipun tes banyak, kesalahan desain yang mendasar sulit tertutupi, dan pada akhirnya perlu penulisan ulang total
-
Tidak punya rasa waktu
- AI tidak mampu memahami konteks temporal maupun proses evolusi sebuah kode
- Akibatnya, kesalahan lama bisa terulang atau masalah yang sebenarnya sudah selesai malah dieksplorasi lagi
- Dokumentasi bisa membantu, tetapi niat desain tidak mudah direkam secara sepenuhnya
Relativitas dalam memanfaatkan AI
- Di domain yang sudah dipahami mendalam, AI sangat unggul karena review dan iterasi bisa dilakukan cepat
- Contoh: pembuatan aturan parser efisien karena punya jawaban yang jelas
- Di domain yang hanya sebagian dipahami, AI berguna sebagai alat belajar, tetapi tetap perlu kewaspadaan terus-menerus
- Contoh: mempelajari algoritme formatter
- Pada tahap belum tahu apa yang ingin dibuat, AI justru cenderung merugikan
- Contoh: pada tahap desain arsitektur, AI dapat memicu loop yang tidak produktif
- Untuk masalah yang bisa diverifikasi seperti lolos kompilasi dan tes, AI kuat, tetapi
pada masalah tanpa jawaban tunggal seperti desain dan kualitas API, AI lemah
Kesimpulan
- Tool SQLite yang telah dirancang selama 8 tahun akhirnya bisa diwujudkan hanya dalam 3 bulan berkat AI
- Namun prosesnya bukan sekadar kisah sukses, melainkan juga disertai batasan dan biaya dari ketergantungan pada AI
- AI adalah alat percepatan implementasi, tetapi bukan pengganti desain
- AI bisa menjawab pertanyaan teknis dengan akurat, tetapi tidak memiliki sejarah, selera, maupun kepekaan terhadap pengguna
- Pelajaran yang sebenarnya adalah, meskipun AI membuat kita lebih cepat menabrak tembok,
manusialah yang harus bertanggung jawab atas arah desain dan ‘jiwa perangkat lunak’ - Yang dibutuhkan ke depan adalah lebih banyak berbagi contoh proyek yang benar-benar tahan terhadap pengguna nyata dan beban pemeliharaan
- Bukan sekadar eksperimen, melainkan akumulasi pengalaman pengembangan kolaboratif AI yang realistis dan berkelanjutan
1 komentar
Pendapat Hacker News
Menyegarkan melihat sudut pandang yang seimbang soal AI coding
Ini pengalaman yang kemungkinan besar akan dirasakan sebagian besar developer serius — awalnya terkesan karena AI bisa menulis kode dengan baik, tetapi belakangan codebase-nya ternyata berantakan jadi spaghetti code
Sebagian orang bahkan tidak melakukan code review dan ribut mengatakan “coding manual sudah berakhir”, sementara yang lain langsung menyimpulkan “AI coding tidak berguna”
Namun kenyataannya ada di tengah-tengah. AI bisa menjadi akselerator produktivitas yang besar, tetapi harus diintegrasikan dengan benar ke dalam workflow dan manusia tetap harus terus terlibat
Awalnya hanya prototipe, tetapi cepat berkembang menjadi layanan nyata. Setelah itu saya kesulitan saat harus refactor dan membersihkan kode-kode tidak berguna
Meski begitu, tanpa prototipe yang cepat itu, produk saat ini tidak akan ada. Claude juga berguna seperti gergaji mesin untuk merapikan kode
Belakangan saya menambahkan type checker lewat hook pre-commit dan memperbaiki 90 error hanya dalam 2 jam.
AI coding memang luar biasa, tetapi untuk kode production, review dan penilaian manusia tetap wajib
Hanya saja, karena kasus ini adalah proyek greenfield milik individu, sulit untuk langsung menerapkannya ke pengembangan tim pada umumnya
Meski begitu, kalau prototipe dibuat dengan asumsi akan “dibuang”, menurut saya spaghetti code pun tidak masalah.
Masalahnya adalah penulis sempat salah mengira bahwa itu bisa berkembang menjadi produk sungguhan.
Namun saya rasa justru dari kegagalan itu dia belajar desain yang lebih baik
Awalnya kagum, lalu kecewa, dan akhirnya menemukan keseimbangan.
Rasanya seperti versi AI dari model Kübler-Ross
Tentu kualitas itu penting, tetapi sekarang kualitas kode itu sendiri mulai menjadi kurang penting
Kode yang tidak perlu dipelihara seperti aplikasi pribadi makin banyak, dan kemampuan desain AI juga meningkat cepat
Pada akhirnya, “kebenaran tentang AI coding” akan terus berubah, dan arus ini tidak akan berhenti
Pertama, kebanyakan developer diam-diam menikmati peningkatan produktivitas 2~50% tanpa merasa perlu banyak bicara
Kedua, AI coding yang sesungguhnya itu membosankan dan tidak visual.
Pada akhirnya LLM hanyalah ‘alat agar kita tidak perlu menghafal boilerplate’, sedangkan esensi coding tetap sama
Saya juga mengalami masalah yang sama pada pembuatan test dengan AI
Saat test bertambah banyak memang terasa menenangkan, tetapi kenyataannya edge case tetap tidak tertangani
Terutama ketika refactor kode legacy yang tidak punya test, test buatan AI hanya memeriksa apakah sesuatu berjalan, tetapi tidak menjamin konsistensi perilaku
Di aplikasi React masalah ini terasa sangat parah. Karena itu saya sedang memikirkan cara menggabungkan BDD + pengembangan berbasis spesifikasi dengan AI
Untuk unit test, yang penting adalah desain mock yang kreatif; untuk integration test, manipulasi data; dan untuk test e2e, stabilitas selector
Penilaian kreatif seperti ini masih sulit diikuti AI
Walaupun coverage 97%, tetap ada banyak lubang dalam ruang input logis.
Belakangan saya mengotomatisasi teknik klasik seperti equivalence partitioning dengan agen AI dan menerapkannya ke 60 model
Kuncinya adalah memisahkan pure function semaksimal mungkin agar pemetaan input-output bisa diuji sepenuhnya
Dalam jangka panjang, saya rasa nilai sejati AI ada pada perannya sebagai alat penguat pemahaman
Misalnya menganalisis aturan dalam kode C yang kompleks lalu mendokumentasikan strukturnya
Jika ekstraksi pengetahuan seperti ini menjadi mungkin, otomatisasi bisa diperluas ke dokumentasi API, pemetaan aturan, analisis bug, hingga optimasi arsitektur
Pada akhirnya, dibanding menghasilkan kode, kemampuan menstrukturkan konteks akan menjadi lebih penting
① tipe oracle mahatahu yang hanya melempar requirement lalu membiarkan seluruh aplikasi dibuat
② tipe alat bantu yang memakainya di dalam IDE sambil meninjau baris demi baris
Untuk membangun layanan yang berkelanjutan, pendekatan ② jauh lebih realistis
Kalimat “arsitektur muncul ketika potongan-potongan lokal saling berinteraksi” sangat berkesan
AI kuat dalam eksekusi lokal, tetapi lemah pada tahap desain yang ambigu
Sebenarnya developer manusia pun sama. Sebab desain adalah rangkaian trade-off tanpa jawaban tunggal
Khususnya dalam desain SQL ClickHouse, AI sangat membantu
Berkat metode penyertaan SQL berbasis template yang disarankan AI, saya bisa mengurangi duplikasi dan meningkatkan performa
Mungkin pendekatan seperti ini sudah pernah ada, tetapi tanpa AI mungkin akan sulit menemukannya
Tulisan ini terasa meyakinkan karena ada 250 jam upaya nyata di baliknya
Saya rasa proyek sebesar ini adalah model realistis untuk system programming berbantuan AI yang sesungguhnya
Ungkapan “AI coding itu seperti mesin slot” sangat saya rasakan
Saya juga diberi akses tanpa batas ke agen AI di kantor, dan begitu masuk ke pola “coba satu prompt lagi”
tahu-tahu 12 jam sudah berlalu. Sifat adiktif dari keadaan flow memang kuat
Mungkin sekarang adalah masa tersulit bagi AI coding
Hal-hal yang 6 bulan lalu bahkan tak terbayangkan sekarang sudah menjadi mungkin
Saya sedang mengerjakan proyek dalam beberapa bahasa, dan AI membuat kode terlalu cepat
sehingga sekarang kecepatan review justru menjadi bottleneck
Begitu sejumlah test lolos, muncul pertanyaan “apakah ini sudah cukup baik?”
Saya menuliskan atribut kualitas seperti prinsip SOLID, coupling, cohesion di dalam prompt
Saya meminta ide refactor kepada AI, dan kalau cocok tinggal bilang “oke, jalankan”
Pada akhirnya yang penting adalah seni merancang prompt
Namun saya rasa tak lama lagi AI akan menjalankan guardrail kualitas seperti ini secara default
Bahasa itu sendiri bukan bottleneck performa, tetapi bereksperimen dengan bahasa baru membantu proses belajar
Ini mengingatkan saya pada filosofi Fred Brooks, “buang satu versi”
AI sangat cocok untuk membuat versi pertama itu (throwaway) dengan cepat
Mengharapkan kualitas production sejak awal adalah pendekatan yang bodoh
Cara yang benar adalah membuatnya cepat, belajar darinya, lalu refactor sesudahnya
Saya juga setuju bahwa saat lelah, prompt jadi kabur dan hasilnya pun memburuk
Saya terkejut mengetahui parser SQL milik SQLite tidak dihasilkan oleh lemon
Saat mem-porting pikchr ke Go, saya lebih dulu memindahkan lemon, tetapi SQLite bahkan tidak membuat parser tree
Jika melihat dokumentasi lemon, ini tampak seperti kurangnya pendefinisian masalah pada tahap desain
Saya juga sepenuhnya setuju dengan kesimpulan tulisan ini
Ini contoh yang bagus karena menunjukkan realitas AI coding secara jujur tanpa berlebihan