26 poin oleh GN⁺ 2025-01-08 | 8 komentar | Bagikan ke WhatsApp
  • 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

 
kallare 2025-01-10

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.

 
regentag 2025-01-09

Di atas segalanya, aturan coding memang harus dipatuhi.
Terutama aturan indentasi...

 
roxie 2025-01-10

Apakah Anda berada di domain yang tidak bisa menerapkan tooling yang otomatis menangkap hal-hal seperti ini..? terisak

 
regentag 2025-01-10

Ya.... T_T

 
roxie 2025-01-10

Saya ikut menangis.. hiks hiks hiks hiks hiks hiks hiks hiks

 
bbulbum 2025-01-09

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.

 
beoks 2025-01-09

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.

 
GN⁺ 2025-01-08
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.

    • Bahkan jika kode lama buruk, tetap penting untuk bekerja dengan menjaga konsistensi dengan kode di sekitarnya.
    • Jika anggota tim tidak kooperatif, akan membantu untuk menekankan masalah pada kode yang ada dan menjelaskan bahwa pendekatan baru itu bersifat eksperimental.
  • Kita harus menggunakan alat yang ada di codebase lama, tetapi membangun codebase baru bisa terasa lebih menyenangkan.

    • Semakin tinggi coupling dalam codebase, semakin sulit melakukan perubahan, dan jika cakupan pengujian kurang, masalah bisa muncul.
  • Untuk memecah codebase besar, pemahaman harus didapatkan terlebih dahulu; jika tim yang tidak berpengalaman mencoba melakukannya, kemungkinan besar akan gagal.

    • Jika tim baru tidak memahami sistem yang ada, proyek bisa gagal.
  • Dalam codebase besar, ada banyak upaya acak untuk melakukan perbaikan.

    • Penting untuk menemukan bagian yang perlu diperbaiki dan menilai bagian mana yang benar-benar akan memberi dampak positif.
    • Penting untuk mengetahui apa yang perlu diperbaiki dan kapan harus berhenti.
  • Sulit untuk mempertahankan evolusi codebase.

    • Konsistensi absolut tidak memberi ruang untuk eksperimen, dan tanpa eksperimen tidak akan ada keberhasilan.
  • Jika codebase besar dan kekurangan tenaga, orang baru akan butuh waktu lama untuk menjadi produktif.

    • Bekerja di lingkungan seperti ini mungkin tidak baik untuk karier.
  • Menjaga codebase tetap rapi berarti hanya melakukan pekerjaan minimum yang diperlukan untuk merilis fitur.

    • Ini bisa menjadi pilihan taktis dari engineer yang cerdik secara politik dengan tujuan merilis fitur.
  • Konsistensi bukanlah hal yang paling penting; memperbaiki sebagian dari codebase adalah hal yang baik.

    • "Antipola lapisan lava" dapat menghasilkan sistem yang lebih baik daripada upaya mempertahankan konsistensi.
  • Pernyataan "kurangnya konsistensi adalah kesalahan fatal" itu 100% benar.

    • Mengikuti filosofi "di mana bumi dipijak, di situ langit dijunjung."
  • Tiga pepatah sebagai engineer:

    • kejelasan, konsistensi, keringkasan
    • letakkan rasa sakit di tempat yang tepat
    • melawan entropi