48 poin oleh xguru 2025-05-26 | 8 komentar | Bagikan ke WhatsApp
  • Budaya pengembangan yang memperlakukan AI bukan sekadar alat, melainkan teknologi fondasi sedang terbentuk
  • Cara lama dalam version control, dashboard, template, dokumentasi, dan pengelolaan secret sedang berubah agar sesuai dengan era AI
    • Git tidak lagi dipahami terutama sebagai pelacak perubahan per baris kode, melainkan semakin ditafsirkan ulang sebagai cara pengelolaan status yang berpusat pada prompt dan hasil pengujian
    • Agent menjadi penulis sekaligus konsumen kode, sehingga kebutuhan untuk merancang ulang tool itu sendiri makin besar
    • Dashboard dan UI beralih ke antarmuka berbasis bahasa alami, lalu berkembang menjadi bentuk yang digunakan bersama oleh manusia dan agent AI
    • Dokumentasi berubah menjadi knowledge base untuk manusia dan AI sekaligus, serta disusun ulang dalam format yang bisa dipahami agent

1. AI-Native Git: Mendefinisikan Ulang Version Control untuk Agent AI

  • Git awalnya dirancang untuk melacak riwayat perubahan per baris pada kode yang ditulis langsung oleh manusia
    • Namun, dalam situasi ketika AI secara otomatis menghasilkan dan mengubah banyak bagian kode, pelacakan yang sangat rinci seperti ini menjadi kurang penting
    • Pengembang tidak lagi berfokus pada isi perubahan, melainkan pada kelayakan perilaku hasilnya (apakah lolos pengujian, berjalan normal, dan sebagainya)
    • SHA memberi tahu bahwa ada perubahan, tetapi tidak memuat informasi tentang mengapa perubahan itu dilakukan atau apakah perubahan itu valid
    • Terutama untuk perubahan skala besar atau kode yang dihasilkan otomatis, pengembang tidak meninjau diff satu per satu
  • Dalam workflow AI-first, kombinasi elemen berikut menjadi unit yang lebih berguna
    • Prompt: input yang memandu pembuatan kode
    • Test: pengujian untuk memverifikasi perilaku yang diharapkan
    • Spec dan constraints: kebutuhan desain seperti spesifikasi dan batasan
    • Semua ini diperlakukan sebagai satu bundle yang dapat diberi versi untuk dikelola dan dilacak
  • Jika dikembangkan lebih jauh, dalam workflow Agent-Driven, Source of Truth dapat bergerak ke arah upstream menuju prompt, skema data, API contract, dan intent arsitektural
    • Akibatnya, kode diperlakukan seperti artefak hasil kompilasi, dan bukan sebagai sumber, melainkan sebagai produk sampingan dari input-input tersebut
    • Git berfungsi bukan sebagai workspace kode, tetapi sebagai artifact log
      • Siapa yang membuat kode, dengan model apa, dan menggunakan prompt apa
      • Test apa saja yang lolos
      • Metadata seperti bagian mana yang perlu ditinjau manusia turut disimpan
  • Riwayat perubahan mencakup prompt dan tujuan, test terkait, serta informasi model yang digunakan untuk menghasilkan kode
    • Integrasi dengan tool AI reviewer seperti Diamond memungkinkan alur review otomatis
    • Metadata yang lebih kaya juga dapat dilapis, seperti struktur yang membedakan kode buatan agent dan area terlindungi yang dikelola manusia
  • Jika membayangkan workflow AI-Native Git
    • Bisa muncul bentuk dashboard Git baru yang menampilkan prompt, alur perubahan yang berlandaskan prompt tersebut, hasil test, informasi agent yang berjalan, dan informasi bundle secara bersamaan

2. Dashboard → Synthesis: Evolusi menuju Antarmuka Dinamis Berbasis AI

  • Selama bertahun-tahun, dashboard telah menjadi antarmuka utama untuk berinteraksi dengan sistem kompleks seperti sistem observabilitas, tool analitik, dan cloud console (misalnya AWS)
    • Namun, terlalu banyak elemen kontrol, chart, dan tab menyebabkan kelebihan beban UX, sehingga pengguna mudah tersesat antara eksplorasi informasi dan aksi
    • Terutama bagi non-spesialis atau dalam situasi kolaborasi lintas tim, dashboard semacam ini bisa dipandang sebagai alat yang mengintimidasi dan tidak efisien
    • Pengguna tahu tujuan yang ingin dicapai, tetapi sering tidak tahu harus mencari di mana atau filter apa yang harus diterapkan
  • Model AI generasi terbaru membuka kemungkinan untuk mengatasi masalah ini
    • Dashboard dapat ditafsirkan ulang bukan sebagai kanvas tetap, melainkan sebagai ruang yang bisa dieksplorasi dan diajak berinteraksi
  • LLM dapat mendukung pengguna dengan cara berikut:
    • Menemukan lokasi kontrol seperti pada pertanyaan “Di mana saya mengubah pengaturan rate limit API ini?”
    • Memberikan ringkasan gabungan data seperti “Tolong rangkum tren error dari semua service di environment staging selama 24 jam terakhir”
    • Menyarankan insight tersembunyi seperti “Berdasarkan kondisi bisnis saya, metrik apa yang perlu saya perhatikan kuartal ini?”
  • Saat ini, teknologi seperti Assistant UI כבר mendukung agent untuk memanfaatkan komponen React layaknya tool
    • Seperti halnya konten yang dinamis dan dipersonalisasi, UI itu sendiri juga sedang disusun ulang sesuai niat pengguna dan berevolusi menjadi interaktif
    • Dashboard statis bisa segera dianggap ketinggalan zaman
    • Contoh:
      • Saat pengguna berkata “Tampilkan anomali yang terjadi di Eropa akhir pekan lalu”, log dan tren yang sudah diringkas akan disajikan otomatis tanpa perlu memanipulasi filter secara manual
      • Untuk pertanyaan “Kenapa skor NPS turun minggu lalu?”, AI dapat menyajikan analisis sentimen survei, analisis korelasi dengan riwayat deployment produk, hingga ringkasan diagnosis
  • Dalam perspektif yang lebih luas, jika agent menjadi konsumen software, maka konsep ‘dashboard’ itu sendiri perlu dirancang ulang
    • Misalnya, dashboard dapat merender view yang dioptimalkan untuk Agent Experience
      • Menyediakan antarmuka yang terstruktur dan dapat diakses secara terprogram agar sistem bisa mengenali status, mengambil keputusan, dan bertindak
    • Hasilnya, bisa muncul struktur antarmuka ganda tempat UI untuk manusia dan UI untuk agent hadir berdampingan
      • Keduanya berbagi status yang sama, tetapi cara penyusunannya berbeda sesuai cara konsumsinya
  • Agent menggantikan peran alert, cron job, dan otomasi berbasis kondisi yang ada sekarang, sambil menjadi eksekutor dengan konteks dan fleksibilitas yang jauh lebih besar
  • Contoh:
    • Sebelumnya: if error rate > threshold then send alert
    • Berbasis agent: “Tingkat error sedang meningkat. Penyebabnya adalah service ini, dan berikut komponen yang terdampak serta tindakan yang direkomendasikan”
  • Dengan demikian, dashboard tidak lagi sekadar tempat untuk mengamati, melainkan didefinisikan ulang sebagai ruang tempat manusia dan AI berkolaborasi, mengintegrasikan informasi, dan menjalankan tindakan

3. Dokumen berevolusi menjadi gabungan tool, indeks, dan knowledge base interaktif

  • Cara pengembang memanfaatkan dokumentasi sedang berubah
    • Di masa lalu, orang membaca mengikuti daftar isi atau membaca spesifikasi dari atas ke bawah, tetapi kini pendekatan “mengajukan pertanyaan terlebih dahulu” menjadi umum
    • Alih-alih berpikir “Saya harus mempelajari spesifikasi ini”, kini muncul pergeseran ke pola pikir “Susun ulang informasinya sesuai cara yang saya inginkan
    • Perubahan ini juga memengaruhi bentuk dokumentasi, yang berevolusi dari HTML atau Markdown statis menjadi sistem pengetahuan interaktif yang ditopang oleh indeks, embedding, dan agent yang memahami tool
  • Karena itu, tool seperti Mintlify mulai bermunculan
    • Mintlify bukan hanya menyusun dokumentasi sebagai database yang bisa dicari berdasarkan makna, tetapi juga digunakan sebagai sumber konteks bagi agent di berbagai platform
      • Contoh: di AI IDE, ekstensi VS Code, terminal agent, dan lain-lain, dokumentasi Mintlify digunakan sebagai referensi real-time
    • Alasannya adalah karena agent pembuat kode memanfaatkan dokumentasi terbaru sebagai konteks berbasis pembelajaran
  • Akibatnya, tujuan dokumentasi itu sendiri sedang berubah
    • Dokumentasi bukan lagi sekadar penyampaian informasi untuk pembaca manusia, tetapi kini harus dirancang sebagai struktur untuk konsumen agent
    • Dalam dinamika baru ini, dokumentasi berperan sebagai panduan penggunaan untuk agent AI
    • Ini bukan sekadar menampilkan konten, melainkan format yang menjelaskan bagaimana sistem dapat digunakan dengan benar

4. Dari template ke generasi: vibe coding yang menggantikan create-react-app

  • Di masa lalu, memulai proyek biasanya berarti memilih template statis seperti create-react-app, next init, atau rails new
    • Template semacam ini memang menyediakan struktur aplikasi yang konsisten, tetapi sulit dikustomisasi sesuai niat pengembang atau stack yang digunakan, dan harus mengikuti nilai default framework
    • Akibatnya, untuk keluar dari konfigurasi dasar dibutuhkan refaktorisasi manual dalam jumlah besar
  • Kini alur itu mulai berubah dengan hadirnya platform text-to-app seperti Replit, Same.dev, Loveable, Chef by Convex, Bolt dan AI IDE seperti Cursor
    • Misalnya, pengembang cukup menjelaskan “server API TypeScript dengan Supabase, Clerk, dan Stripe”, lalu AI akan otomatis menyusun proyek kustom dalam hitungan detik
    • Starter yang dihasilkan bukan template umum, melainkan struktur yang dioptimalkan untuk niat pengembang dan stack yang dipilih
  • Perubahan ini juga mengubah struktur distribusi dalam ekosistem
    • Bukan lagi beberapa framework yang mendominasi pusat ekosistem seperti dulu, melainkan alur pembuatan kustom yang menggabungkan beragam alat dan arsitektur yang makin menyebar
    • Intinya bergeser dari memilih framework menjadi menjelaskan ‘apa yang ingin dibuat’
    • Seorang pengembang bisa memilih kombinasi Next.js dan tRPC, sementara yang lain memilih Vite dan React, dan keduanya dapat langsung dihasilkan sebagai proyek yang siap dijalankan
  • Tentu, stack standar tetap punya keunggulan:
    • peningkatan produktivitas tim, efisiensi onboarding, kemudahan debugging, dan sebagainya
    • Namun refaktorisasi antar-framework bukan sekadar masalah teknis, melainkan terkait dengan kemampuan produk, infrastruktur, dan organisasi
  • Titik baliknya adalah biaya perpindahan framework yang kini menurun
    • Agen AI mulai mampu memahami maksud proyek dan melakukan refaktorisasi skala besar secara semi-otomatis
    • Ini membuat eksperimen lebih mudah, serta memberi ruang untuk mencoba berbagai stack pada tahap awal atau kembali mundur jika diperlukan
  • Hasilnya, pemilihan framework menjadi bersifat reversibel (decision reversible)
    • Contoh: mulai dengan Next.js lalu beralih ke Remix + Vite, dan agen menangani seluruh proses refaktorisasi
  • Karena lock-in framework berkurang, stack yang opinionated pun bisa dicoba tanpa beban besar

5. Melampaui .env: pengelolaan secret di lingkungan yang berpusat pada agen

  • Selama puluhan tahun, file .env menjadi cara dasar bagi pengembang untuk mengelola secret secara lokal dengan sederhana, seperti API key, URL database, dan token layanan
    • Pendekatan ini sederhana, portabel, dan ramah pengembang, tetapi mulai bermasalah ketika AI IDE atau agen menulis kode, men-deploy layanan, dan mengoordinasikan environment
    • Artinya, menjadi tidak jelas siapa sebenarnya pemilik file .env tersebut
  • Kini mulai muncul pendekatan untuk mengatasi masalah ini
    • Misalnya, spesifikasi MCP terbaru menyertakan framework autentikasi berbasis OAuth 2.1
    • Struktur ini mengarah pada pemberian token dengan cakupan terbatas kepada agen AI (scope-based, revocable tokens) alih-alih secret mentah
    • Contoh: alih-alih memberi agen seluruh key AWS, sistem memberikan credential jangka pendek yang hanya mengizinkan aksi terbatas seperti “mengunggah file ke S3”
  • Arah lain yang juga muncul adalah hadirnya secret broker lokal
    • Ini berjalan secara lokal atau berdampingan dengan aplikasi, dan berperan sebagai layanan perantara antara agen dan secret sensitif
    • Agen tidak langsung mengakses .env atau melakukan hardcode, melainkan saat tugas tertentu diminta, broker menilai permintaan itu secara real-time dan memberikan otorisasi
      • Misalnya: permintaan “deploy ke staging” atau “kirim log ke Sentry”
      • Broker menanganinya secara just-in-time, dan semua akses dapat diaudit
  • Pendekatan ini menggeser akses secret dari file system ke model otorisasi berbasis API
    • Pada akhirnya, pengelolaan secret berkembang dari konfigurasi .env menuju struktur kontrol izin berbasis OAuth

6. Menjadikan aksesibilitas sebagai antarmuka universal: aplikasi dari sudut pandang LLM

  • Belakangan ini, aplikasi seperti Granola dan Highlight meminta izin aksesibilitas di macOS, tetapi tujuannya bukan lagi sekadar untuk dukungan pengguna disabilitas tradisional, melainkan agar agen AI dapat mengamati dan berinteraksi dengan UI
    • Ini bukan sekadar hack sementara, melainkan bisa dilihat sebagai pertanda pergeseran antarmuka yang lebih mendasar
  • API aksesibilitas awalnya dibuat untuk meningkatkan akses digital bagi pengguna dengan hambatan visual dan motorik
    • Namun jika diperluas, API ini bisa berfungsi sebagai lapisan antarmuka universal untuk agen AI
    • Alih-alih mengklik posisi piksel atau melakukan scraping DOM, agen dapat mengamati dan bertindak pada aplikasi secara semantik sebagaimana teknologi bantu menafsirkan UI
    • Pohon aksesibilitas sudah mengekspos elemen UI terstruktur seperti tombol, judul, dan kolom input
    • Jika ditambahkan metadata seperti intent, role, dan affordance, maka agen dapat memanipulasinya secara presisi sesuai tujuan dan konteks
  • Arah ini dapat berkembang ke fungsi-fungsi seperti berikut:
    • Context extraction: menggunakan API aksesibilitas/semantik untuk menanyakan elemen yang terlihat di layar, item yang dapat diinteraksikan, dan tindakan pengguna saat ini
    • Intentful execution: alih-alih merangkai banyak panggilan API secara manual, cukup mendeklarasikan tujuan tingkat tinggi seperti “tambahkan item ke keranjang dan pilih pengiriman tercepat”, lalu backend menyusun langkah eksekusinya
    • Fallback UI for LLMs: fitur aksesibilitas menyediakan antarmuka cadangan agar agen tetap dapat menggunakan aplikasi yang tidak memiliki API publik
      • Pengembang juga dapat mendefinisikan render surface yang bisa dikenali agen melalui structured annotation atau komponen yang berfokus pada aksesibilitas, selain UI visual atau DOM
  • Singkatnya, API aksesibilitas kini berkembang menjadi lapisan antarmuka inti untuk interaksi antara AI dan sistem, bukan lagi fitur yang hanya untuk manusia

7. Munculnya pekerjaan agen asinkron

  • Ketika pengembang semakin terbiasa berkolaborasi dengan agen penulis kode, peralihan ke workflow asinkron pun makin cepat
    • Agen mengerjakan tugas paralel di latar belakang, lalu melaporkan hasilnya setelah mencapai tingkat kemajuan tertentu
    • Interaksi seperti ini semakin mirip task orchestration daripada pair programming
    • Artinya, pengembang menyampaikan tujuan, agen mengerjakannya, lalu hasilnya diperiksa kemudian
  • Poin pentingnya bukan sekadar mengurangi beban kerja, tetapi memadatkan kolaborasi itu sendiri
    • Misalnya, alih-alih meminta tim lain memperbarui file konfigurasi, melakukan error triage, atau me-refactor komponen,
      pengembang bisa langsung menyampaikan intent ke agen dan menginstruksikannya untuk memproses di latar belakang
    • Sebelumnya dibutuhkan rapat sinkron, handoff lintas departemen, dan siklus review yang panjang,
      tetapi kini loop request → generate → validate dapat berlangsung secara alami
  • Cara berinteraksi dengan agen juga terus meluas
    • Selain sekadar memasukkan prompt di IDE atau CLI, kini dimungkinkan juga cara-cara berikut:
      • Meminta tugas lewat pesan Slack
      • Menulis komentar pada mockup Figma
      • Menambahkan komentar inline pada code diff atau PR (misalnya: Graphite review assistant)
      • Menambahkan feedback pada preview aplikasi yang sudah di-deploy
      • Menjelaskan perubahan secara lisan melalui antarmuka berbasis suara atau panggilan
  • Perubahan ini membuat agen hadir di seluruh siklus hidup pengembangan
    • Tidak berhenti pada penulisan kode, tetapi juga melakukan interpretasi desain, menerapkan feedback, hingga bug triage di seluruh platform
    • Pengembang mengambil peran sebagai orchestrator yang menentukan thread pekerjaan mana yang dilanjutkan, dikecualikan, atau digabungkan
  • Pada akhirnya, arus ini mengisyaratkan kemungkinan bahwa thread kerja berbasis agen akan menjadi konsep baru dari “Git branch”
    • Bukan lagi fork kode yang statis, melainkan thread dinamis yang berorientasi tujuan dan berjalan secara asinkron lalu diintegrasikan saat selesai

8. MCP: Model Context Protocol selangkah lebih dekat menuju standar universal

  • Sejak baru-baru ini memublikasikan tulisan analisis mendalam tentang MCP, laju adopsi MCP terus meningkat
  • OpenAI telah secara resmi mengadopsi MCP, berbagai fitur baru telah digabungkan ke dalam spesifikasi,
    dan semakin banyak pembuat alat yang menerima MCP sebagai antarmuka dasar antara agen dan dunia nyata
  • Pada dasarnya, MCP menyelesaikan dua masalah penting:
    • Menyediakan konteks yang dibutuhkan agar LLM dapat mengerjakan tugas yang baru pertama kali ditemuinya
    • Menghilangkan integrasi kustom model N×M, dan menyederhanakannya menjadi struktur di mana alat mengekspos antarmuka standar (server), lalu semua agen (klien) dapat menggunakannya
  • Ke depan, adopsi MCP diperkirakan akan makin meluas,
    dan jika remote MCP serta de-facto registry MCP muncul,
    banyak aplikasi bisa dirilis dengan antarmuka MCP sebagai fitur bawaan
  • Seperti API di masa lalu yang memungkinkan alat SaaS saling terhubung dan membentuk workflow,
    MCP dapat menciptakan ekosistem komponen interoperabel untuk agen AI
  • Platform yang menanamkan klien MCP bukan lagi sekadar berada di level “didukung AI”,
    melainkan menjadi bagian dari ekosistem yang bisa langsung terhubung ke jaringan kapabilitas yang dapat diakses agen
  • Klien dan server dalam MCP hanyalah konsep logis, bukan pemisahan fisik
    • Ini berarti klien MCP mana pun bisa menjadi server, dan sebaliknya
    • Karena itu, terbuka composability tingkat tinggi seperti berikut:
      • Contoh: satu coding agent dapat mengambil GitHub issue sebagai klien, dan pada saat yang sama bertindak sebagai server untuk menyediakan hasil test coverage atau analisis kode kepada agen lain
  • MCP sedang memantapkan diri sebagai lapisan antarmuka dasar bagi ekosistem tempat alat dan agen berinteraksi secara organik

9. Primitive yang diabstraksikan: autentikasi, pembayaran, dan penyimpanan yang dibutuhkan semua agen AI

  • Seiring agen vibe coding menjadi semakin kuat, ada satu hal yang makin jelas:
    agen dapat menghasilkan banyak kode, tetapi mereka membutuhkan fondasi tepercaya tempat kode itu akan terhubung
  • Sebagaimana pengembang manusia mengandalkan Stripe untuk pembayaran, Clerk untuk autentikasi, dan Supabase untuk database,
    agen juga membutuhkan service primitive yang tepercaya dan dapat dikombinasikan
  • Layanan-layanan ini menyediakan batas API yang jelas, SDK yang mudah digunakan, dan default yang masuk akal,
    dan semakin berperan sebagai antarmuka runtime bagi agen
  • Misalnya, saat membuat alat untuk menghasilkan aplikasi SaaS, alih-alih agen mengimplementasikan sendiri sistem autentikasi atau logika pembayaran,
    agen dapat menggunakan Clerk dan Stripe untuk integrasi yang cepat dan aman
  • Ketika pola ini makin matang, layanan tidak hanya menyediakan API, tetapi juga dapat mengekspos hal-hal berikut:
    • Schema: definisi data terstruktur
    • Capability metadata: spesifikasi tugas yang dapat dijalankan
    • Example flows: contoh cara integrasi dilakukan
      → Dengan begitu, agen dapat berintegrasi dengan lebih andal
  • Beberapa layanan bahkan bisa dirilis langsung dengan MCP server bawaan
    • Contoh: Clerk dapat mengekspos kapabilitas seperti melihat daftar produk yang tersedia, membuat paket harga baru, atau mengubah langganan melalui MCP server
    • Alih-alih mencari spesifikasi API atau dokumentasi, agen cukup meminta dalam bahasa alami,
      dan MCP server akan memvalidasi serta memproses permintaan dalam batas cakupan izin dan constraint yang berlaku
    • Contoh:
      > “Buatkan paket Pro seharga $49 per bulan, dan tambahkan pengaturan biaya tambahan berbasis penggunaan”
      → MCP server milik Clerk akan menafsirkan dan menjalankan permintaan ini
  • Seperti rails new pada era awal web yang memungkinkan pengembangan cepat,
    di era agen dibutuhkan primitive tepercaya (drop-in identity, pembayaran, kontrol akses, dan sebagainya)
    • Primitive ini harus cukup terabstraksi sehingga bisa dimanfaatkan agen untuk generasi,
      namun juga memiliki struktur yang mampu skala seiring pertumbuhan aplikasi

Kesimpulan

  • Sembilan pola ini menunjukkan bahwa yang terjadi bukan sekadar menambahkan AI ke cara pengembangan lama, melainkan pendekatan pembuatan software itu sendiri sedang didefinisikan ulang dengan berpusat pada agen, konteks, dan intent
  • Sejalan dengan itu, pola perilaku pengembang yang ada pun berubah, dan toolchain serta protokol baru (seperti MCP) yang mendukungnya bermunculan dengan cepat
  • Lapisan alat inti yang sudah ada, seperti Git, template, dashboard, dan cara dokumentasi, sedang dirancang ulang secara mendasar bersama AI
  • Di tengah masa transisi ini, diharapkan akan ada pembangunan dan investasi yang aktif pada alat serta infrastruktur generasi berikutnya yang akan membentuk ekosistem pengembang baru

8 komentar

 
aa1567 2025-05-28

Ada orang yang benar-benar melakukan nomor 1..?

 
hhcrux 2025-05-27

LLM tidak menjamin output yang sama untuk input yang sama, jadi apakah manajemen konfigurasi seperti itu benar-benar bisa diterapkan...?
Apa aku masih menggunakannya dengan cara yang terlalu satu dimensi?

 
beoks 2025-05-27

Saya memahami bahwa jika opsi temperature diatur ke 0, itu menjamin keluaran yang sama untuk masukan yang sama.

 
fanotify 2025-05-28

Toh, beberapa bulan lagi modelnya sendiri juga bakal berubah lagi, jadi bukannya ini jadi tidak terlalu berarti?

 
beoks 2025-05-27

Terlepas dari itu, kesannya terlalu menghakimi karena sama sekali tidak mempertimbangkan campur tangan manusia,
untuk perubahan angka sederhana atau revisi pesan, campur tangan manusia justru akan lebih efisien daripada LLM.

 
nicewook 2025-05-26

Tulisan yang memberi kesan wawasan mendalam. Memang khas a16z.

 
ruinnel 2025-05-26

https://id.news.hada.io/topic?id=21091
Setelah membaca tulisan ini, saya jadi bertanya-tanya apakah ini benar.

 
ahwjdekf 2025-05-26

Poin nomor 1 benar-benar seperti mimpi buruk, perubahan yang sama sekali tidak ingin saya terima. Jadinya pelacakan riwayat kode sumber pun kehilangan makna.