![]() | ||||
Joel on Software Pojok Software Joel
| ||||
|
Artikel-artikel "Joel on Software" lain dalam bahasa Indonesia Artikel-artikel "Joel on Software" lain dalam bahasa Inggris |
Oleh Joel Spolsky Diterjemahkan oleh Darwin Tjoe Disunting oleh Mas Agung Sachli 9 Agustus 2000 Pernah mendengar SEMA? Itu adalah sebuah sistem yang cukup memadai untuk mengukur seberapa bagus sebuah tim software. Tapi tunggu! Jangan mengikuti link tersebut! Anda akan membutuhkan waktu enam tahun untuk memahaminya. Jadi saya memperkenalkan versi saya sendiri, serangkaian test sederhana, yang tidak ilmiah, untuk mengetahui kualitas tim software. Tetapi hal terbaik adalah itu hanya membutuhkan waktu 3 menit. Waktu yang dapat Anda hemat cukup bagi Anda untuk pergi ke sekolah kedokteran.
Hal yang menarik dari The Joel Test adalah Anda bisa dengan cepat menjawab ya atau tidak untuk masing-masing pertanyaan. Anda tidak perlu bersusah payah menghitung berapa jumlah baris code per hari atau berapa rata-rata jumlah bug per inflection point. Berikan nilai 1 untuk setiap jawabah “ya”. Yang pasti, The Joel Test tidak ditujukan bagi Anda yang ingin memastikan software untuk reaktor nuklir Anda aman. Skor 12 adalah sempurna, 11 masih bisa ditoleransi, tetapi 10 kebawah menunjukkan Anda mempunyai masalah yang serius. Kenyataannya adalah kebanyakan perusahaan software hanya mendapat skor 2 atau 3, dan mereka betul-betul membutuhkan pertolongan karena perusahaan seperti Microsoft selalu mempertahankan skor 12 sepanjang waktu. Memang betul, apa yang disebutkan diatas bukan menjadi faktor yang menjamin sukses atau gagal. Jika Anda mempunyai sebuah tim software yang luar biasa bagus mengerjakan suatu produk yang tidak diinginkan orang, bagaimanapun, tidak akan ada yang menginginkan itu. Sebaliknya, bisa jadi ada sebuah tim “koboi” yang tidak melakukan satupun dari yang disebutkan diatas tetapi tetap mengerjakan software yang merubah dunia. Tetapi yang ingin ditekankan, jika Anda mengerjakan 12 hal diatas dengan benar, Anda akan mempunyai sebuah tim yang disiplin dan konsisten. 1. Apakah Anda menggunakan source control? 2. Bisakah Anda membuat build dalam satu langkah? Kalau prosesnya lebih dari satu langkah, itu awal dari kesalahan. Dan semakin mendekati saat pengiriman, Anda akan sangat sibuk memperbaiki bug “terakhir”, membuat final EXE dan seterusnya. Jika Anda memerlukan 20 langkah untuk meng-compile code, membuat build instalasi, dan seterusnya., Anda akan menjadi gila dan sangat mungkin membuat sebuah kesalahan yang konyol. Untuk alasan tersebut, perusahaan tempat saya bekerja terakhir mengganti WISE dengan InstallShield: kami menuntut proses instalasi bisa berjalan melalui sebuah script, secara otomatis, lewat tengah malam, menggunakan NT scheduler, WISE tidak bisa memenuhi kebutuhan itu sehingga kami terpaksa membuangnya. (Orang-orang di WISE mencoba meyakinkan saya bahwa versi terakhir mereka akan bisa mendukung apa yang saya inginkan) 3. Apakah Anda membuat build harian? Ketika Anda menggunakan source control, kadang seorang programmer tanpa sengaja melakukan sesuatu dan merusak build. Sebagai contoh, mereka telah menambahkan source file yang baru dan segala sesuatu ter-compile dengan baik pada mesin mereka, tetapi tanpa disadari mereka lupa menambahkan source file ke code repository. Mereka begitu saja mematikan mesin mereka dan pulang dengan happy. Tetapi orang lain mendadak tidak bisa bekerja lagi, sehingga terpaksa pulang juga, dengan perasaan tidak happy. Merusak build adalah sedemikian buruk (juga sedemikian sering), yang harus dipastikan adalah tidak boleh ada kerusakan yang tidak diketahui. Pada tim yang besar, sebuah cara yang baik untuk memastikan kerusakan segera dibetulkan adalah dengan membuat build harian pada siang hari, misalkan, pada jam makan siang. Setiap orang harus menambahkan sebanyak mungkin checkin sebelum makan siang. Ketika mereka kembali dari makan siang, build sudah selesai dilakukan. Kalau bekerja dengan baik, bagus! Sehingga setiap orang bisa meneruskan bekerja menggunakan source versi terakhir. Seandainya build gagal, Anda memperbaiki itu, tetapi orang lain bisa tetap meneruskan kerja menggunakan source sebelumnya yang belum di-build. Kami di tim Excel mempunyai peraturan siapa yang merusak build, sebagai “hukuman”, diharuskan menjaga proses build sampai orang lain yang merusak selanjutnya menggantikannya. Ini bisa menjadi salah satu insentif yang baik supaya tidak merusak build, juga cara yang baik untuk merotasi setiap orang agar memahami bagaimana proses build bekerja. Bacaan artikel saya mengenai hal tersebut di Daily Builds are Your Friend. 4. Apakah Anda mempunyai bug database? Bug database bisa dibuat rumit atau sederhana. Sebuah bug database minimal harus mencakup informasi berikut :
Jika Anda tidak melakukan pencatatan bug dikarenakan software bug tracking yang terlalu rumit, maka buatlah sebuah tabel sederhana yang terdiri dari 5 kolom di atas dan mulailah menggunakannya. Ingin tahu lebih banyak mengenai bug tracking, baca Painless Bug Tracking. 5. Apakah Anda memperbaiki bug sebelum menulis code baru? Apa yang mereka pelajari adalah bahwa project manager sedemikian ketat memaksakan “jadwal” sehingga programmers terpaksa mengikutinya dalam proses coding, menghasilkan code yang sedemikian jeleknya karena tidak ada fase perbaikan bug dalam jadwal resminya. Tidak ada usaha untuk menekan jumlah bug. Ada cerita bahwa seorang programmer yang menulis code untuk menghitung tinggi sebaris text, sengaja menuliskan “return 12”, dan menunggu bug report kalau fungsi yang dia tuliskan tidak selalu benar. Jadwal disatu sisi adalah sebuah checklist dari fitur-fitur yang akan menjadi bug. Ada istilah yang menyebutkan sebagai “metode cacat tak terhingga”. Untuk memperbaiki masalah ini, Microsoft mengadopsi yang disebut “metode tanpa cacat”. Banyak programmer merasa tidak biasa karena kedengarannya seperti manajemen berpikir mereka bisa meniadakan bug sama sekali. Sebenarnya, istilah “tanpa cacat” berarti pada setiap waktu yang diberikan, prioritas tertinggi adalah meng-eliminasi bug sebelum menulis code baru. Saya akan menjelaskan mengapa. Pada umumnya, semakin lama Anda menunda memperbaiki bug, maka akan semakin besar pengorbanan (dalam hal waktu dan uang) yang diperlukan untuk memperbaikinya. Contoh, jika Anda hanya salah ketik sesuatu atau syntax error yang dikenali oleh compiler, perbaikan bisa dilakukan dengan sangat mudah. Ketika muncul sebuah bug dalam code Anda ketika pertama kali dijalankan, Anda bisa memperbaikinya hampir tidak memerlukan waktu karena semua code masih segar dalam ingatan Anda. Jika Anda menemukan bug dalam code yang ditulis beberapa hari yang lalu, akan memerlukan beberapa waktu untuk menelusuri. Tapi ketika Anda membaca ulang code yang Anda tulis, Anda akan mengingat semuanya dan bug bisa diperbaiki dalam waktu yang singkat. Tetapi jika Anda menemukan bug dalam code yang sudah ditulis beberapa bulan yang lalu, mungkin Anda sudah lupa banyak hal mengenai code itu, dengan demikian semakin sulit juga untuk memperbaikinya. Pada saat Anda harus memperbaiki kesalahan code orang lain, pada waktu yang sama mungkin mereka sedang liburan di Aruba, pada saat seperti ini, memperbaiki bug seperti menggali ilmu pengetahuan baru. Lambat, mengikuti metode tertentu, dan Anda tidak akan pernah tahu kapan selesai. Dan jika Anda menemukan bug pada code yang sudah dirilis, Anda mungkin akan memerlukan pengorbanan yang luar biasa untuk memperbaikinya. Itulah alasan mengapa harus segera memperbaiki bug: karena memerlukan waktu yang lebih sedikit. Alasan lain adalah kenyataan bahwa lebih mudah memprediksi waktu yang diperlukan untuk menuliskan code baru daripada memperbaiki bug. Contoh, jika saya meminta Anda untuk memprediksi waktu yang diperlukan untuk menuliskan code yang fungsinya mensortir daftar, Anda bisa memberikan perkiraan yang lumayan mendekati. Tetapi jika saya meminta Anda untuk memprediksi waktu yang dibutuhkan untuk memperbaiki bug dimana code Anda tidak berjalan sebagaimana mestinya di mesin yang terinstall Internet Explorer 5.5, Anda bahkan tidak bisa menebak karena Anda (secara definitif) tidak mengetahui apa yang menyebabkan bug tersebut. Bisa jadi Anda menghabiskan waktu 3 hari untuk menelusurinya, atau hanya 2 menit. Berarti jika pekerjaan yang Anda jadwalkan masih mengandung banyak bug yang harus dibereskan, jadwal Anda sulit dipercaya. Tetapi jika Anda telah memperbaiki semua bug yang sudah dikenal, selanjutnya hanya menulis code baru, jadwal Anda akan lebih akurat. Hal positif lain mengupayakan aplikasi tanpa bug adalah Anda bisa merespons lebih cepat terhadap situasi kompetisi. Beberapa programmer bertanggung jawab atas hal ini supaya Anda selalu mempunyai produk yang siap dikirim setiap saat. Katakan suatu waktu kompetitor Anda memperkenalkan fitur baru yang dahsyat yang bisa mencuri pelanggan Anda, dengan cepat pula Anda bisa menambahkan fitur itu dan segera diluncurkan, tanpa harus berkutat dengan sejumlah bug. 6. Apakah Anda mempunyai jadwal yang terkini? Tetapi kejadiannya bukan begitu. Ada banyak rencana dan keputusan yang harus diambil mendahului waktu selesainya code: demo, pameran, iklan dll. Dan semua ini hanya akan berjalan dengan baik apabila mempunyai jadwal yang up to date. Hal lain mengenai pentingnya mempunyai jadwal adalah itu akan memaksa Anda untuk memutuskan fitur apa yang harus dikerjakan, sementara fitur yang kurang penting harus ditunda dulu daripada meleset terus, keadaan mana yang disebut featuritis (mis. scope creep). Menyusun jadwal tidak terlalu susah-susah amat. Baca artikel saya Painless Software Schedules, yang mengajarkan bagaimana membuat jadwal yang bagus dengan mudah. 7. Apakah Anda mempunyai spec? Saya tidak yakin betul mengapa hal ini terjadi, bisa jadi karena kebanyakan programmer benci menulis dokumen. Akibatnya, ketika tim programmer terbentur masalah, mereka lebih suka menuliskan solusinya dalam bentuk code, bukan dokumen. Mereka lebih suka menyelam kedalam dan menulis code daripada merumuskan spesifikasinya terlebih dahulu. Pada tahap design, ketika Anda menemukan masalah, Anda bisa memperbaiki dengan mudah dengan hanya merubah beberapa baris tulisan. Sementara kalau sudah berbentuk code, biaya untuk memperbaiki masalah meningkat secara dramastis, baik secara emosional (orang tidak suka membuang code) dan waktu, jadi ada hambatan untuk sungguh-sungguh memperbaiki masalah. Software yang dibangun tanpa spesifikasi biasanya mempunyai design yang buruk dan jadwalnya selalu meleset tak terkendali. Hal tersebutlah kelihatannya yang terjadi di Netscape, dimana mereka mempunyai 4 versi awal yang tumbuh dengan sangat baik sampai ketika manajemen secara bodoh memutuskan membuang semua code dan memulai dari awal lagi. Lagi-lagi mereka membuat kesalahan terhadap Mozilla, mereka menciptakan monster yang sedemikian rupa tidak terkontrol sehingga setelah berahun-tahun baru sampai ketahap alpha. Cara saya mengatasi hal tersebut adalah mengirim mereka untuk mengambil kursus menulis intensif. Solusi lain adalah mempekerjakan seorang program manager yang bertanggung jawab menulis spesifikasi. Atau Anda juga bisa menerapkan peraturan yang sederhana “tidak ada code tanpa spesifikasi”. Pelajari mengenai menulis spesifikasi dengan membaca tulisan saya 4-part series. 8. Apakah programmer mendapat suasana kerja yang tenang? Masalahnya, kita semua mengetahui bahwa pekerja demikian bekerja paling baik dengan masuk kedalam “flow”, atau dikenal juga dengan “sedang mood” dimana mereka bisa berkonsentrasi penuh pada pekerjaan mereka dan berbebas dari lingkungan sekitar. Mereka bisa lupa waktu dan menghasilkan yang terbaik melalui konsentrasi, yaitu dimana mereka bisa bekerja dengan produktivitas penuh. Penulis, programmer, ilmuwan, bahkan pemain basket bisa bercerita banyak mengenai apa yang disebut “sedang mood” Kesulitannya, mencapai “mood” demikian tidak mudah. Ketika Anda mencoba mengukurnya, rata-rata dibutuhkan waktu 15 menit untuk mencapai tahap bekerja dengan produktivitas maksimum. Tetapi kadang-kadang, jika Anda sedang capek, atau sudah mengerjakan banyak pekerjaan kreatif hari itu, Anda tidak bisa mendapatkan mood itu dan sepanjang hari Anda hanya akan membaca web, atau bermain Tetris. Kesulitan lain adalah ternyata begitu mudahnya keluar dari mood. Suara berisik, dering telepon, keluar makan siang, menyetir 5 menit ke Starbucks untuk membeli kopi, dan interupsi dari rekan kerja --- terutama interupsi dari rekan kerja – semuanya bisa membawa Anda keluar dari mood. Jika seorang rekan kerja menanyakan sebuah pertanyaan, 1 menit interupsi, Anda perlu waktu sampai setengah jam lagi untuk produktif kembali, produktivitas Anda sangat payah. Apalagi jika Anda berada di ruangan yang berisik, dimana disekitarnya orang pemasaran berteriak ditelepon, pekerja diinterupsi berkali-kali, tidak akan bisa mood kembali. Bagi programmer, jelas-jelas hal tersebut cukup berat. Produkivitas tergantung kepada kemampuan mengingat sekian banyak detil bersamaan. Gangguan apa saja bisa menyebabkan detil tersebut rusak. Ketika meneruskan kerja, Anda tidak bisa mengingat semua detil (seperti nama variabel lokal yang Anda pakai, atau sedang memikirkan algoritma pencarian) dan Anda harus pelan-pelan mengingat-ingat kembali, secara bertahap sampai kembali ke kecepatan sebelumnya. Aljabar sederhananya, jika kita menginterupsi seoarng programmer, bahkan hanya 1 menit saja, sebenarnya kita membuang 15 menit produktivitas. Sebagai contoh, tempatkan dua orang programmer, Jeff dan Mutt dalam partisi terbuka bersebelah-sebelahan. Mutt tidak bisa mengingat versi Unicode dari strcpy function. Dia bisa mencarinya sendiri, yang memerlukan waktu 30 detik, atau dia bisa bertanya ke Jeff, yang memerlukan waktu 15 detik. Karena dia duduk bersebelahan dengan Jeff, dia bertanya ke Jeff. Jeff terganggu dan kehilangan 15 menit produktivitas untuk menyelamatkan Mutt 15 detik. Sekarang pindahkan mereka ke ruangan kantor yang terpisah dengan dinding dan pintu. Sekarang ketika Mutt tidak bisa mengingat nama variabel fungsi tadi, dia bisa mencari sendiri yang akan memakan waktu 30 detik. Atau dia juga bisa bertanya kepada Jeff, tetapi butuh waktu 45 detik termasuk berdiri selama itu. Jadi Mutt memutuskan mencari sendiri. Mutt kehilangan 30 detik produktivitas, tetapi menyelamatkan 15 menit untuk Jeff. Ahhh! 9. Apakah Anda menggunakan tools terbaik? Men-debug kode GUI dengan satu monitor akan sangat menyulitkan kalau tidak disebut tidak mungkin. Jika Anda mengerjakan GUI, menggunakaan dua monitor akan membuat pekerjaan jauh lebih mudah. Kebanyakan programmer sekali waktu harus meng-edit bitmap icon untuk toolbar, dan kebanyakan tidak mempunyai editor bitmap yang bagus. Microsoft Paint bukan aplikasi nyaman untuk tujuan itu, tetapi kebanyakan programmer terpaksa harus menggunakannya. Pada pekerjaan saya yang terakhir, system administrator mengirimi saya peringatan kalau saya menggunakan lebih dari 220 megabyte ruang harddrive di server. Merujuk pada harga harddrive saat ini, biaya untuk ruang sebesar itu mungkin lebih murah dari kertas toilet yang saya pakai. Menghabiskan waktu 10 menit untuk membersihkan directory saya justru penghamburan produktivitas. Tim development yang jagoan tidak menghambat programmernya. Sedikit saja frustasi yang disebabkan perangkat yang kurang powerful akan menyebabkan programmer menggerutu dan tidak senang. Programmer demikian adalah programmer yang tidak produktif. Untuk mengatasi hal ini... programmer perlu disuap dengan produk muktahir keluaran terakhir. Ini cara jauh lebih murah supaya mereka benar-benar bekerja untuk Anda daripada membayar gaji yang kompetitif ! 10. Apakah Anda mempunyai tester? Baca Top Five (Wrong) Reasons You Don't Have Testers, sebuah artikel yang saya tulis mengenai hal ini. 11. Pada saat wawancara, apakah Anda meminta kandidat baru menuliskan code? Apakah Anda akan memilih perusahaan catering untuk perkawinan Anda tanpa terlebih dahulu mencicipi makanannya? Saya meragukan hal itu (kecuali itu Bibi Marge, dan dia akan membenci anda selamanya jika Anda tidak membiarkannya membuat kue chopped liver-nya yang “terkenal”). Begitulah, setiap hari programmer di-hire berdasarkan resume mereka karena pewawancara merasa nyaman ngobrol dengan mereka. Atau mereka ditanyakan ("apa perbedaan diantara CreateDialog() and DialogBox()?") yang sebetulnya bisa dicari di dokumentasi. Anda tidak perduli kalau mereka menghapalkan ribuan pertanyaan umum mengenai programming, yang Anda perlukan mereka bisa menghasilkan code. Atau, lebih buruk lagi, mereka ditanyakan “AHA!”: jenis pertanyaan yang kelihatannya mudah kalau Anda tahu jawabannya, tetapi kalau Anda tidak mengetahui jawabannya sebelumnya, maka tidak mungkin bisa dilakukan. Tolong, jangan seperti itu. Lakukan apapun yang Anda inginkan selama wawancara, tetapi pastikan minta kandidat menuliskan beberapa kode. (Untuk saran lebih lengkap, silakan baca tulisan saya Guerrilla Guide to Interviewing.) 12. Apakah Anda menerapkan hallway usability testing? User interface yang bagus tidak sesulit yang anda pikirkan, dan itu sangat penting jika Anda menghendaki pelanggan Anda menyukai dan membeli produk Anda. Anda bisa membaca buku online mengenai desain UI , perkenalan penting bagi programmer. Manfaat yang terpenting mengenai user interface adalah jika Anda menunjukkan program Anda kepada sejumlah orang (lima atau enam sudah mencukupi), Anda akan segera menyadari masalah terbesar yang dihadapi mereka. Baca artikel Jakob Nielsen's yang menjelaskan kenapa. Bahkan jika kemampuan desain UI Anda lemah, asal Anda memaksakan diri Anda melakukan hallway usability tests, yang tidak perlu mengeluarkan biaya apa-apa, UI Anda akan jauh, jauh lebih bagus. Empat cara menggunakan The Joel Test
Artikel ini aslinya bahasa Inggris dengan judul The Joel Test: 12 Steps to Better Code | |||
![]() Joel Spolsky adalah pendiri Fog Creek Software, sebuah perusahaan software kecil di New York City. Dia lulus dari Yale University, dan pernah bekerja sebagai programer dan manajer di Microsoft, Viacom, dan Juno. | ||||
Isi halaman-halaman ini mewakili opini dari satu orang.
Semua isi Hak Cipta ©1999-2005 dari Joel Spolsky. Hak Cipta dilindungi Undang-undang