Pecat software developer dan ganti dengan buruh pabrik dan kuli bangunan

Certainty is a form of hiding. It is a way of drowning out our fear, but it’s also a surefire way to fail to see what’s really happening around us.
— Seth Godin

Another birthday means another reflection for me. Ketika kita bertambah tua, kita akan semakin banyak bertemu dengan orang-orang baru. Dan pertemuan saya dengan sekelompok orang baru-baru ini membuat saya semakin menyadari kenapa software development adalah bidang pekerjaan yang sulit dimengerti bahkan sulit dijelaskan lewat buku, ilustrasi atau metafora sekalipun. Hingga hari ini di Indonesia masih banyak manajer dan pimpinan perusahaan yang memandang software development seperti pekerjaan konstruksi bangunan atau pekerjaan di factory floor.

Arun: So isn’t the goal of Scrum to maximise software developers’ productivity?
Saya: No.
A: Then what do I tell my CEO if he asks how to maximise software developers’ productivity with Scrum?
S: Tell him that Scrum is not for micro-management.

Begitulah kira-kira percakapan dengan salah satu manajer di akhir sesi sebuah training. Dalam hati saya berpikir: “sh*t, di tahun 2016 ini masih ada saja manajer yang memiliki ultimate goal untuk memaksimalkan produktifitas software developer”. Apa saja yang mereka lakukan selama 2 dekade belakangan? Mereka tidak menyadari kalau perubahan di abad 21 berlangsung sangat cepat dan telah membiarkan dirinya terperangkap di dalam kubangan cara berpikir Taylorism dari abad 19.

Metodologi software development ortodoks yang diberlakukan di mayoritas perusahaan di Indonesia menempatkan seolah-olah software development sama seperti pekerjaan lini pabrik atau proyek konstruksi bangunan. Oleh karena metodologi ortodoks ini, manajer-manajer di Indonesia masih memandang software developer tidak lebih dari kuli bangunan atau buruh pabrik. Kalau memang software development adalah pekerjaan prediktif seperti di pabrik atau di proyek konstruksi bangunan kenapa manajemen tidak pecat saja semua software developer di perusahaannya dan diganti dengan buruh pabrik dan kuli bangunan?! Kalau tidak berani melakukan hal tersebut berarti manajemen dan pimpinan perusahaan yang harus merubah cara pandangnya terhadap software development.

In preparing for battle I have always found that plans are useless, but planning is indispensable.
— Dwight D. Eisenhower

Software development adalah pekerjaan yang memiliki banyak ketidak-pastian dan sulit diprediksi. Hal ini bukan karena orang-orang software development itu bodoh tetapi karena mereka adalah manusia. Secara umum manusia sangat buruk dalam memprediksi masa depan. We should not try harder in predicting, we should find a better way. Seperti kata Jenderal Eisenhower: plans are useless, but planning is indispensable.

Paradigma pabrik vs Paradigma Agile

Pemahaman yang benar mengenai software development akan membawa manajer-manajer ke cara mengelola software developer dengan benar. Butuh keterbukaan hati dan pikiran dari manajemen dan pimpinan perusahaan untuk dapat memahami sifat pekerjaan software development yang memiliki banyak ketidak-pastian.

1. Software development adalah pekerjaan inovatif

Software developers are not paid to write code, they are paid to deliver value.
— Peter Gfader

Kalau software developer digaji untuk kode yang mereka tulis berarti mereka masih dipandang tidak ada bedanya dengan buruh pabrik dan kuli bangunan. Software developer adalah seorang inovator yang menciptakan solusi untuk masalah yang dihadapi pengguna dalam bentuk software. Di waktu tertentu, software developer juga berlaku sebagai konsultan untuk pengguna.

Inovasi adalah sebuah proses yang tidak bisa diprediksi. Inovasi adalah sebuah pekerjaan yang melibatkan intelejensia. Agar software developer dapat berpikir dengan jernih untuk dapat berinovasi, otak mereka tidak bisa berada dalam tekanan. Under pressure to work harder, software developers will deliver low quality software. Low quality software menyebabkan software memiliki nilai rendah di mata pengguna.

Anyone who has never made a mistake has never tried anything new.
— Albert Einstein

Berbeda dengan akuntansi, software development adalah sebuah industri yang selalu berkembang dengan cepat. Bahkan kecepatan perubahan ini meningkat secara eksponensial setiap harinya. Software developers keep on learning to keep themselves up to date with the latest technology and the job market.

Kalau kita tidak pernah meningkatkan produktifitas dokter kenapa kita masih terobsesi untuk meningkatkan produktifitas software developer? Kalau kita tidak pernah mengharapkan prediktabilitas dari dokter kenapa kita masih mengharapkan prediktabilitas dari software developer? Karena kita masih memandang software developer sebagai buruh pabrik dan kuli bangunan. Software developers are learners not technicians. Pekerjaan inovatif memerlukan waktu untuk belajar, berpikir dengan jernih dan bereksperimen. Sama seperti eksperimen yang dilakukan oleh peneliti yang bekerja di dalam laboratorium, dalam pekerjaan inovatif seperti software development pembelajaran dan eksperimen juga memiliki value.

Software developers membuat eksperimen kecil untuk membuktikan hipotesanya. Sama seperti ahli farmasi yang bekerja di laboratorium, software developer akan menulis kode dalam skala kecil, mengujinya, membersihkannya dan tidak jarang membuangnya bila mereka anggap kode tersebut tidak sesuai harapan mereka. Namun berbeda dengan ahli farmasi, proses eksperimen yang dilakukan oleh software developer tidak memakan biaya untuk material apapun.

2. Pengguna tidak tahu apa yang mereka inginkan

If you’re certain, you’re probably not prepared for the unexpected, and sooner or later, you’re going to be badly surprised.
— Seth Godin

It is unfair to ask for predictability when you don’t know what you actually want. Requirement yang tidak jelas dalam konteks software development itu lumrah karena software bersifat intangible dan pengguna belum pernah melihat fitur yang diinginkannya oleh karena itu mereka sulit mengartikulasikannya. Fitur yang belum pernah dilihat sebelumnya oleh pengguna adalah sebuah tanda adanya inovasi.

Selain karena ada inovasi pengguna juga tidak dapat memprediksi dua faktor eksternal yang tidak berada dalam kendali mereka yakni: kompetitor dan pemerintah. Walaupun perubahan dapat mengganggu rencana awal namun perubahan di dalam software perlu dilakukan agar perusahaan tetap kompetitif dan taat terhadap peraturan dari pemerintah. Perubahan di dalam software ini juga tidak secepat mengucapkan bim salabim. Kalau kompetitor dan pemerintah bisa kita perintah untuk tidak berubah sepanjang software development maka software development adalah pekerjaan yang prediktif.

Sebagai orang awam sangat wajar bila pengguna tidak tahu detail fitur yang ia inginkan. Untuk mengatasi masalah ini tidak jarang pengguna diwakili oleh seorang Product Owner atau Product Champion yang dipandang sebagai the voice of the user.

Product Owner memiliki visi dan engaged dengan software developer sepanjang software development untuk mengendalikan ketidak-pastian yang terjadi secara kolaboratif. Product Owner bekerja bersama software developer untuk meninjau value dari software dan progress software development itu sendiri.

Feedback Form at Changi Airport

Software delivery dilakukan dalam skala kecil agar product owner mendapatkan feedback mengenai seberapa jauh software yang telah dihantarkan oleh software developer dari bentuk yang dia bayangkan. Sama seperti di Changi Airport, feedback dalam software development juga memiliki value karena feedback dapat meningkatkan nilai dari software yang dikembangkan. Tanpa adanya tangible software yang dihantarkan dalam waktu sesingkat mungkin product owner tidak bisa mengukur value dan progress.

Software delivery dalam skala kecil juga menghindari kita dari kejutan besar di akhir software development yang bisa mahal dampaknya. Software delivery dalam skala kecil juga memungkinkan product owner untuk pivot menuju visi awal dari pengembangan software di tengah-tengah ketidak-pastian dari faktor eksternal sekalipun.

3. Software developer tidak bisa memprediksi masa depan

Our tendency to construct and believe coherent narratives of the past makes it difficult for us to accept the limits of our forecasting ability.
— Nassim Taleb

Walaupun software developer adalah ahli dalam mengembangkan software mereka bukanlah ahli nujum. Sebenarnya bukan hanya software developer saja yang tidak bisa memprediksi masa depan namun secara umum manusia tidak bisa memprediksi apa yang akan terjadi di masa depan. Secara gambaran besar software developer tahu apa yang akan mereka lakukan namun detail kode yang akan mereka tulis baru akan semakin mereka ketahui setelah mereka mulai menulis kode (berkaitan dengan poin pertama kalau software development adalah pekerjaan inovatif).

It is wrong to blame software developers for wrong forecast in an unpredictable work. Semakin banyak kode yang ditulis oleh software developer semakin banyak hal-hal yang tidak mereka rencanakan di awal bermunculan. Bukan karena mereka tidak tahu apa yang mereka lakukan namun karena mereka adalah manusia. Di tengah-tengah ketidak-pastian tersebut satu hal yang akan mereka lakukan adalah tetap bertindak profesional dengan tetap melakukan prosedur software development yang seharusnya mereka lakukan.

a. Bugs bermunculan pada saat development

Sebagai inovator software developer menerjemahkan requirement yang ambigu menjadi kode yang hanya dimengerti oleh mesin. Dalam kata lain software developer menerjemahkan bahasa manusia menjadi bahasa mesin. Tidak jarang bugs bermunculan karena salah penerjemahan requirement dari pengguna ke bahasa mesin. Mistranslasi requirement dari pengguna dapat terjadi karena software bersifat abstrak.

Software developer yang sudah membuat perancangan dengan matang pun tidak akan pernah bisa memprediksi bugs atau defects yang akan muncul dari kode yang mereka tulis. Bugs happens in software development. Bugs membutuhkan waktu untuk diperbaiki dan waktu yang dibutuhkan untuk memperbaiki bugs ini tidak dapat diprediksi sebelumnya.

b. Test yang harus ditulis

Untuk menghindari bugs yang sama muncul lagi di masa mendatang, software developer akan secara profesional menulis test untuk bugs yang bersangkutan. Proses ini dinamakan test driven development dan proses ini membutuhkan waktu. Dengan adanya test maka software developer memiliki instant feedback apabila fungsionalitas baru menimbulkan bugs di fungsionalitas lama. Proses menulis test ini dilakukan secara terus menerus agar software developer dapat percaya diri dengan kualitas software.

Seorang software developer yang tidak menulis test sebelum menulis kode fungsionalitas adalah seperti seorang dokter yang tidak mencuci tangan sebelum melakukan operasi. Writing tests is what professional software developers do. Tanpa adanya test, proses software development di masa mendatang akan semakin lambat dan semakin sulit diprediksi karena software developer akan takut untuk merubah dan menambahkan fungsionalitas baru sesering mungkin dan masih mengandalkan manual testing. Manual testing bukan saja mahal tetapi juga error prone karena masih dilakukan oleh manusia.

c. Kode yang harus di-refactor

Sebelum software development dimulai software developer tidak tahu secara pasti berapa baris kode yang akan dia tulis. Dengan semakin banyak kode yang ada di dalam software maka kode akan semakin kompleks untuk di-maintain. Kode yang sulit untuk di-maintain dan semrawut akan memperlambat proses software development di masa mendatang. Sebagai orang-orang yang profesional, software developer bukan hanya menuliskan kode yang jalan tetapi juga kode yang bersih untuk memudahkan pekerjaan mereka di masa mendatang. Proses membersihkan kode ini dinamakan refactoring.

Software developer harus me-maintain kodenya agar selalu bersih namun mereka tidak bisa tahu secara pasti seberapa sering mereka harus refactor kode mereka, karena proses refactoring baru diketahui pada saat mereka sedang menulis kode. Dalam software development, setiap kali software developer menulis kode mereka akan semakin belajar mengenai kode yang telah mereka tulis.

4. Software developer harus berinteraksi dengan software developer lain

Computer programming is a human activity and yet many people, many programmers – have never considered programming in this light.
– Jerry Weinberg

Kalau semua software developer dalam satu tim memiliki perilaku yang sama dan bisa ditebak maka software development adalah pekerjaan yang prediktif. Namun kenyataannya tidak seperti itu.

Software developer tidak bekerja sendirian. Software developer harus mengintegrasikan kode yang dia tulis dengan kode yang ditulis oleh software developer lainnya yang memiliki keunikannya masing-masing. Proses integrasi ini bersifat kompleks karena bugs bisa muncul kalau software tidak terintegrasi dengan baik. Belum lagi kalau mereka harus mengintegrasikan pekerjaannya dengan 3rd party software atau legacy system.

Berkolaborasi dengan software developer lain kompleks dan penuh dengan tantangan karena setiap software developer menulis kode dengan gaya penulisan yang berbeda-beda. Ada software developer yang selalu mengikuti tren terbaru, ada juga software developer yang tidak pernah up-to-date dengan perkembangan dunia software development dalam sepuluh tahun terakhir. Ada software developer yang proaktif mengambil pekerjaan secara mandiri, ada juga software developer yang hanya menunggu diberi pekerjaan. Belum lagi software developer yang perhitungan dengan perusahaan untuk mengambil pekerjaan lebih banyak dari software developer lainnya. Ada juga software developer yang secara diam-diam merubah kode yang ditulis oleh software developer lain yang tujuannya membuat kode bersih dan mudah di-maintain namun justru membuat software developer lain memaki-maki dia. Dalam software development akibat dari interaksi antar software developer sulit diprediksi dan tidak jarang bisa menyebabkan perseteruan.

Judgment dan blame adalah dua hal umum yang tidak jarang terjadi dalam software development. Judgment dan blame bukan hanya terjadi antar software developer namun juga bisa terjadi dengan peran lainnya seperti Business Analyst, Test Engineer, Designer bahkan dengan pengguna dan dengan manajer. Oleh karena itu tidak berlebihan bila menyatakan bahwa permasalahan terbesar dalam software development justru adalah people problems. People problems adalah alasan terakhir yang menyebabkan sifat software development tidak prediktif.


Untuk para manajer dan pimpinan perusahaan yang telah menyempatkan diri membaca artikel ini hingga akhir:

Managers, software development is a complex work. We should not fight hard making it predictable, we should find better ways to manage unpredictability.

Dan kepada software developer yang telah berusaha semaksimal mungkin untuk merubah cara pandang bosnya mengenai software development salah satunya dengan meneruskan artikel ini kepada bosnya bahkan sampai membelikan buku ini untuk bosnya namun tidak melihat adanya tanda-tanda perubahan dari cara pandang mereka:

Software developers, there is nothing wrong with you. You may have been hanging around with the wrong crowd all this time. Scrum is an opportunity for you to be the best version of yourself in the midst of an uncertain world. If you can’t change your boss, change your boss.


Modern Management

Gerakan memodernisasikan manajemen software development di Indonesia

Joshua 스크람 Partogi

Written by

On a mission to humanise workplaces so people can be the best version of themselves. Follow my journey https://www.youtube.com/c/jpartogi

Modern Management

Gerakan memodernisasikan manajemen software development di Indonesia

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade