- Bekerja pada codebase berskala besar adalah salah satu hal tersulit bagi software engineer. Sulit mendapatkan pengalaman seperti ini hanya dari proyek pribadi atau proyek open source
- Jutaan baris kode, 100-1000 engineer bekerja secara bersamaan, dan codebase yang setidaknya sudah berusia lebih dari 10 tahun
- Membutuhkan kemampuan tersendiri untuk memahami kondisi kompleksitas dan akumulasi waktu yang sudah menumpuk
Kesalahan terbesar adalah kurangnya konsistensi
- Kesalahan yang paling umum adalah mengabaikan codebase yang sudah ada lalu mengimplementasikan fitur dengan cara sendiri. Ini membuat konsistensi tidak terjaga dan memperparah kekacauan dalam codebase
- Biasanya dilakukan dengan meminimalkan interaksi dengan codebase yang ada agar bisa mempertahankan kode mereka yang bersih, serta mengimplementasikannya secara terpisah untuk menghindari kode "legacy" yang ada
- Konsistensi mengurangi kompleksitas codebase dan mempermudah pekerjaan perbaikan di masa depan
- Misalnya, saat mengimplementasikan API endpoint, penting untuk mengikuti metode autentikasi yang sudah ada. Ini membantu kita melewati ranjau di codebase dengan aman
- Tanpa pola yang konsisten, semua kode harus diperbarui secara manual, dan hal ini akan makin sulit seiring waktu
Faktor penting lainnya
- Memahami cara layanan benar-benar digunakan
- Kenali API endpoint utama yang paling sering digunakan dan jalur penting (hot path)
- Perubahan pada kode yang frekuensi pemakaiannya tinggi harus ditangani dengan hati-hati
- Pentingnya pengujian dan monitoring
- Dalam proyek berskala besar, tidak mungkin menguji semua status, jadi hanya jalur utama yang diuji
- Tulis kode secara defensif dan andalkan deployment bertahap serta monitoring
- Menahan diri untuk tidak menambah dependensi
- Dependensi dapat menimbulkan masalah keamanan dan meningkatkan biaya maintenance
- Jika benar-benar diperlukan, pilih dependensi yang tepercaya
- Menghapus kode secara hati-hati tetapi proaktif
- Analisis data production untuk menghapus pemanggilan dengan aman, lalu hapus kodenya
- Menghapus kode yang tidak perlu membuat codebase lebih mudah dipelihara
- Ini adalah salah satu pekerjaan yang paling bernilai dalam codebase berskala besar
- Kerjakan dalam PR kecil dan dahulukan perubahan yang memengaruhi kode tim lain
- Ini memungkinkan domain expert menemukan masalah dan mencegah insiden
Mengapa codebase berskala besar penting?
- Nilai codebase berskala besar
- Sebagian besar perusahaan teknologi menghasilkan pendapatan dari codebase berskala besar
- Bekerja pada "legacy codebase" berarti mengerjakan pekerjaan nyata perusahaan
- Perlu memahami sebelum memisahkan kode
- Untuk memisahkan codebase berskala besar, kita harus lebih dulu memahami dengan cukup cara kerjanya secara keseluruhan
- Tanpa pemahaman itu, redesign besar-besaran tidak mungkin dilakukan
Ringkasan
- Codebase berskala besar memiliki nilai bisnis yang penting
- Yang paling penting adalah menjaga konsistensi
- Sebelum mengimplementasikan fitur baru, teliti kode yang ada dan ikuti polanya
- Jika tidak mengikuti pola yang ada, harus ada alasan yang sangat kuat
- Pahami bagaimana kode digunakan di lingkungan production
- Karena tidak semua kasus bisa diuji, jangan terlalu bergantung pada pengujian; andalkan monitoring dan deployment bertahap
- Manfaatkan peluang untuk menghapus kode secara proaktif, tetapi lakukan dengan hati-hati
- Kerjakan dalam unit PR kecil agar domain expert dapat meninjaunya
8 komentar
Konsistensi memang penting, tetapi menunda perbaikan kode atau terus mengulang pola lama yang keliru juga bukan pendekatan yang baik... ini memang masalah yang sulit. Soalnya, demi menjaga konsistensi, kita bisa saja malah terus menumpuk utang teknis yang sama.
Di atas segalanya, aturan coding memang harus dipatuhi.
Terutama aturan indentasi...
Apakah Anda berada di domain yang tidak bisa menerapkan tooling yang otomatis menangkap hal-hal seperti ini..? terisak
Ya.... T_T
Saya ikut menangis.. hiks hiks hiks hiks hiks hiks hiks hiks
Skala proyek != kematangan
Saya setuju bahwa konsistensi itu sangat penting, tetapi menurut saya kita harus menghindari menjadikan hal itu sebagai alasan untuk menurunkan prioritas perbaikan codebase.
Karena proyek selalu hidup, bernapas, dan terus berkembang, jika kita tidak melakukan perbaikan pada waktu yang tepat, akan dibutuhkan lebih banyak waktu dan usaha untuk membalikkannya nanti.
Saya juga setuju. Saya menangani proyek yang usianya lebih dari 20 tahun, dan memang ada banyak bagian yang sangat belum matang dibandingkan dengan standar saat ini.
Konsistensi memang punya kelebihan karena dapat meningkatkan pemahaman terhadap kode, tetapi keterbatasan struktur menyebabkan keterbatasan fitur dan menghambat perkembangan layanan, jadi menurut saya terkadang perombakan besar yang berani juga diperlukan.
Pendapat Hacker News
Ketika codebase yang sudah ada tidak konsisten, penting untuk memperkenalkan pendekatan baru, mendokumentasikannya, dan meminta umpan balik. Kita perlu berusaha menjaga konsistensi dengan kode yang sudah ada.
Kita harus menggunakan alat yang ada di codebase lama, tetapi membangun codebase baru bisa terasa lebih menyenangkan.
Untuk memecah codebase besar, pemahaman harus didapatkan terlebih dahulu; jika tim yang tidak berpengalaman mencoba melakukannya, kemungkinan besar akan gagal.
Dalam codebase besar, ada banyak upaya acak untuk melakukan perbaikan.
Sulit untuk mempertahankan evolusi codebase.
Jika codebase besar dan kekurangan tenaga, orang baru akan butuh waktu lama untuk menjadi produktif.
Menjaga codebase tetap rapi berarti hanya melakukan pekerjaan minimum yang diperlukan untuk merilis fitur.
Konsistensi bukanlah hal yang paling penting; memperbaiki sebagian dari codebase adalah hal yang baik.
Pernyataan "kurangnya konsistensi adalah kesalahan fatal" itu 100% benar.
Tiga pepatah sebagai engineer: