Insinyur linier, Mufeez Amjad, telah menerbitkan penjelasan rinci tentang bagaimana perusahaan mengerjakan ulang jalur integrasi berkelanjutannya setelah agen pengkodean AI mengubah CI menjadi hambatan terburuknya — memotong waktu tunggu permintaan tarik dari lebih dari enam menit menjadi lebih dari lima menit, sementara ruang pengujiannya meningkat hampir empat kali lipat sejak awal tahun.
Postingan tersebut, yang dipublikasikan di blog teknik Linear pada tanggal 21 September, dimulai, seperti yang sering terjadi, dengan tiket singkat dari atas. Awal tahun ini, Amjad membuka Linear dan menemukan bahwa Tuomas, CTO perusahaan, telah menugaskannya sebuah masalah berjudul "Biaya CI tinggi" — dan memintanya untuk membuat CI lebih cepat saat dia mengerjakannya. Untuk konteks lebih lanjut mengenai kisah ini, lihat liputan industri AI kami yang sedang berlangsung.
Ketika Agen Melampaui Validasi
Masalahnya bersifat struktural, bukan insidental. “Agen telah mempercepat pengiriman kode secara eksponensial,” tulis Amjad, “tetapi validasi perubahan tersebut tidak berjalan dengan kecepatan yang sama.” Setiap pull request masih harus melewati CI, sehingga seiring dengan percepatan pengembangan, CI menjadi titik penghambatnya — meningkatkan biaya infrastruktur dan membuat pengembang serta agen mereka menunggu lebih lama untuk mendapatkan masukan.
Linear dioptimalkan untuk dua metrik: berapa lama PR menunggu di CI, dan berapa banyak waktu pelari yang digunakannya. Hasilnya setelah berbulan-bulan bekerja: meskipun rangkaian pengujian meningkat hampir empat kali lipat sejak bulan Januari, waktu tunggu permintaan penarikan turun dari lebih dari enam menit menjadi lebih dari lima menit, dan waktu pelari per pengujian dipotong kira-kira setengahnya.
Pekerjaan tersebut secara umum terbagi dalam empat kategori: meningkatkan infrastruktur dan peralatan, mengoptimalkan pekerjaan yang menghubungkan pekerjaan lain, mengurangi penyiapan berulang, dan membuat pelaksanaan pengujian menjadi lebih efisien. Basis kode Linear pada dasarnya adalah TypeScript, tetapi banyak pengoptimalan yang diterapkan di seluruh bahasa dan rantai alat.
Mesin Lebih Cepat dan Kompiler Asli
Beberapa kemajuan paling awal hampir tidak memerlukan optimalisasi CI itu sendiri. Memindahkan beban kerja dari GitHub Actions ke runner pihak ketiga dengan CPU yang lebih cepat, penyimpanan berperforma lebih tinggi, dan infrastruktur cache yang lebih baik langsung membuahkan hasil: dalam perbandingan dua hari di kedua sisi peralihan, pekerjaan berjalan rata-rata 34% lebih cepat, dengan beberapa beban kerja seperti `tsc` turun 52%.
Memodernisasi rantai alat menambah kemenangan tersebut. Beralih ke `tsgo`, kompiler TypeScript asli, memotong median mingguan pemeriksaan ketik sebesar 73% — cukup besar untuk sepenuhnya menghilangkan hambatan pemeriksaan ketik.
Linting Tanpa Grafik Tipe
Linting adalah target awal lainnya. Sejumlah aturan ESLint kustom Linear bergantung pada informasi tipe TypeScript, yang memaksa setiap lint yang dijalankan membuat grafik tipe lengkap sebelum mengevaluasinya — menjadikan linting sebagai salah satu tugas CI yang paling banyak menggunakan memori.
Tim menulis ulang aturan untuk menggunakan analisis statis pada pohon sintaksis abstrak, mengidentifikasi konstruksi mirip fungsi dan pola penjagaan tanpa informasi tipe apa pun. Hal ini memungkinkan ESLint menghapus TypeScript sepenuhnya, mengurangi waktu lint API sebesar 68% dan waktu lint repositori penuh sebesar 55%, dengan penggunaan memori menurun secara signifikan. Hal ini juga memudahkan migrasi selanjutnya ke Oxlint, yang selanjutnya mengurangi jumlah menit yang dihabiskan CI untuk linting.
Menyusut Jalur Kritis
Dengan pemeriksaan individual yang lebih cepat, Linear memperkecil dan memperlakukan CI sebagai sebuah sistem. Hal ini menarik perhatian pada tugas-tugas kecil yang ada di depan segalanya — deteksi perubahan jalur dan cache hasil pengujian memeriksa gerbang tersebut di tingkat tugas, yang berarti tidak satu pun dari delapan pecahan pengujian API dapat dimulai hingga selesai.
Perbaikannya bersifat granular tetapi bersifat aditif. Membatasi kedalaman pengambilan membuat gerbang paling lambat dari 94 detik menjadi 20. Menghapus checkout seluruhnya dari pekerjaan yang tidak memerlukan pohon kerja akan memotong waktu tersebut dari 27 detik menjadi 7. Checkout yang jarang dan tanpa blob dengan riwayat terbatas menghemat 11 detik tambahan untuk kejadian push dan penggabungan antrian. Secara keseluruhan, durasi median tugas deteksi perubahan turun dari 26 detik menjadi 8, p90 dari 31 menjadi 12, dan berjalan paling lambat dari 138 detik menjadi 37.
Keandalan checkout juga perlu diperbaiki: karena runner pihak ketiga berada di luar jaringan GitHub dan mengandalkan tautan IP langsung, degradasi tautan yang terputus-putus terkadang menghentikan pengambilan. Linear mengganti `actions/checkout` dengan tindakan gabungannya sendiri yang mencoba ulang dengan backoff, menetapkan `GIT_HTTP_LOW_SPEED_LIMIT` dan `GIT_HTTP_LOW_SPEED_TIME` sehingga koneksi yang terhenti dibatalkan setelah sekitar 30 detik alih-alih terhenti, dan menggunakan cache checkout yang menyimpan cermin git persisten pada disket.
Satu perbaikan halus menghilangkan waktu antrian penggabungan yang terbuang: penanda cache sedang ditulis sebagai bagian dari pemeriksaan terakhir sebelum penggabungan, sehingga PR dapat tetap berada dalam antrian bahkan setelah pengujiannya lulus. Memindahkan penulisan tersebut ke pekerjaan non-gating mempersingkat 42 detik dari jalur penggabungan untuk setiap permintaan penarikan API dan entri antrean penggabungan. Secara keseluruhan, perubahan ini memakan waktu sekitar satu menit dari pemeriksaan yang diperlukan untuk PR API pada cache yang hilang sekaligus mengurangi permulaan runner.
Lebih Sedikit Detik yang Terbuang per Pekerjaan
Kategori terakhir menyerang biaya setup yang berulang di setiap pekerjaan. Setiap pecahan pengujian API menghabiskan 7 hingga 8 detik untuk menginstal klien Postgres yang sama dengan apt di setiap proses; memindahkannya ke gambar dasar CI kecil di samping Node berarti pecahan dapat mulai siap dijalankan. Tim kemudian menambahkan header build asli ke gambar tersebut setelah menemukan bahwa pengunduhan mereka selama penyiapan terkadang dapat terhenti.
Mengapa Ini Bergaung
Postingan ini mengejutkan para pengembang: mencapai halaman depan Hacker News, menarik sekitar 250 poin dan sekitar 280 komentar dalam sehari. Reaksinya mudah dijelaskan — Pengalaman Linear menyebutkan biaya pengembangan yang dibantu AI yang baru saja dihadapi oleh sebagian besar organisasi teknik. Agen yang menghasilkan permintaan penarikan dalam hitungan menit masih menunggu pada jalur validasi yang dirancang untuk irama manusia, dan setiap menit waktu tunggu tersebut dikalikan ke setiap agen yang bekerja secara paralel.
Pelajaran dari pengerjaan ulang Linear adalah bahwa kemacetan dapat diatasi, namun hanya melalui akumulasi banyak perbaikan kecil yang tidak menarik — pelari yang lebih cepat, pemeriksaan ketik yang lebih murah, aturan lint tingkat sintaksis, pengambilan yang dibatasi, pembayaran yang tangguh, gambar yang dibuat sebelumnya — dibandingkan dengan satu solusi jitu.
---
Tetap Terdepan dalam AIDapatkan berita, analisis, dan terobosan AI terkini — semuanya di satu tempat.
Baca berita AI selengkapnya →