12.4 Memotong Pekerjaan Menjadi Irisan Vertikal

Anda sudah membaca codebase. Anda sudah menelusuri alur utama. Anda sudah belajar dari log dan insiden production. Sekarang Anda tahu persis apa yang perlu diubah. Masalahnya: perubahan itu besar. Terlalu besar untuk dikerjakan sekaligus.

Inilah titik di mana banyak engineer macet. Mereka punya gambaran besar yang jelas, tetapi tidak tahu harus mulai dari mana. Akhirnya mereka membuka file yang paling nyaman, mengerjakan satu layer secara horizontal—misalnya semua model data dulu, lalu semua service, lalu semua controller—dan baru menyadari di minggu ketiga bahwa tidak ada satu pun potongan yang bisa diuji atau menunjukkan hasil nyata.

Senior engineer tidak bekerja seperti itu. Ia memotong pekerjaan secara vertikal.

Perbedaan antara kedua pendekatan ini dapat dilihat dalam diagram berikut.

flowchart TD subgraph Horizontal H1[Model Data] --> H2[Service Layer] H2 --> H3[Controller] H3 --> H4[Belum bisa diuji] end subgraph Vertikal V1[Irisan 1: Fitur A] --> V2[End-to-end] V2 --> V3[Bisa diverifikasi] V1 --> V4[Irisan 2: Fitur B] V4 --> V5[End-to-end] V5 --> V6[Bisa diverifikasi] end Horizontal -->|Lama, tanpa value| H4 Vertikal -->|Cepat, value nyata| V3

Apa maksudnya vertikal? Sebuah irisan vertikal adalah potongan kecil yang menembus semua layer sistem: dari antarmuka pengguna atau API, masuk ke logika bisnis, menyentuh data, dan menghasilkan sesuatu yang nyata. Bukan setengah jadi. Bukan kode yang hanya bisa dijalankan minggu depan. Sesuatu yang bisa diverifikasi sekarang.

Bayangkan Anda perlu menambahkan fitur riwayat transaksi ke sistem pembayaran. Pendekatan horizontal akan mengerjakan: pertama skema database untuk semua jenis transaksi, lalu service layer untuk semua operasi, lalu controller untuk semua endpoint. Seminggu kemudian Anda punya banyak kode tetapi belum bisa menunjukkan satu pun transaksi yang tampil di layar.

Sebagai gambaran konkret, berikut adalah perintah untuk membuat dan menguji irisan vertikal sederhana yang menampilkan daftar transaksi hari ini:

# Membuat endpoint sederhana untuk satu irisan vertikal
echo 'app.get("/transactions/today", (req, res) => { res.json({count: 5}) })' > server.js
# Menjalankan dan menguji
node server.js &
curl http://localhost:3000/transactions/today

Pendekatan vertikal memilih satu irisan kecil: misalnya menampilkan daftar transaksi hari ini untuk satu pengguna. Anda buat endpoint sederhana, service minimal, query yang langsung bekerja. Dalam setengah hari, ada sesuatu yang bisa dijalankan, diuji, dan diperlihatkan ke tim. Itu value nyata.

Senior engineer memilih irisan pertamanya dengan hati-hati. Ia mencari irisan yang aman—tidak menyentuh bagian sistem yang rapuh atau belum dipahami. Ia juga mencari irisan yang memberikan pembelajaran cepat: apakah asumsinya tentang struktur data benar? Apakah service yang dipanggil merespons seperti yang diharapkan? Apakah ada kejutan di layer yang tidak terlihat dari dokumen?

Setiap irisan vertikal adalah eksperimen kecil. Setiap irisan mengonfirmasi atau menggugurkan asumsi. Jika irisan pertama berhasil, irisan berikutnya bisa lebih berani. Jika gagal, kerugiannya kecil karena hanya satu potongan yang perlu diperbaiki.

Yang menarik, pendekatan ini juga mengubah cara Anda berdiskusi dengan tim. Anda tidak lagi bilang "saya sedang mengerjakan service layer". Anda bilang "saya sedang mengerjakan irisan yang menampilkan transaksi hari ini, besok saya akan menunjukkan hasilnya". Tim bisa melihat, mengomentari, dan mengoreksi arah sebelum Anda terlalu jauh.

Inilah yang membedakan senior engineer: ia tidak menunggu semua layer selesai untuk menunjukkan hasil. Ia memotong pekerjaan menjadi irisan-irisan kecil yang masing-masing berdiri sendiri, menghasilkan value, dan bisa diverifikasi. Setiap irisan adalah bukti bahwa sistem bergerak ke arah yang benar.

Setelah irisan pertama selesai, pertanyaan berikutnya adalah: irisan mana yang harus dikerjakan selanjutnya? Di sinilah senior engineer tidak sekadar memprioritaskan berdasarkan urutan tampilan atau kemudahan. Ia menyusun urutan kerja yang cerdas—fondasi sebelum fitur, mitigasi sebelum ekspansi, pembelajaran sebelum komitmen besar.