12.1 Dari Dokumen ke Codebase
Bayangkan Anda baru saja bergabung dengan tim yang sudah berjalan setahun. Di tangan Anda ada dokumen solution architecture setebal tiga puluh halaman: diagram urutan, diagram komponen, keputusan desain, trade-off yang sudah diambil. Semua terlihat rapi, terstruktur, dan meyakinkan. Lalu Anda membuka repository utama. Yang Anda temukan adalah dua belas folder, enam file konfigurasi, tiga file docker-compose, dan seribu baris kode yang tidak persis seperti diagram.
Inilah momen pertama yang membedakan junior dari senior. Junior akan bertanya, “Dokumen ini sudah tidak relevan, ya?” Senior akan duduk tenang dan mulai membaca codebase.
Dokumen solusi bukanlah cetak biru yang harus diikuti persis. Ia adalah rekaman keputusan pada satu titik waktu. Saat kode mulai ditulis, realitas masuk: dependency library ternyata tidak kompatibel, performa query tidak sesuai ekspektasi, atau kebutuhan bisnis berubah di tengah sprint. Semua itu meninggalkan jejak di kode. Senior engineer tahu bahwa satu-satunya sumber kebenaran yang hidup adalah codebase itu sendiri.
Langkah pertama bukan membaca semua file. Itu tidak efisien dan tidak akan selesai. Senior mulai dengan struktur repository. Ia melihat folder mana yang menjadi entry point, mana yang berisi business logic, mana yang menjadi adapter untuk sistem luar. Ia mencari file konfigurasi utama: environment variable, dependency injection, routing. Ia membuka satu file test untuk melihat bagaimana tim ini menulis pengujian. Semua ini dilakukan bukan untuk menghafal, tetapi untuk membangun peta mental.
Mulailah dengan perintah sederhana ini untuk melihat gambaran besar repository:
# Melihat struktur folder utama (maksimal 2 level)
find . -maxdepth 2 -type d | head -20
# Melihat file konfigurasi utama
ls -la *.yml *.yaml *.json *.env 2>/dev/null
# Melihat entry point aplikasi
grep -r "main" --include="*.go" --include="*.py" --include="*.js" -l
Setelah struktur, ia membaca service boundary. Service mana yang menjadi core, mana yang menjadi infrastruktur, mana yang menjadi integrasi. Ia tidak perlu membaca semua implementasi. Cukup antarmuka, kontrak, dan bagaimana service-service itu saling memanggil. Dari sini ia bisa melihat apakah arsitektur yang dirancang di dokumen benar-benar dijalankan, atau sudah menyimpang.
Dependency graph adalah lapisan berikutnya. Senior membuka file package manager: pom.xml, package.json, go.mod, atau Cargo.toml. Ia membaca library apa saja yang digunakan, versi mana, dan apakah ada dependency yang sudah usang atau memiliki kerentanan. Ia juga mencari dependency yang tidak eksplisit: library yang diimpor tetapi tidak dipakai, atau library yang dipakai tetapi tidak tercatat. Ini penting karena dependency yang tidak terkelola adalah sumber masalah diam-diam.
Konfigurasi dan environment adalah lapisan terakhir yang tidak boleh dilewati. Senior membaca file konfigurasi untuk setiap environment: development, staging, production. Ia mencari perbedaan yang mencurigakan: apakah ada konfigurasi yang hanya ada di production tetapi tidak di staging? Apakah ada secret yang hardcode? Apakah ada feature flag yang tidak konsisten? Semua ini memberitahu dia seberapa siap sistem ini untuk perubahan.
Proses membaca codebase ini bukan kegiatan satu kali. Ia adalah kebiasaan yang dilakukan setiap kali senior masuk ke konteks baru: fitur baru, modul baru, atau bahkan hanya code review. Semakin sering dilakukan, semakin cepat peta mental terbentuk. Dan semakin cepat peta mental terbentuk, semakin akurat keputusan engineering yang bisa diambil.
Setelah Anda membaca codebase, Anda tidak lagi bergantung pada dokumen. Anda punya gambaran nyata tentang bagaimana sistem bekerja, di mana titik lemahnya, dan bagian mana yang perlu disentuh dengan hati-hati. Dari sini Anda siap melangkah ke langkah berikutnya: membaca alur, bukan sekadar file.