Mengapa Insinyur Hebat di Perusahaan Besar Menulis Kode Buruk
(seangoedecke.com)- Karena masa kerja yang singkat dan restrukturisasi organisasi yang sering di perusahaan teknologi besar, banyak insinyur bekerja pada codebase yang tidak mereka kenal
- Kenyataan bahwa sebagian besar perubahan kode dilakukan oleh insinyur tingkat ‘pemula’ yang baru bergabung kurang dari 6 bulan
- Sejumlah insinyur berpengalaman ‘old hand’ membantu menjaga kualitas, tetapi mereka memiliki keterbatasan karena beban kerja berlebih dan tanggung jawab informal
- Perusahaan lebih mengutamakan mobilitas tenaga kerja dan keterbacaan internal (legibility) daripada keahlian, dan ini adalah harga dari penurunan kualitas yang disengaja
- Pada akhirnya, terlepas dari kemampuan masing-masing insinyur, masalah struktural berupa bekerja cepat demi tenggat di sistem yang asing adalah akar penyebab kode buruk
Struktur yang Membuat Kode Buruk Muncul di Perusahaan Besar
- Perusahaan teknologi besar merekrut insinyur hebat dengan gaji tinggi, tetapi masa kerja mereka sering hanya 1–2 tahun
- Struktur kompensasi saham (share grant) yang baru sepenuhnya vested setelah 4 tahun membuat gaji efektif turun setengahnya setelah itu
- Ada refresh tahunan dalam beberapa kasus, tetapi tidak dijamin, sehingga insinyur memilih pindah kerja
- Bahkan jika menghitung perpindahan internal, jarang ada yang bertahan lebih dari 3 tahun di satu codebase
- Re-org terjadi setiap tahun, atau bahkan lebih sering
- Sementara itu, codebase sering dipertahankan lebih dari 10 tahun, sehingga kebanyakan insinyur selalu berada dalam proses ‘mempelajari’ sistem baru
- Akibatnya, sebagian besar perubahan kode dilakukan oleh pemula yang baru masuk kurang dari 6 bulan
Peran dan Batasan ‘Old Hand’
- Beberapa insinyur bertahan lama di sistem tertentu dan membangun keahlian yang mendalam
- Mereka dapat menemukan masalah lebih awal melalui code review
- Namun struktur ini bersifat informal dan tidak diinstitusikan
- Perusahaan kurang berminat mempertahankan keahlian jangka panjang, dan insinyur berpengalaman sering dipindahkan ke tim lain
- Insinyur berpengalaman selalu dibebani pekerjaan berlebih
- Tidak punya cukup waktu untuk meninjau semua perubahan secara langsung
- Jika output kerja mereka sendiri menurun, mereka justru berisiko dirugikan
Realitas Insinyur Produktif Rata-Rata
- Insinyur produktif rata-rata di perusahaan besar memiliki ciri-ciri berikut
- Cukup mampu untuk lolos standar rekrutmen, tetapi tidak akrab dengan codebase atau bahasa yang baru
- Bekerja sambil memenuhi tenggat yang saling tumpang tindih dari beberapa proyek sekaligus
- Akibatnya, mereka bekerja sebaik mungkin dalam lingkungan yang berorientasi jadwal, bukan kualitas
- Contoh: insinyur pemula memperbaiki bug di kode yang asing dengan solusi sementara, lalu insinyur berpengalaman meninjaunya secara singkat sebelum dirilis
- Beberapa tahun kemudian, kode itu ditemukan kembali dan orang bertanya, “mengapa kode seperti ini ditulis?”
Mengapa Perusahaan Mempertahankan Struktur Ini
- Perusahaan besar lebih mementingkan keterbacaan internal (legibility) daripada produktivitas
- Mereka lebih menyukai struktur yang membuat siapa mengerjakan apa terlihat jelas, dan memungkinkan pemindahan orang kapan saja
- Ini adalah pilihan sadar yang mengorbankan keahlian dan kualitas kode
- Mereka menerima hilangnya kemahiran demi mendapatkan fleksibilitas untuk merelokasi tenaga kerja dengan cepat saat masalah muncul
- Terutama ketika pivot cepat ke bidang baru seperti AI menjadi penting, strategi ini bekerja menguntungkan perusahaan
- Namun dalam lingkungan seperti ini, semakin banyak insinyur yang harus bekerja tergesa-gesa di sistem yang asing
Batasan Individu Insinyur dan Rekayasa ‘Murni/Tidak Murni’
- Insinyur individu tidak punya kekuatan untuk mengubah struktur ini
- Pada 2025, pusat kekuasaan telah bergeser dari insinyur ke manajemen
- Hal terbaik yang bisa dilakukan individu adalah menjadi ‘old hand’ di area tertentu dan menjaga kualitas seminimal mungkin
- Namun keterlibatan yang terlalu besar justru bisa membuat mereka dinilai berkinerja kurang (PIP)
- Tulisan ini mengajukan perbedaan antara rekayasa ‘murni (pure)’ dan ‘tidak murni (impure)’
- Rekayasa murni: berfokus pada proyek teknis yang independen (misalnya pengembangan bahasa pemrograman)
- Rekayasa tidak murni: lingkungan nyata yang berorientasi tenggat saat bekerja di sistem yang asing
- Sebagian besar insinyur di perusahaan besar berada dalam rekayasa tidak murni, dan dalam konteks ini kode buruk adalah produk sampingan yang tak terelakkan
- Jika sistem berjalan cukup baik, proyek dianggap berhasil
Kesimpulan: ‘Codebase Asing’ sebagai Penyebab Struktural
- Perusahaan besar memiliki kewenangan untuk memindahkan insinyur secara bebas, dan itu adalah pilihan perusahaan yang menerima hilangnya keahlian
- Tanggung jawab atas kode buruk bukan ada pada individu, melainkan pada struktur organisasi dan cara tenaga kerja dikelola
- Bahkan jika kemampuan semua insinyur dilipatgandakan, kesalahan di codebase yang asing akan tetap terjadi
- Akar masalahnya adalah “struktur di mana kebanyakan insinyur harus melakukan sebagian besar pekerjaannya pada kode yang tidak mereka kenal”
- Menunjukkan contoh kode buruk bisa membantu perbaikan, tetapi yang patut disalahkan bukan insinyurnya, melainkan sistemnya
5 komentar
Berdasarkan pengalaman saya, jika fondasi CS, khususnya PLT, kuat, pada akhirnya orang akan menulis kode yang relatif lebih baik di lingkungan apa pun.
Meski tidak punya pengetahuan yang luar biasa, orang yang setidaknya memahami prinsip-prinsip paling dasar akan menghasilkan kualitas kode yang lumayan jika diberi cukup waktu dan mengerjakan kode yang sudah familier. Kalau direfaktor sampai n kali, bahkan kode yang ditulis AI pun bisa terlihat cukup masuk akal.
Sebaliknya, ada juga banyak orang yang meski sudah 20 tahun berkarier, tetap hanya bisa menghasilkan spaghetti code, walau sudah lama berkutat dengan satu source code, dan bahkan tidak paham kenapa seharusnya tidak begitu.
Selama tidak mungkin diberi lingkungan yang sempurna serta waktu dan anggaran tanpa batas, ini terasa seperti pembahasan hampa yang tidak terlalu bermakna. Bukankah ini sama saja untuk profesi apa pun, di era mana pun?
Menulis kode yang lebih baik dalam sistem yang sama jelas merupakan kemampuan seorang engineer.
Akan bagus jika sistem disusun dengan cukup longgar dan fleksibel agar bisa memberikan kualitas yang baik. Dan tentu saja, dibandingkan dengan masa ketika rekayasa organisasi dan metodologi pengembangan belum semaju sekarang, rata-ratanya mungkin memang lebih demikian.
Namun, di mata saya, ini terdengar seperti orang yang ego-identitasnya sebagai engineer membesar, tetapi rasa tanggung jawabnya sebagai anggota organisasi kurang, lalu beralasan bahwa semua ini bukan salah dirinya melainkan kesalahan manajemen.
Apakah insinyur bangunan, desainer industri, dan animator tidak punya tenggat, serta dinilai hanya dari kreativitas dan kualitas, bukan produktivitas, sementara hanya programmer saja yang punya tenggat?
Jauh banget meleset semua.. soal kode buruk atau kode bagus itu omongan anak-anak junior, yang lebih penting adalah ada atau tidak senior yang benar-benar bisa merancang perangkat lunak dengan baik sesuai bidang industrinya..
Tulisan yang muncul di sini umumnya bisa jadi berasal dari lingkungan yang agak berbeda dibanding sebagian sudut pandang atau pengalaman di pasar SI domestik yang bahkan mengabaikan OCP.
Bagaimanapun juga, Linus Torvalds bukan junior...
Pendapat Hacker News
Saya sudah beberapa kali membaca tulisan orang ini, dan selalu ada rasa tidak nyaman yang tertinggal
Sekarang saya rasa saya tahu alasannya. Analisis tulisannya sendiri memang logis, tetapi di dasarnya tampak ada semacam nihilisme
Mungkin dia dulu seorang idealis, tetapi karena pengalaman buruk, kini mencoba menjelaskan bahwa ‘mempercayai sesuatu itu sia-sia’
Karena itu muncul pertanyaan seperti ini — mengapa perusahaan besar harus bertindak seperti ini, mengapa kode buruk menyiksa engineer, apakah perasaan itu benar-benar salah, ataukah ini akibat struktur ekonomi tempat kita hidup, atau justru tunduk pada kekuatan besar itulah yang disebut kedewasaan
Karena saya harus bertanggung jawab atas akibatnya.
Jadwal mundur karena saya harus memperbaiki kode berantakan buatan orang lain, dan akibatnya penilaian akhir tahun saya juga dipotong
Saya ditanya, “kenapa lama sekali?”, padahal itu karena saya harus mengorek tumpukan sampah untuk menemukan masalahnya
Selama bertahun-tahun saya berusaha membuat manajemen memahami masalah seperti ini, tetapi pada akhirnya rasanya seperti kerja Sisifus
Seperti arsitek yang frustrasi melihat bangunan asal-asalan, atau sutradara film yang tersiksa melihat film yang ceroboh, engineer yang baik mengejar hasil yang matang
Menurut saya, kedewasaan bukan berarti pasrah pada ketidakberdayaan, melainkan tetap berjuang sebisa mungkin
Menariknya, penulis disebut nihilis, tetapi gagasan bahwa ‘dunia tidak bisa dikendalikan’ itu sendiri sudah bersifat nihilistis
Dulu saya juga menganggap kode yang tidak sempurna sebagai kode buruk, tetapi setelah melewati beberapa perusahaan, sudut pandang saya berubah
Sekarang saya melihat bahwa selama tujuan bisnis terpenuhi dan standar kualitas minimum terlewati, itu sudah cukup baik
Pada akhirnya, hampir semua kode memang selalu punya ruang untuk diperbaiki
Saya bisa relate karena dia menggambarkan realitas pahit Staff+ engineering apa adanya
Klaim “lakukan saja yang perusahaan mau, meskipun itu tidak benar” memang sinis, tetapi menurut saya masih lebih baik daripada tergilas roda gigi perusahaan
Dia hanya tidak percaya pada idealisme Anda, dan itu tidak otomatis berarti nihilisme
Menurut saya masalahnya bukan masa kerja, melainkan soal motivasi
Ini mengingatkan pada dialog film Office Space: “kalau kerja keras pun tidak ada imbalannya, motivasi tidak akan muncul”
Tetapi manajemen lebih mementingkan hasil daripada kode yang baik
Karena mereka tidak bisa menilai nilai maintenance, pekerjaan itu jadi tidak dihargai
Pada akhirnya, orang yang merilis kode asal-asalanlah yang malah naik jabatan
Saya peduli pada tim dan kode, dan bekerja dengan teliti, tetapi pada akhirnya saya dinilai dengan metrik sederhana seperti jumlah PR
Tingkat kesulitan kode atau kontribusi terhadap tim diabaikan, dan hanya “angka yang terlihat” yang dianggap penting
Ironisnya, atasan yang menilai saya itu sendiri dipecat beberapa bulan kemudian
Ironisnya lagi, kalau saya cuek, mungkin saya tidak akan terluka oleh hal seperti ini
Perusahaan besar memperlakukan engineer sebagai sumber daya yang bisa diganti
Ini bukan semata soal efisiensi, melainkan strategi untuk memiringkan keseimbangan kekuasaan ke pihak manajemen
Tujuannya agar proyek inti tidak bergantung pada kelompok engineer tertentu
Mereka ingin semua pekerja bisa digantikan
Justru sering kali mereka berusaha mempertahankan engineer yang bagus
Artinya, budaya seperti ini bukan hanya masalah manajemen
Saya sering melihat kasus ketika sintaks dan struktur kodenya tampak sesuai teori, tetapi pendekatan dasarnya justru salah
Code review hanya fokus pada sintaks, sementara masalah bisnis atau kompleksitas tidak dibahas
Dalam jangka pendek mungkin terlihat baik-baik saja, tetapi dalam jangka panjang utang teknis akan meledak
Akibatnya, perdebatan kecil soal kualitas kode bisa menunda PR berhari-hari
Semua orang terobsesi hanya pada kebersihan kode di permukaan
Menilai validitas logis atau melihat gambaran besar itu sulit, dan sering kali reviewer juga tidak paham konteksnya
Jika seluruh organisasi tidak punya ruang untuk menerima feedback seperti ini, pada akhirnya mereka akan bergantung pada ‘sistem yang sekadar jalan’
Desain besar seharusnya ditinjau sebelum code review
Dengan kata lain, kita sedang mengotomatiskan biaya jangka panjang
Perusahaan besar tidak terlalu peduli pada kode itu sendiri
Kode hanyalah media yang membuat perusahaan bisa berjalan
Pada akhirnya yang penting bukan kodenya, melainkan prosesnya
Intinya adalah apakah ada prosedur untuk memulihkan sistem ketika sistem itu rusak
Semua industri membuat kompromi yang mirip ketika skalanya membesar
Bukan kesempurnaan, melainkan kualitas yang ‘cukup baik’ yang menghasilkan keuntungan
Seperti perbedaan antara kursi IKEA dan kursi Herman Miller, hanya saja batasannya berbeda
Kemampuan yang sesungguhnya adalah mengetahui di mana harus berkompromi
Struktur perusahaan besar memaksa engineer melakukan kompromi seperti ini
Engineer senior yang baik tidak menulis kode buruk sejak awal
Masalah sebenarnya adalah tekanan pada hasil jangka pendek dan kurangnya fondasi dasar
Penyebab yang sesungguhnya adalah melewatkan review atau tidak memikirkan arsitektur dengan cukup matang
Seperti digambarkan dalam komentar ini, di atas basis kode dengan jutaan baris hack yang menumpuk, sekeras apa pun usaha kita, hasilnya tidak bisa jadi bersih
Pada akhirnya rasanya seperti mengangkat satu piring penuh spaghetti sekaligus
Engineer senior selalu berada dalam dilema antara ‘melakukannya dengan benar’ dan ‘menyelesaikannya dengan cepat’
Basis kode yang kompleks tidak bisa dipahami dalam semalam, dan jika organisasi tidak menghargai akumulasi pengetahuan, kualitas akan memburuk
Sebaiknya pegawai baru diberi tugas dokumentasi atau perapian agar mereka bisa mempelajari struktur kode
Meski banyak hack lama dalam kode, kita tidak bisa menyentuhnya karena tidak boleh merusaknya
Sebagus apa pun desainnya, kalau fondasinya berdiri di atas pasir, semuanya akan runtuh
Kesimpulan penulis bahwa ‘readability lebih diprioritaskan daripada kualitas’ berarti semua proyek di perusahaan besar seharusnya wajib memakai alat analisis statis dan formatter otomatis
Tetapi kenyataannya tidak begitu
Penerapan alat seperti ini adalah keputusan manajer nonteknis, dan mereka tidak suka biaya jangka pendek
Pada akhirnya, jadwal rilis mengalahkan segalanya
Saat menjadi konsultan di sebuah perusahaan manufaktur besar, saya melihat ada pola pemodelan objek yang aneh di seluruh basis kode
Setelah ditelusuri, ternyata tim pengembang benar-benar salah paham terhadap konsep yang dimaksud perancang (blueprint–mold–product)
Ketika saya mengusulkan perbaikan, jawaban yang saya terima adalah “sudah terlambat”
Akibatnya, model yang salah itu bertahan lebih dari 10 tahun dan melahirkan utang teknis yang sangat besar
Statistik masa kerja yang pendek di perusahaan besar bisa menyesatkan
Itu hanya karena jumlah pegawai meningkat tajam, sehingga medianya terlihat pendek
Untuk akurat, yang harus dilihat sebenarnya adalah data orang yang keluar
Alasannya sederhana: dulu jumlah developer memang lebih sedikit