Nugroho Herucahyono — Co-Founder & CTO of Bukalapak
Kehidupan Seorang Programmer, Software Architecture, dan Technical Scalability
Published in
12 min readApr 9, 2020
Ikhtisar Utama
- Ungkapan “Programmers have no life” menurut saya sudah tidak relevan. Dulu memang benar, tetapi untuk sekarang sudah tidak lagi. Hal ini berkaitan dengan tingkat maturity dari industri ini.
- Buku yang dapat menjadi referensi untuk seorang programmer adalah “The Pragmatic Programmers” karya Andrew Hunt dan David Thomas.
- Meskipun mungkin anak kita nanti tidak ingin menjadi programmer, tetaplah penting untuk mengenalkan dunia programming kepada anak.
- Keberuntungan yang dialami oleh Bukalapak adalah masalah timing. Pada saat itu industri startup di Indonesia mulai berkembang dan juga penetrasi terhadap internet dan mobile cukup besar.
- Tantangan yang dihadapi dalam proses scale up adalah bagaimana menciptakan sebuah tim yang besar, namun secara linier tetap bisa mempertahankan produktivitas seperti pada saat tim masih kecil.
- Waktu yang tepat bagi tech startup untuk transisi dari monolitik ke microservices adalah ketika kita sudah mengalami masalah pada software development process, yang biasanya muncul ketika jumlah engineers sudah mencapai 50–100 orang.
- Saat ini Ruby adalah pemrograman yang paling banyak digunakan di Bukalapak. Selain itu, Bukalapak juga menggunakan Go (terutama untuk service yang sifatnya performance critical), Python (terutama untuk AI dan data), Java, dan Elixir.
- Faktor utama yang kita lihat dalam merekrut talent baru adalah kemampuan berlogika dan kecepatan belajar yang ia miliki.
- Leader harus bisa melakukan cost-benefit analysis, membandingkan antara nilai potensi kebutuhan bisnis yang bisa dicapai dengan benefit jika technical debt bisa diatasi.
- Idealnya sebuah fitur harus sudah selesai di-test satu minggu sebelum fitur tersebut di-launch.
- Meskipun terdapat jam kerja yang fleksible, anggota tim harus tetap menentukan waktu kerja inti untuk melakukan koordinasi secara langsung.
- Berbagi cerita dengan keluarga atau teman adalah salah satu cara yang dapat dilakukan untuk mengurangi beban yang ada.
- Hal lain yang bisa dilakukan ketika mengalami burnout adalah mengambil cuti untuk pulang kampung, bertemu dengan orang tua, dan melakukan hal-hal di luar pekerjaan.
Siapakah Nugroho Herucahyono?
00:00:45–00:02:20
- Nugroho Herucahyono (Xinuc) adalah Co-Founder Bukalapak dan Chief Technology Officer (CTO) Bukalapak.
- Alumni Teknik Informatika ITB, pernah menjadi SysAdmin ITB, dan memiliki coding skill di atas rata-rata.
- Aktif membangun komunitas Ruby.id, komunitas Ruby Indonesia.
- Sebelum di Bukalapak, Xinuc adalah CTO di Suitmedia, sebuah digital agency dengan spesialisasi di bidang pengembangan aplikasi web dan mobile.
Keseharian CTO Bukalapak
00:02:20–00:04:00
- Rutinitas kegiatan saya sebenarnya tidak jauh berbeda dengan rutinitas orang lain pada umumnya. Diawali dengan bangun pagi, mengantar anak sekolah, bermain bersama anak, lalu bekerja.
- Kegiatan yang saya lakukan ketika di kantor selalu berbeda setiap harinya, karena masalah yang dihadapi berbeda dan selalu unik.
- Biasanya, pada pagi hari saya lebih fokus pada hal-hal prioritas yang harus segera diselesaikan dan untuk siang hari diagendakan untuk melakukan meeting.
- Saat ini saya sudah tidak pernah begadang untuk masalah pekerjaan, mungkin begadang hanya untuk ‘me time’ seperti membaca buku.
Programmers Have No Life?
00:04:00–00:05:35
- Ungkapan “Programmers have no life” menurut saya sudah tidak relevan. Dulu memang benar, tetapi untuk sekarang sudah tidak lagi. Hal ini berkaitan dengan tingkat maturity dari industri ini.
- Dulu, ketika diberikan pekerjaan, seorang programmer memang tidak dapat memperkirakan waktu dengan baik sehingga terpaksa harus lembur. Namun untuk saat ini, metodologi dan practice untuk software development sudah lebih mature, sehingga engineer dapat memperkirakan waktu lebih akurat dalam mengerjakan suatu pekerjaan.
- Jika engineer sering lembur berarti ada yang salah dengan manajemennya karena practice dan tools yang kita miliki sudah mature.
Coding Sebagai Hobi
00:05:40–00:12:55
- Saat ini saya sedang tertarik membaca buku tentang history, ekonomi, dan sedang mencoba membaca novel. Saya tertarik untuk membaca fiksi karena saya pribadi tidak mengerti sama sekali tentang bidang tersebut, sehingga saya berkeinginan untuk mengetahui lebih jauh tentang bidang tersebut.
- Ternyata dengan membaca buku jenis sejarah dan fiksi dapat membantu saya dalam memahami tentang peristiwa-peristiwa yang terjadi baik di Indonesia maupun dunia.
- Buku sejarah yang menarik untuk dibaca adalah buku klasik seperti “The Origin of Species” karya Charles Darwin.
- Buku yang dapat menjadi referensi untuk seorang programmer adalah “The Pragmatic Programmers” karya Andrew Hunt dan David Thomas.
- Ada buku yang cukup berpengaruh bagi saya tetapi tidak cukup bagus untuk direkomendasikan ke orang lain, yakni “Why’s (Poignant) Guide to Ruby”, tentang bahasa pemrograman Ruby.
- Hacker News merupakan referensi utama yang saya gunakan untuk mencari berita terkait dengan teknologi.
- Saya juga menggunakan GitHub Explore untuk melihat trend teknologi atau project baru yang tengah berkembang.
- Saat ini coding hanya sebatas hobi saja dan sudah tidak berkaitan dengan pekerjaan.
- Terakhir melakukan project yang berkenaan dengan coding sekitar 1.5 tahun yang lalu, yakni ketika mengembangkan sebuah search engine semacam Elasticsearch.
- Ketika itu ingin mencoba membuat distributed storage, tetapi di tengah perjalanan menyadari jika ide ini kurang bagus untuk jadi side project karena membutuhkan effort yang sangat besar.
Mulai Perkenalkan Anak dengan Dunia Pemrograman Melalui Games
00:13:08–00:15:14
- Anak saya yang berumur 3 tahun sudah mulai saya perkenalkan dengan dunia programming melalui game algoritmik seperti CodeRunner, namun masih belum memperkenalkannya secara utuh.
- Meskipun mungkin anak kita nanti tidak ingin menjadi programmer, tetaplah penting untuk mengenalkan dunia programming kepada anak.
- Jika saya diberi kesempatan untuk menentukan kurikulum, saya ingin programming masuk ke dalam kurikulum dasar SD/SMP.
- Logika pemrograman merupakan semacam literasi, atau dapat dianalogikan seperti bahasa Inggris. Ketika seseorang dapat berbahasa Inggris maka ia dapat membaca buku atau resource dari internet yang menggunakan bahasa Inggris. Begitu pula ketika anak dapat menguasai logika pemrograman maka ia dapat mengetahui bagaimana cara kerja dari suatu sistem.
- Generasi di bawah kita akan semakin erat dengan software atau dunia teknologi. Untuk itu penting bagi mereka mengetahui cara kerja dari alat yang mereka pakai, agar mereka tidak menganggap bahwa alat tersebut dapat bekerja karena adanya magic.
Orang yang Sukses Itu Orang yang Berguna Bagi Banyak Orang
00:15:20–00:21:02
- Perusahaan yang sukses adalah perusahaan yang berguna bagi banyak orang.
- Faktor keberuntungan merupakan faktor yang membantu Bukalapak untuk sukses seperti sekarang ini.
- Keberuntungan yang dialami oleh Bukalapak adalah masalah timing. Pada saat itu industri startup di Indonesia mulai berkembang dan juga penetrasi terhadap internet dan mobile cukup besar.
- Ketika mengembangkan Bukalapak kita sudah mempunyai role model yang ada di luar negeri seperti Amazon dan eBay, sehingga kita melihat peluang bahwa di Indonesia pasti membutuhkan hal yang sama.
- “Luck is preparation meets opportunities.”
- Sebenarnya Bukalapak bukan produk pertama yang kita buat. Sejak saat kuliah saya dan Zaky sudah beberapa kali membuat project dan beberapa produk seperti SMS Gateway.
- Secara teknis, persiapan awal yang saya lakukan bersama dengan tim adalah mengembangkan Bukalapak dengan menggunakan bahasa pemrograman Ruby. Ketika itu kita melaunching dan hosting menggunakan 1 virtual private server (VPS) dengan biaya hanya sekitar Rp. 250.000 per bulan.
- Pada saat awal mengembangkan Bukalapak, sebelum memiliki monitoring tools, kita mencoba dengan melakukan trial and error.
- Perbedaan tantangan yang dihadapi dalam proses mengembangkan Bukalapak antara dulu dan sekarang adalah berkaitan dengan ukuran scope dan organisasi perusahaan.
- Seiring dengan peningkatan traffic, muncul scalability problem. Sementara itu, dari sisi organisasi perusahaan, Bukalapak harus merancang arsitektur tim yang terus scaling up dengan jumlah anggota tim yang besar.
Tantangan Saat Scale Up Organisasi
00:21:05–00:23:10
- Tantangan yang dihadapi dalam proses scale up adalah bagaimana menciptakan sebuah tim yang besar, namun secara linier tetap bisa mempertahankan produktivitas seperti pada saat tim masih kecil.
- Banyak kendala yang menyebabkan performance tim tersebut tidak linear, salah satunya adalah bentuk organisasinya sendiri.
- Ketika tim sudah mulai besar, kita tidak bisa secara otomatis dapat menambah jumlah setiap posisi seperti frontend, backend, dan UI/UX designer, tetapi kita harus melakukan reorganisasi secara utuh dalam struktur organisasinya.
- Dari sisi teknologi, jika awalnya kita hanya memiliki 1 code base yang seluruhnya commit di satu base tersebut, kemudian ketika tim kita sudah berkembang, maka tidak bisa bertahan dengan 1 base itu lagi karena hal ini akan menyebabkan bottleneck.
- Ketika tim berkembang menjadi lebih besar tentu akan ada communication cost, sehingga kita harus bisa mendesain organisasi kita untuk tetap scalable meskipun terdapat communication cost.
- Scalable didefinisikan seperti ketika kita menambah resource baru maka hasilnya akan naik secara linier.
- Tips untuk CTO yang saat ini dalam proses scale up organisasinya: Reorganisasi tim dengan menyesuaikan kebutuhan.
Struktur Organisasi di Bukalapak
00:23:10-00:28:30
- Di Bukalapak terdapat unit terkecil yang disebut Squad. Tim Squad memiliki resource yang lengkap sesuai dengan kebutuhannya seperti product manager, engineers, UI/UX designer & researcher, marketing dan sebagainya, sehingga tim ini dapat berjalan secara otomatis tanpa membutuhkan koordinasi dengan tim yang lain ketika dibutuhkan.
- Dari setiap Squad kita kelompokkan lagi menjadi bisnis unit yang kita sebut dengan Tribe. Dalan bisnis unit ini memiliki Business Leader dan tidak terbatas pada tim product development saja, tetapi ada kemungkinan diisi oleh tim operasional seperti customer services, marketing, dan sebagainya.
- Sebagai contoh, Squad Search. Maka contoh Tribe-nya adalah Shopping Experience. Dalam tim ini bertanggung jawab terkait dengan end-to-end shopping experience mulai dari menu home, search, product pages, recommendation, check out, dan sebagainya.
- Di Bukalapak juga terdapat sistem metriks di mana anggota dari Squad dapat melakukan laporan, baik secara fungsional maupun secara struktural. Contohnya adalah Engineer, secara struktural ia mempunyai Engineering Manager (EM), tetapi secara fungsional Engineer ini berada dalam satu Squad sehingga ia juga bertanggung jawab melakukan report kepada Business Leader dan Engineering Manager.
- Kemudian Engineering Manager dapat melakukan report ke Vice President (VP) Engineering dan juga bisa ke VP Marketing karena Tribe tersebut mengelola scope pemasaran. Di Bukalapak, Engineering Manager juga terlibat dalam operasional squad dan dia memimpin beberapa Squad.
- Arrangement seat yang diterapkan di Bukalapak adalah berkumpul sesuai dengan Squad nya masing-masing.
- Laporan one-on-one yang dilakukan kepada Engineering Manager menyesuaikan dengan EM-nya masing-masing dan biasanya dilakukan setiap bulan.
- Sementara itu, untuk assignment day-to-day di Squad dikerjakan oleh Engineering Squad Lead (ESL).
- Dalam Bukalapak juga terdapat Scrum Master yang bertanggung jawab untuk memastikan bahwa scrum dilakukan secara benar di dalam suatu Squad.
Masa Transisi ke Arsitektur Microservices
00:28:31–00:33:30
- Waktu yang tepat bagi tech startup untuk transisi dari monolitik ke microservices adalah ketika kita sudah mengalami masalah pada software development process, yang biasanya muncul ketika jumlah engineers sudah mencapai 50–100 orang.
- Web application seperti Bukalapak sebenarnya memiliki karakteristik paralel, sehingga bisa di-scale up dengan mudah dengan menambah application instance. Jika kita tambah resource, aplikasi bisa meng-handle lebih banyak request.
- Masalah scalability biasanya pertama kali muncul adalah terkait database. Database biasanya akan mengalami technical issue ketika sistem kita business logic yang sangat kompleks dan harus menerima request dalam jumlah yang besar.
- Masalah scalability yang lain biasanya terkait software development life cycle (SDLC). Ketika kita memiliki puluhan tim yang commit di repository yang sama, kita harus menerapkan banyak prosedur supaya tidak saling bertabrakan dan saling merusak.
- Contoh solusi untuk masalah scalability terkait SDLC ini antara lain dengan menerapkan deployment train, membuat bot yang bisa melakukan merging secara otomatis.
- Namun, jika aplikasinya masih monolitik, hal tersebut bisa menghambat proses ketika melakukan deployment, waktu yang diperlukan bisa menjadi beberapa jam atau bahkan beberapa hari dikarenakan antrian deployment yang sangat panjang.
- Awalnya, bahasa pemrograman yang digunakan untuk masing-masing service di Bukalapak dibebaskan namun pada akhirnya kita tentukan teknologi yang kita gunakan.
Bahasa Pemrograman yang Dipakai di Bukalapak
00:33:30–00:36:12
- Saat ini Ruby adalah pemrograman yang paling banyak digunakan di Bukalapak. Selain itu, Bukalapak juga menggunakan Go (terutama untuk service yang sifatnya performance critical), Python (terutama untuk AI dan data), Java, dan Elixir.
- Ketika bahasa pemrograman tidak dibatasi, ternyata justru semakin banyak isu yang muncul. Karena ketika terlalu banyak teknologi yang digunakan, maka banyak hal yang harus di-support.
- Supaya suatu service dapat kita deploy, ada beberapa standar yang harus dipenuhi seperti monitoring, health checking, instrumentation dan hal ini akan sulit dilakukan ketika harus support banyak teknologi.
- Saat ini framework dan library yang digunakan di Bukalapak pun sudah distandarisasi tergantung dengan masalah yang dihadapi, dan semuanya didokumentasikan di sebuah knowledge base.
Pertimbangan Utama Bukalapak dalam Merekrut Engineer
00:36:12–00:37:20
- Ketika kita merekrut engineer baru jarang kita melihat background teknologi yang ia kuasai atau gunakan.
- Faktor utama yang kita lihat dalam merekrut talent baru adalah kemampuan berlogika dan kecepatan belajar yang ia miliki.
- Setelah talent tersebut masuk di Bukalapak, talent akan mengikuti onboarding yang di dalamnya terdapat kurikulum yang akan mempelajari beberapa hal, termasuk teknologi apa yang akan ia gunakan dengan menyesuaikan posisi Squad yang akan ditempatinya.
Kebutuhan Bisnis vs. Technical Debt
00:37:20–00:41:16
- Ketika dihadapkan pada dilema antara bisnis harus scale up dan menghadapi technical debt di waktu yang bersamaan, leader harus mengetahui goals yang akan kita capai terlebih dahulu.
- Leader harus bisa melakukan cost-benefit analysis, membandingkan antara nilai potensi kebutuhan bisnis yang bisa dicapai dengan benefit jika technical debt bisa diatasi.
- Salah satu cara untuk mengukur benefit jika technical debt bisa diatasi adalah dengan menghitung opportunity cost jika technical debt tersebut tidak bisa diselesaikan. Contohnya sistem yang tidak reliable atau development time yang lebih lama akan menyebabkan cost secara tidak langsung.
- Ketika menghadapi dilema di atas, alternatif solusi yang akan dipilih biasanya ditentukan dari analisis cost benefit dan proses negosiasi antar tim yang terlibat.
- Saat ini di Bukalapak, proses negosiasi antara kebutuhan bisnis vs. technical debt tidak harus melibatkan CTO dan C-Level lainnya karena organisasinya sudah mature. Namun, dulu proses negosiasi dan pengawasan sering dilakukan oleh semua C-Level, contohnya ketika ada campaign besar seperti Harbolnas (hari belanja online nasional).
Pentingnya Infrastruktur dan Testing untuk Menjamin Reliability
00:41:25–00:44:40
- Untuk mencegah atau mengurangi isu-isu teknis yang muncul ketika launching, Bukalapak telah memiliki infrastruktur dan standard operating procedures (SOP) untuk testing yang sudah baik, termasuk load testing dan stress testing.
- Ketika terdapat event besar seperti Harbolnas, Bukalapak akan melakukan analisis terhadap service terkait, lalu melakukan stress testing. Jika sistem belum bisa menerima load yang diperkirakan, maka kita akan mencari tahu bottleneck nya di mana dan bagian mana yang harus kita scale up lagi.
- Selain itu, sebelum melakukan launching suatu fitur, Bukalapak akan melakukan security testing dan usability testing secara rutin.
- Sebelum meluncurkan suatu fitur, kita harus menyediakan waktu yang cukup untuk dapat melihat case apa saja yang berpotensi memiliki kelemahan.
- Idealnya sebuah fitur harus sudah selesai di-test satu minggu sebelum fitur tersebut di-launch.
Cara Bukalapak Menjamin Keamanan Transaksi
00:44:40-00:48:45
- Untuk menjamin keamanan transaksi dalam Bukalapak, terdapat dua tim security engineer yakni Red Team yang bertanggung jawab dalam mencari bug dan Blue Team yang bertanggung jawab untuk monitoring atau melakukan langkah-langkah defensif.
- Di Bukalapak juga terdapat bounty program yakni sebuah program apresiasi yang diberikan oleh Bukalapak kepada seseorang yang berhasil menemukan bug. Sebelum memiliki tim security engineers internal seperti sekarang ini, Bukalapak memang lebih mengandalkan bounty program. Namun seiring dengan perkembangan Bukalapak, program ini sudah mulai berkurang karena sudah dapat diselesaikan oleh tim security engineer Bukalapak.
- Yang dilakukan Bukalapak ketika terjadi security issue adalah dengan melakukan security audit secara keseluruhan, serta melakukan berbagai perbaikan seperti improvement teknologi, development practice, dan bahkan physical security.
- Hal yang dilakukan ketika melakukan risk assessment setelah menghadapi security problem adalah dengan melakukan kerjasama yang melibatkan pihak ketiga bersama tim internal Bukalapak.
- Saat ini, Bukalapak secara rutin melakukan risk assessment seperti penetration testing setiap 6 bulan sekali.
Tantangan dalam Menciptakan Fleksibilitas Kerja yang Efektif
00:48:50–00:55:18
- Supaya lebih mendukung suasana kerja yang nyaman dan produktif, engineers perlu memiliki kemampuan komunikasi yang baik dan tingkat kedewasaan dalam pengendalian diri.
- Komunikasi yang dilakukan dengan bertemu langsung biasanya jauh lebih efektif dibandingkan dengan chat atau video call.
- Meskipun terdapat jam kerja yang fleksible, anggota tim harus tetap menentukan waktu kerja inti untuk melakukan koordinasi secara langsung.
- Tingkat kedewasaan dalam pengendalian diri termasuk salah satu kompetensi yang harus dicapai oleh engineer dalam proses promosi jabatan ke level selanjutnya.
- Di Bukalapak, fleksibilitas untuk remote working diberikan secara terbatas untuk orang-orang yang sudah dipercaya karena tidak semua orang bisa bekerja remote secara efektif.
- Engineer yang bisa bekerja remote pun harus memiliki kesepakatan dengan anggota tim yang lain terkait available hours supaya tetap bisa melakukan koordinasi langsung.
Cuti adalah Salah Satu Cara ketika Menghadapi Burnout
00:55:19–01:03:56
- Selama sepuluh tahun terakhir, saya pernah mengalami 3 sampai 4 kali kelelahan bekerja (burnout).
- Burnout biasanya terjadi akibat faktor eksternal seperti tekanan dalam pekerjaan yang terlalu tinggi, atau faktor internal seperti masalah pribadi.
- Saat kita mengalami burnout, produktivitas biasanya akan menurun, dan kita harus mencari treatment yang tepat supaya bisa keluar dari kondisi tersebut.
- Berbagi cerita dengan keluarga atau teman adalah salah satu cara yang dapat dilakukan untuk mengurangi beban yang ada.
- Hal lain yang bisa dilakukan ketika mengalami burnout adalah mengambil cuti untuk pulang kampung, bertemu dengan orang tua, dan melakukan hal-hal di luar pekerjaan.
- Engineer harus memiliki determinasi dan ketekunan dalam mengerjakan produknya. Intinya adalah jangan mudah untuk menyerah.
- Kunci agar tidak mudah menyerah adalah dengan menyenangi apa yang kita lakukan dan percaya bahwa apa yang kita lakukan saat ini adalah hal yang penting untuk kita di masa depan.
- Berusahalah untuk selalu ingin tahu dan luangkan waktu untuk membaca buku sebanyak-banyaknya.
Nugroho Herucahyono: “Keep creating, selalu berkarya, dan jangan pernah berhenti.”
The Spectrum Talks adalah podcast yang membagikan berbagai wawasan tentang bisnis, teknologi, dan kewirausahaan. Podcast ini dipersembahkan oleh Suitmedia, dipandu oleh Anggriawan Sugianto, serta tersedia di Spotify, Apple Podcasts, dan Google Podcasts.