Buka repositori enam bulan selepas sesuatu ciri dilancarkan, dan anda masih boleh membina semula banyak perkara. Anda boleh menelusuri seni bina, memeriksa skema, membaca ujian, dan melihat dengan tepat baris mana yang berubah.
Apa yang biasanya anda tidak dapat bina semula ialah perbualan yang menjadikan baris-baris itu perlu.
Kod tidak akan memberitahu anda bahawa satu peraturan pengesahan wujud kerana seorang pelanggan menghantar eksport yang rosak formatnya. Ia tidak akan menjelaskan bahawa dasar cuba semula yang ganjil itu menghalang transaksi pendua dalam sistem hiliran. Ia tidak akan menunjukkan bahawa antara muka yang lebih bersih ditolak selepas ujian kebolehcapaian, atau bahawa sempadan perkhidmatan mencerminkan sekatan kontrak dan bukannya keutamaan kejuruteraan.
Git sangat cemerlang dalam mengekalkan sejarah kod. Ia mengekalkan niat hanya apabila sesebuah pasukan sengaja mendokumentasikan niat itu dan memastikan ia kekal terhubung dengan pelaksanaannya.
Jurang itu sentiasa menjadi sebahagian daripada kejuruteraan perisian. Alat pengekodan AI menjadikannya lebih ketara. Sesuatu sistem boleh membaca setiap fail dalam repositori, menjejaki setiap simbol, dan menghasilkan tampalan yang meyakinkan dari segi teknikal sambil masih menyelesaikan masalah yang salah.
Masalahnya bukan kerana kod itu mengelirukan. Kod itu sedang menjawab soalan yang lebih sempit.
Lima lapisan kebenaran kejuruteraan
Kebanyakan perubahan perisian yang bermakna bergantung pada lima lapisan bukti yang berbeza.
- Niat — Apakah hasil yang diminta oleh pengguna, pelanggan, atau perniagaan? Ini mungkin terdapat dalam spesifikasi, tiket, perbualan sokongan, atau nota mesyuarat.
- Kekangan — Apakah yang tidak boleh rosak? Janji keserasian, sempadan keselamatan, peraturan, kontrak, bajet, dan tarikh akhir selalunya berada di luar repositori.
- Pelaksanaan — Bagaimanakah sistem berfungsi hari ini? Kod, ujian, skema, kebergantungan, dan konfigurasi penggunaan menyediakan lapisan ini.
- Bukti masa jalan — Apakah yang sedang berlaku dalam sistem sebenar? Log, jejak, metrik, data pengeluaran, dan laporan insiden boleh bercanggah dengan andaian yang kelihatan munasabah dalam kod.
- Sejarah keputusan — Mengapakah pendekatan semasa dipilih? Pull request, perbincangan reka bentuk, alternatif yang ditolak, dan insiden terdahulu menyimpan jawapannya.
Repositori paling kuat pada lapisan ketiga. Ia mengandungi sebahagian daripada lapisan-lapisan lain, tetapi jarang cukup untuk mewakilinya secara lengkap.
Ini penting kerana kegagalan perisian sering muncul pada sempadan antara lapisan. Pelaksanaan sepadan dengan spesifikasi yang sudah lapuk. Pembaikan itu memenuhi tiket tetapi melanggar kekangan operasi. Ujian lulus kerana ia mengekodkan andaian semalam. Kod itu konsisten secara dalaman sedangkan data pengeluaran mengikuti corak yang tidak pernah didokumentasikan oleh sesiapa.
Tampalan yang betul secara setempat masih boleh menjadi perubahan yang salah.
Perkara yang repositori tidak dapat jawab dengan sendirinya
Bayangkan seorang pengguna mengedit dokumen dan kemudian mencari ayat yang telah dikemas kini, tetapi yang muncul dalam hasil carian ialah versi lama. “Jadikan carian dikemas kini serta-merta” kedengaran seperti permintaan yang jelas. Repositori menunjukkan beberapa tempat yang munasabah untuk mula menyiasat, tetapi ia tidak dapat menentukan pembaikan yang betul dengan sendirinya.
| Soalan | Sumber yang berkemungkinan |
|---|---|
| Versi dokumen yang manakah menjadi rujukan utama? | Dokumen sumber dan sejarah semakan |
| Di manakah teks lama itu masih kekal? | Log penyegerakan, output pengekstrakan, indeks carian, atau cache |
| Apakah maksud “serta-merta” untuk produk ini? | Janji produk atau objektif perkhidmatan |
| Adakah kebenaran dokumen berubah bersama kandungannya? | Kebenaran sumber dan sejarah audit |
| Adakah hasil lapuk itu terhad kepada seorang pengguna, satu sumber, atau satu rantau? | Jejak permintaan dan metrik pengeluaran |
Kod carian mungkin menerangkan cara hasil dipulangkan. Ia tidak dapat memberitahu anda sama ada masalah sebenar ialah kelewatan penyegerakan, pengekstrakan lapuk, pembatalan cache, perambatan kebenaran, atau jangkaan yang tidak pernah ditakrifkan oleh produk.
Perbezaan ini menjadi lebih penting dalam sistem yang matang. Medan yang kelihatan usang mungkin masih menyokong klien legasi. Perkhidmatan yang kelihatan seperti pendua mungkin sebenarnya memisahkan data dengan keperluan kebenaran yang berbeza. Semakan yang nampak berlebihan mungkin satu-satunya jejak pada peringkat kod bagi insiden pengeluaran yang tidak pernah dilihat oleh pasukan semasa.
Menghapuskan kerumitan itu bernilai. Menghapuskan sejarah yang menyamar sebagai kerumitan itu mahal.
Lebih banyak konteks masih boleh menghasilkan jawapan yang salah
Penyelesaian yang jelas ialah memberi AI lebih banyak bahan: seluruh repositori, setiap tiket, setiap dokumen, setiap mesej, dan setiap log.
Itu mewujudkan akses, bukan pemahaman.
Sumber boleh menjadi lapuk, bercanggah, bersifat spekulatif, atau ditulis untuk khalayak yang berbeza. Sesi percambahan idea tidak sepatutnya mengatasi spesifikasi yang telah diluluskan. Keperluan yang berusia enam bulan tidak sepatutnya secara senyap mengatasi keputusan produk semalam. Log pengeluaran perlu dikaitkan dengan keluaran, persekitaran, dan laluan kod yang menghasilkannya. Permintaan pelanggan tidak sepatutnya dianggap sebagai keperluan sejagat tanpa menyemak skopnya.
Oleh itu, sistem konteks yang serius memerlukan lebih daripada sekadar pengambilan semula. Ia memerlukan cara untuk menilai:
- Kewibawaan: Sumber manakah yang dibenarkan untuk mentakrifkan keperluan?
- Kekinian: Maklumat manakah yang semasa, dan yang manakah telah digantikan?
- Asal usul: Dari manakah datangnya setiap dakwaan, kekangan, atau kesimpulan?
- Hubungan: Isu, keluaran, pelanggan, set data, dan laluan kod yang manakah saling berkaitan?
- Kebenaran: Sumber manakah yang boleh digunakan untuk tugasan ini dan ditunjukkan kepada orang ini?
Konteks bukanlah timbunan token. Ia ialah graf dengan masa, kewibawaan, dan sempadan.
Lebih banyak konteks sepatutnya menghasilkan lebih banyak bukti, bukan lebih banyak keyakinan tanpa bukti.
Unit kerja yang sebenar ialah perubahan
Editor dan alat pengekodan disusun berdasarkan fail kerana fail ialah perkara yang kita ubah. Pasukan kejuruteraan pula disusun berdasarkan perubahan.
Sesuatu perubahan bermula dengan sebab. Ia menjadi keperluan, menyentuh kod dan data, melalui semakan, sampai ke pengeluaran, dan menghasilkan bukti baharu. Jika peringkat-peringkat itu kekal terpisah, setiap tugasan pada masa hadapan akan bermula dengan satu lagi pusingan kerja arkeologi.
Sistem AI yang bekerja pada perisian sebenar sepatutnya mengikuti kitar hayat itu.
Sebelum pelaksanaan, ia sepatutnya mengenal pasti permintaan, kekangan yang berkaitan, dan sebarang sumber yang bercanggah. Ia sepatutnya tahu sama ada ia sedang membaiki kecacatan, mengubah tingkah laku yang dijangkakan, atau memperkenalkan kontrak baharu.
Semasa pelaksanaan, ia sepatutnya menghubungkan setiap pilihan yang bermakna kepada bukti. Mengapa modul ini? Mengapa strategi migrasi ini? Mengapa mengekalkan cabang ini? Penjelasan itu sepatutnya kekal melangkaui perbualan yang menghasilkan kod tersebut.
Selepas pelaksanaan, ia sepatutnya melampirkan hasil pengesahan, keputusan semakan, dan kekangan yang baru ditemui pada perubahan tersebut. Jika tidak, orang seterusnya—atau sesi AI yang seterusnya—perlu menemuinya semula.
Inilah perbezaan antara alat yang boleh menyunting repositori dan sistem yang boleh mengambil bahagian dalam kerja kejuruteraan.
AI sepatutnya mengurangkan pembinaan semula, bukan menghapuskan pertimbangan
Konteks yang lebih baik kadangkala dipersembahkan sebagai laluan ke arah pembangunan perisian autonomi. Nilai terdekatnya kurang dramatik tetapi lebih berguna: mengurangkan kos membina semula realiti sebelum membuat perubahan.
AI boleh membawa keperluan asal bersebelahan dengan kod yang berkaitan. Ia boleh menonjolkan insiden yang menerangkan perlindungan luar biasa. Ia boleh menghubungkan metrik yang gagal dengan keluaran yang mengubahnya. Ia boleh menunjukkan bahawa dua sumber berautoriti tidak sependapat sebelum pelaksanaan bermula.
Keupayaan-keupayaan itu tidak menghapuskan pertimbangan kejuruteraan. Ia menjadikan pertimbangan itu lebih berasaskan maklumat.
Seseorang masih perlu memutuskan kompromi mana yang boleh diterima, sama ada sesuatu keperluan itu lengkap, dan berapa banyak risiko yang boleh dibawa oleh sesuatu keluaran. Sistem sepatutnya menjadikan bukti dapat dilihat dan penaakulan dapat diperiksa. Ia tidak sepatutnya menyembunyikan ketidakpastian di sebalik patch yang kelihatan kemas.
Piawaiannya bukan “bolehkah ia menjana kod?”
Piawaiannya ialah “bolehkah ia menerangkan mengapa ini ialah perubahan yang betul sekarang?”
Daripada sedar repositori kepada sedar kerja
Pembantu pengekodan mula menjadi berguna apabila ia memahami fail di hadapan pembangun. Kesedaran repositori ialah langkah besar seterusnya: mencari kod berkaitan, menjejak simbol, dan menerapkan perubahan merentas projek.
Langkah seterusnya ialah kesedaran tentang kerja di sekeliling repositori.
Ini bermaksud menghubungkan kod kepada spesifikasi yang memintanya, perbualan yang menjelaskannya, bukti pengeluaran yang mencabarnya, dan keputusan yang patut diingati selepas itu. Ini juga bermaksud mengecualikan konteks yang tidak relevan, lapuk, atau di luar kebenaran pengguna.
Semasa membina Dvina, inilah salah satu idea yang kami sentiasa kembali fikirkan. Kerja tidak berlaku di dalam satu fail, aplikasi, atau perbualan sahaja. Makna wujud dalam hubungan antara semuanya dan dalam cara hubungan itu berubah dari semasa ke semasa.
Repositori kekal penting. Ia ialah sumber kebenaran yang boleh dilaksanakan untuk tingkah laku sistem. Cuma ia bukan sumber kebenaran yang lengkap untuk niat produk, realiti operasi, atau ingatan organisasi.
Keseluruhan cerita mengubah apa yang dibina
Dengan kod sahaja, soalan yang lazim ialah:
Apakah perubahan yang sesuai dengan sistem ini?
Dengan konteks yang lebih luas, soalannya menjadi:
Apakah perubahan yang sesuai dengan sistem ini, keperluan ini, sejarah ini, dan saat ini?
Soalan kedua itu mengenal pasti kekangan sebelum ia menjadi regresi. Ia memberi penilai rasional di sebalik pelaksanaan. Ia membantu ahli pasukan baharu memahami mengapa sistem itu terbentuk seperti sekarang. Ia memberi AI peranan yang berasaskan konteks: bukan sebagai orakel dalam editor, tetapi sebagai peserta yang boleh menghimpunkan bukti merentas keseluruhan kerja.
Repo anda tidak pernah menceritakan keseluruhan kisahnya.
Peluangnya ialah membina sistem yang boleh membaca selebihnya—dan menunjukkan kerjanya.

