Faisalaffan Blog
Faisalaffan Blog
Rekayasa Perangkat Lunak15 menit baca

OpenSpec: Berhenti 'Vibe Coding', Mulai Kasih AI Peta Jalan yang Jelas

Vibe Coding itu seperti menyuruh tukang bangun rumah tanpa denah โ€” hasilnya? Kacau di bulan ketiga. OpenSpec hadir sebagai 'denah arsitektur' untuk AI coding, menggeser paradigma dari ngobrol acak ke Spec-Driven Development yang terstruktur.

Faisal Affan
Faisal Affan
Diterbitkan
Galeri
1 / 3

OpenSpec: "Denah Arsitektur" untuk AI Coding

"Orang bijak membangun rumah di atas batu, bukan di atas pasir." โ€” Pepatah universal yang juga berlaku untuk software engineering

TL;DR

OpenSpec adalah framework open-source dari Fission AI yang memaksa AI untuk membaca denah dulu sebelum mulai bangun. Alih-alih ngobrol bolak-balik tanpa rencana (vibe coding), OpenSpec mengubah cara kerja AI jadi terstruktur, terprediksi, dan aman untuk proyek skala besar.


Masalah: Kenapa "Vibe Coding" Itu Seperti Bangun Rumah Tanpa Denah?

Bayangkan Anda menyewa kontraktor untuk membangun rumah. Tapi alih-alih memberinya denah arsitektur, Anda hanya bilang:

"Bikinin kamar di situ ya. Oh iya, tambahin dapur juga. Eh, pintunya geser aja deh."

Awalnya sih oke. Kamar jadi, dapur jadi. Tapi di bulan ketiga:

  • Ternyata pipa air dapur nabrak fondasi kamar ๐Ÿ’ฅ
  • Kontraktor lupa Anda pernah minta pintu geser, jadi dipasang pintu biasa
  • Mau renovasi? Kontraktor baru nggak tahu kenapa temboknya dibangun miring โ€” kontraktor lama sudah pergi

Ini persis yang terjadi dengan vibe coding. Anda ngobrol dengan AI, minta kode ini-itu, semuanya lancar... sampai proyeknya membesar. Lalu:

Tembok Kompleksitas

Banyak proyek yang dibangun murni dengan vibe coding dilaporkan menabrak "tembok kompleksitas" pada bulan ketiga. Tambah fitur baru malah hancurkan yang sudah jalan โ€” karena tidak ada yang merekam kenapa kode ditulis begitu.


Solusi: Spec-Driven Development โ€” Kasih AI Denah Dulu!

Spec-Driven Development (SDD) adalah kebalikan dari vibe coding. Filosofinya sederhana:

Jangan suruh AI nulis kode sebelum ada spesifikasi yang jelas.

Kalau vibe coding itu "ngobrol โ†’ kode โ†’ berharap bener", maka SDD itu "tulis niat โ†’ validasi โ†’ baru kode".

graph LR
    subgraph VC["โŒ Vibe Coding"]
      A["Ngobrol dgn AI"] --> B["AI nulis kode"]
      B --> C["Cek, salah"]
      C --> A
    end
    subgraph SDD["โœ… Spec-Driven Dev"]
      D["Tulis spesifikasi"] --> E["Review & validasi"]
      E --> F["AI nulis kode sesuai spec"]
      F --> G["Arsipkan & update spec"]
    end
    style VC fill:#450a0a,color:#fca5a5
    style SDD fill:#052e16,color:#86efac

Dan di garis depan gerakan SDD ini, berdiri platform bernama OpenSpec.


Apa itu OpenSpec?

OpenSpec adalah framework open-source buatan Fission AI yang berfungsi sebagai lapisan perencanaan universal antara niat manusia dan eksekusi AI.

Analoginya: kalau AI coding agent itu kontraktor, maka OpenSpec adalah meja arsitek di mana denah digambar, divalidasi, dan disimpan โ€” sebelum palu dan paku disentuh.

PropertyTypeDescription
Filosofi Inti Design Philosophy Brownfield-first โ€” dioptimalkan untuk proyek yang SUDAH berjalan, bukan proyek baru dari nol
Teknologi Tech Stack TypeScript (98.7% basis kode), didistribusikan via CLI (npm/pnpm/yarn/bun)
Kompatibilitas Integration Agnostik โ€” mendukung 20+ agen AI: Claude Code, Cursor, Codex, Windsurf, Gemini CLI, dll.
Prinsip Utama Core Principle Spesifikasi adalah sumber kebenaran, BUKAN kode. Kode bisa diganti, spec yang dijaga.
Tidak Ada Vendor Lock-in

OpenSpec tidak butuh API key khusus atau protokol tertutup. Seluruh spesifikasi hidup di dalam repositori Git Anda, berdampingan dengan kode. Pindah dari Claude ke Gemini? Specnya tetap sama.


Fondasi Pemikiran: Dari Mana Ide Ini?

๐Ÿ—๏ธ Intentional Programming โ€” Ide Lama yang Kini Relevan

Tahun 1990-an, Charles Simonyi dari Microsoft punya visi: niat pakar domain seharusnya jadi artifak utama, bukan kode. Kode cuma "efek samping" dari niat itu.

Masalahnya? Dulu tidak ada teknologi yang bisa menerjemahkan niat bahasa alami jadi kode. Sekarang ada โ€” namanya LLM.

OpenSpec menghidupkan kembali visi ini: spesifikasi Markdown bukan sekadar dokumentasi pasif, tapi representasi niat yang bisa dieksekusi oleh AI.

Ketika biaya membuat kode makin murah (karena AI), sumber kebenaran otomatis bergeser NAIK โ€” dari kode ke niat fungsional.

๐Ÿงฉ Dari Prompt Engineering ke Context Engineering

Prompt Engineering itu taktis โ€” fokus pada satu instruksi, satu iterasi. Seperti SMS ke kontraktor: "Bikin kamar ya."

Context Engineering itu strategis โ€” membangun lanskap penalaran jangka panjang. Seperti menyerahkan buku panduan lengkap: standar bangunan, denah, pagar pembatas, dan kriteria keberhasilan.

OpenSpec memaksa developer memecah pemikirannya jadi blok-blok terkelola:

  • Niat fitur โ€” apa yang mau dicapai
  • Keputusan arsitektur โ€” kenapa dirancang begitu
  • Standar pengujian โ€” bagaimana tahu ini berhasil
  • Guardrails โ€” apa yang TIDAK BOLEH dilakukan AI

Hasilnya? Prompt ke AI jadi sangat sederhana, dan output berubah dari "tebakan kreatif" menjadi "keluaran algoritmik yang terprediksi".

๐Ÿ“ Requirements Engineering Bangkit Kembali

Di era Agile, dokumentasi kebutuhan sering diminimalkan. "Working software over comprehensive documentation," kata manifesto Agile.

Tapi AI membalikkan ini! LLM butuh instruksi yang tidak ambigu dan batasan hierarkis yang ketat. Tanpa itu, AI akan mengisi celah dengan asumsi sendiri โ€” alias halusinasi.

OpenSpec mengembalikan disiplin Requirements Engineering: setiap niat diartikulasikan spesifik, ditinjau manusia, dan divalidasi mesin sebelum AI boleh nulis kode.


Arsitektur: Model Dua Folder

Inovasi terpenting OpenSpec adalah pemisahan fisik antara "kebenaran saat ini" dan "rencana perubahan". Bayangkan seperti ini:

  • ๐Ÿ“š specs/ = Buku catatan resmi sekolah โ€” berisi aturan yang sudah berlaku
  • ๐Ÿ“ changes/ = Kertas coret-coretan โ€” tempat ide baru diuji sebelum masuk buku resmi
  • openspec
    • specs
      • auth-login
        • spec.md
      • checkout-cart
        • spec.md
    • changes
      • add-dark-mode
        • proposal.md
        • design.md
        • tasks.md
        • specs
          • spec.md
    • project.md
    • AGENTS.md

Analogi: Seperti UUD 1945 โ€” dokumen resmi yang berlaku saat ini.

  • ๐Ÿ“– Mewakili realitas sistem saat ini yang sudah tervalidasi
  • ๐Ÿ—‚๏ธ Dikelompokkan berdasarkan domain (auth-login/, checkout-cart/)
  • ๐Ÿ”’ Bersifat read-only bagi AI โ€” tidak boleh diubah langsung
  • ๐Ÿ›๏ธ Stabil sampai ada proses pengarsipan resmi
Kenapa Pemisahan Ini Penting?

Bayangkan AI berhalusinasi dan menulis spec yang salah. Dengan pemisahan ini, kerusakan tertahan di folder changes/ โ€” tidak merembet ke sumber kebenaran utama. Seperti sistem airlock di kapal selam: bocor di satu kompartemen, kapal tetap mengambang.


Alur Kerja: Tiga Perintah Simpel

Seluruh siklus pengembangan OpenSpec berjalan dengan tiga perintah saja. Seperti siklus Rancang โ†’ Bangun โ†’ Arsipkan:

/opsx:propose โ€” Rancang Dulu

Anda mendeskripsikan apa yang diinginkan dalam bahasa sehari-hari. AI lalu:

  1. Menelusuri spesifikasi yang ada untuk mencari relevansi
  2. Menganalisis kode terkait
  3. Menghasilkan empat artefak di folder changes/:
PropertyTypeDescription
proposal.md Justification Mengapa perubahan ini perlu? Apa dampaknya ke modul lain?
specs/ Spec Delta Delta spesifikasi โ€” apa yang berubah secara fungsional
design.md Technical Design Keputusan teknis: teknologi apa, pola apa, jalur logika apa
tasks.md Task List Daftar tugas implementasi yang atomik dan deterministik

Analogi: Seperti arsitek yang menggambar denah, menghitung material, dan membuat jadwal kerja โ€” sebelum kontraktor mulai ngebor.

/opsx:apply โ€” Baru Bangun

Setelah manusia menyetujui proposal, AI mulai implementasi:

  • Mengambil tugas dari tasks.md
  • Mengerjakan satu per satu secara iteratif
  • Memperbarui checklist secara real-time
  • Tidak boleh membuat keputusan yang bertentangan dengan design.md

Analogi: Kontraktor mulai ngebor โ€” tapi harus ikut denah. Mau pindahin pipa? Harus balik ke arsitek dulu.

/opsx:archive โ€” Arsipkan & Bersihkan

Setelah implementasi dan testing selesai:

  • Semua artefak dipindahkan ke archive/ dengan timestamp
  • Delta spec yang sudah terealisasi masuk ke specs/ (sumber kebenaran)
  • Folder kerja dibersihkan, siap untuk siklus berikutnya

Analogi: Setelah rumah jadi, denah arsitektur diupdate dan disimpan di brankas. Kertas coret-coretan dibuang. Bersih.

graph LR
    A["๐ŸŽจ Propose"] -->|"Review & Approve"| B["๐Ÿ”จ Apply"]
    B -->|"Test & Verify"| C["๐Ÿ“ฆ Archive"]
    C -->|"Siklus berikutnya"| A
    style A fill:#7c3aed,color:#fff
    style B fill:#059669,color:#fff
    style C fill:#d97706,color:#000

"Konstitusi Proyek" โ€” Buku Aturan yang AI Tidak Boleh Langgar

Saat pertama kali menjalankan openspec init, platform memindai seluruh proyek Anda dan menghasilkan file project.md โ€” semacam "UUD" untuk proyek Anda:

20+ Agen AI Didukung

OpenSpec menolak vendor lock-in. Saat inisialisasi, platform otomatis mendeteksi folder agen (.claude/, .cursor/, dll.) dan menyuntikkan rules yang relevan. Anda bebas pakai Claude, Gemini, Codex, atau apa pun.


Efisiensi: Kenapa OpenSpec Hemat Token?

Ini bagian teknisnya โ€” tapi analoginya simpel.

Vibe Coding itu seperti menyuruh kontraktor membaca ulang seluruh buku manual bangunan setiap kali Anda minta pasang satu lampu. Mahal, lambat, dan kontraktor sering lupa detail di halaman 847.

OpenSpec memberikan kontraktor cuma halaman yang relevan โ€” denah listrik di lantai 2, standar watt yang dipakai, dan checklist keamanan. Itu saja.

Plaintext
AI menerima: SELURUH repositori (jutaan karakter)

Akibatnya:
โŒ Biaya API membengkak
โŒ Latensi tinggi
โŒ AI "lupa" detail di tengah-tengah
โŒ Halusinasi meningkat drastis

Secara teknis, ini karena arsitektur transformer punya kompleksitas kuadratik โ€” makin panjang input, makin mahal dan makin "pelupa" AI-nya. OpenSpec memotong input ke minimum yang diperlukan.


Aturan Menulis Spec: Tegas dan Tidak Ambigu

OpenSpec punya aturan ketat soal bagaimana spec ditulis. Tujuannya: supaya AI (dan manusia) tidak salah tafsir.

Bahasa Wajib dan Haram

OpenSpec mengadopsi standar IETF RFC 2119 โ€” standar yang biasa dipakai untuk menulis spesifikasi internet global:

PropertyTypeDescription
MUST / SHALL Mandatory Wajib mutlak. Tidak boleh dikompromikan. Contoh: 'Sistem MUST memvalidasi token JWT'
SHOULD Recommended Sangat direkomendasikan, tapi ada pengecualian valid. Contoh: 'Respons SHOULD di-cache selama 5 menit'
MAY Optional Benar-benar opsional. Contoh: 'Pengguna MAY mengaktifkan notifikasi email'
Kenapa Ini Penting?

Kata "harus" dalam bahasa sehari-hari itu ambigu โ€” bisa berarti wajib atau cuma saran. Dengan MUST vs SHOULD, AI langsung tahu: yang MUST itu hukum gravitasi (tidak bisa dilanggar), yang SHOULD itu pedoman (bisa dilenturkan dengan alasan bagus).

Format Skenario: GIVEN / WHEN / THEN

Setiap spesifikasi WAJIB punya minimal satu skenario pengujian. Formatnya dipinjam dari Behavior-Driven Development (BDD):

Markdown
#### Scenario: Pengguna login dengan kredensial valid

- GIVEN pengguna terdaftar dengan email "[email protected]"
- WHEN pengguna memasukkan email dan password yang benar
- THEN sistem mengembalikan token akses valid
- AND pengguna diarahkan ke halaman dashboard

Analogi: Ini seperti soal ujian untuk kode Anda. Kalau tidak bisa jawab soal ini, berarti kodenya belum benar. OpenSpec bisa menjalankan openspec validate --strict untuk memastikan semua soal ada dan formatnya benar.

Empat Tipe Perubahan (Delta Operations)

Ketika mengusulkan perubahan, OpenSpec memaksa Anda untuk mengkategorikannya:

Fungsionalitas baru yang berdiri sendiri.

Seperti menambah ruangan baru di rumah โ€” tidak mengganggu ruangan lain.

Markdown
## ADDED Requirements

### Dark Mode Support
Sistem MUST menyediakan opsi dark mode...

Perbandingan: OpenSpec vs Kompetitor

Bagaimana posisi OpenSpec di antara platform SDD lainnya?

Peta Perbandingan

Parameter OpenSpec GitHub Spec Kit Amazon Kiro BMAD
Fokus ๐Ÿš๏ธ Brownfield (kode lama) ๐Ÿ—๏ธ Greenfield (proyek baru) ๐Ÿข Korporat (AWS) ๐Ÿค– Multi-agen
Alur Kerja 3 perintah simpel 4 fase kaku IDE terintegrasi Delegasi otonom
Konteks Delta (hemat) Dokumen penuh (berat) Steering files Sharding
Tech Stack TypeScript/npm Python/UV Terminal/VS Code Framework-agnostik
Vendor Lock-in โŒ Tidak ada โš ๏ธ Bias GitHub ๐Ÿ”’ AWS only โŒ Tidak ada
OpenSpec vs GitHub Spec Kit โ€” Simpel vs Birokrasi

GitHub Spec Kit memaksa 4 fase hierarki super-kaku: specify โ†’ plan โ†’ tasks โ†’ implement. Semua harus selesai sebelum satu baris kode ditulis.

Masalahnya? Dokumen Markdown membengkak, review bisa berjam-jam. Untuk proyek legacy yang kompleks, ini overkill.

OpenSpec memilih pendekatan inkremental โ€” hanya lacak yang berubah (delta), dengan 3 perintah sederhana. Lebih ringan, lebih adaptabel.

Analogi: Spec Kit itu seperti bikin skripsi lengkap sebelum mulai riset. OpenSpec lebih seperti jurnal harian โ€” tulis apa yang berubah, langsung validasi.

OpenSpec vs Amazon Kiro โ€” Bebas vs Terkunci

Amazon Kiro punya kekuatan luar biasa: akses mendalam ke file system, koneksi SSH, integrasi MCP โ€” semua dibalut dalam IDE yang powerful.

Tapi? Anda terkunci di ekosistem AWS dan model Claude secara eksklusif. Pindah ke Gemini? Tidak bisa. Pakai di luar VS Code? Tidak bisa.

OpenSpec bekerja di samping IDE pilihan Anda, mendukung 20+ agen AI, dan tidak menuntut infrastruktur khusus.

Analogi: Kiro itu mobil keluaran showroom โ€” cepat dan mewah, tapi servis harus di dealer resmi. OpenSpec itu mobil standar terbuka โ€” bengkel mana saja bisa handle.

OpenSpec vs OpenAPI (Swagger) โ€” Jangan Tertukar!

Nama mirip, tapi fungsi sangat berbeda:

  • OpenAPI/Swagger = spesifikasi teknis untuk kontrak API (endpoint, parameter, respons). Cakupannya hanya API.
  • OpenSpec = framework manajemen spesifikasi holistik untuk mengarahkan AI menulis kode (frontend, backend, DevOps, database).

Analogi: OpenAPI itu spesifikasi ukuran konektor USB-C โ€” bentuk port, voltase, pin assignment. OpenSpec itu manual instruksi untuk robot yang merakit USB-C di pabrik โ€” bagaimana robot harus kerja, langkah per langkah.

Keduanya bisa bersinergi: OpenSpec bisa memandu AI untuk menghasilkan file OpenAPI yang tervalidasi sempurna.


Kritik dan Risiko: Apakah Ini Waterfall 2.0?

Tidak ada pendekatan yang sempurna. Berikut kritik paling tajam terhadap SDD dan OpenSpec:

Pelajaran dari Sejarah

Model-Driven Development (MDD) di tahun 2000-an punya visi mirip: "model dulu, kode otomatis." Hasilnya? Gagal karena terlalu berat, tidak fleksibel, dan tidak bisa beradaptasi dengan perubahan. OpenSpec sadar akan risiko ini โ€” makanya mereka memilih pendekatan delta (ringan) bukan pendekatan full-spec (berat).


Kesimpulan: Kapan Harus Pakai OpenSpec?

  • Proyek berskala besar dengan banyak developer dan AI agent
  • Basis kode legacy (brownfield) yang kompleks dan rawan regresi
  • Tim yang butuh audit trail dan accountability atas keputusan AI
  • Proyek di mana konsistensi arsitektural lebih penting dari kecepatan
  • Lingkungan korporat yang butuh review gate sebelum AI boleh commit

Intinya

OpenSpec bukan pengganti kreativitas atau kelincahan. Ia adalah jaring pengaman โ€” memastikan bahwa semakin AI menjadi "kontraktor" yang lebih canggih, kita sebagai "arsitek" tidak kehilangan kendali atas desain bangunannya.

Vibe coding itu seperti improvisasi jazz โ€” indah untuk solo pendek. Spec-Driven Development itu seperti orkestra โ€” butuh partitur agar 50 musisi bermain harmonis.

OpenSpec adalah partiturnya.


Referensi

Topik:#AI

Artikel terkait

Rekayasa Perangkat Lunak

Search & Catalog 15k SKU Q-Commerce: Relevan + In-Stock Real-time

System design search dan catalog untuk quick commerce dengan 15.000+ SKU. Elasticsearch full-text search dengan multi-match query dan typo tolerance (fuzziness), filter ketersediaan per-hub via Redis pipeline query-time filtering, ranking berbasis relevansi, ketersediaan, margin, dan popularitas, index update via Kafka streaming, dan autocomplete handler. Implementasi Golang lengkap dengan worker concurrency pattern untuk index sync.
Faisal Affan
Faisal Affan
Diterbitkan

Real-time Order Tracking Q-Commerce: Driver Bergerak di Peta Live

System design real-time order tracking untuk quick commerce. Driver GPS ingestion via WebSocket dengan throttling dan validasi, Kalman filter untuk position smoothing, Redis pub/sub fan-out by order ID untuk scale ribuan driver concurrent, dan Server-Sent Events (SSE) push ke user client. Implementasi Golang dengan pattern WebSocket goroutine pool, pub/sub broker, dan concurrent connection management.
Faisal Affan
Faisal Affan
Diterbitkan
Rekayasa Perangkat Lunak
Real-time Inventory Dark Store: Cegah Oversell di Q-Commerce

Real-time Inventory Dark Store: Cegah Oversell di Q-Commerce

Desain inventory per-hub untuk Astro (instant grocery). Reservation pattern dengan Redis DECRBY atomic + TTL, async sync ke Postgres, stock partitioning untuk hot SKU, reaper job untuk reservation leak, dan cycle counting untuk stok fisik vs sistem. Implementasi Golang lengkap.
Faisal Affan
Faisal Affan
Diterbitkan

Promo & Voucher Engine Q-Commerce: Rule Engine Anti-Abuse

System design promo engine untuk quick commerce. Rule engine dengan kondisi komposable (min transaksi, first-N-order, area, kategori) ke efek (discount, free ongkir), atomic counter untuk limit penggunaan Redis Lua, anti-fraud device fingerprinting, stackable vs eksklusif promo resolution, dan budget cap. Implementasi Golang lengkap dengan composable condition interface, AND/OR composite tree, concurrent-safe redeem, serta Kafka event streaming untuk audit trail.
Faisal Affan
Faisal Affan
Diterbitkan