![]() | |||
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 Mas Agung Sachli 2 Oktober 2000 Saat The Joel Test pertama kali muncul, salah satu bagian yang paling sering dikomentari oleh pembaca adalah penulisan specs. Nampaknya specs seperti flossing: setiap orang tahu bahwa mereka harus menulis specs, tapi tidak ada yang melakukan. Kenapa orang tidak mau menulis specs? Orang menyatakan bahwa hal ini karena mereka menghemat waktu dengan melewati fase penulisan specs. Mereka berlaku seolah-olah penulisan spec merupakan suatu kemewahan yang diperuntukan bagi teknisi pesawat luar angkasa NASA, atau orang yang bekerja untuk perusahaan asuransi raksasa dan sudah mapan. Omong kosong. Pertama, kegagalan penulisan spec merupakan resiko tunggal yang terbesar dan tidak perlu yang anda ambil dalam suatu proyek software. Hal ini sama bodohnya seperti merencanakan melewati gurun Mojave hanya membawa pakaian di punggung anda, dan berharap bisa "terbang". Programer dan teknisi software yang menyelami kode tanpa penulisan spec cenderung berpikir bahwa mereka adalah penembak yang hebat, menembak dari bawah pinggangnya. Mereka bukan seperti itu. Mereka sangat tidak produktif. Mereka menulis kode yang buruk dan menghasilkan software yang jelek, dan mereka mencelakakan proyek mereka dengan mengambil resiko besar yang sama sekali tidak perlu.
Fungsi yang terpenting dari sebuah spec adalah untuk mendesain program tersebut. Bahkan jika anda sendiri yang menulis kode, dan anda menulis spec semata-mata untuk keuntungan diri anda sendiri, langkah penulisan spec -- menggambarkan bagaimana program akan bekerja secara detail -- akan memaksa anda untuk benar-benar mendesain program tersebut. Mari kita mengunjungi dua programer khayalan di dua perusahaan. Speedy, di Hasty Bananas Software, tidak pernah menulis specs. "Specs? Kami tidak memerlukan specs!" Pada saat yang sama, Mr.Rogers, dari The Well-Tempered Software Company, menolak untuk menulis kode sampai spec sudah lengkap ditulis. Ini hanya merupakan dua dari banyak teman khayalan saya. Speedy dan Mr. Rogers mempunyai satu kesamaan: mereka berdua bertanggung jawab atas kompatibilitas ke belakang untuk versi 2.0 produk mereka masing-masing. Speedy memutuskan bahwa cara terbaik untuk menyediakan kompatibilitas ke belakang adalah dengan menulis sebuah pengubah yang hanya mengubah file versi 1.0 ke file versi 2.0. Dia mulai bekerja. Ketik, ketik, ketik. Klik di sini, klik di sana. Hard disk berputar. Debu berterbangan. Setelah hampir 2 minggu, dia telah memiliki sebuah pengubah yang beralasan. Namun customer Speedy tidak senang. Kodenya Speedy akan memaksa mereka untuk meng-upgrade semua orang di perusahaan tersebut ke versi terbaru. Pelanggan terbesar Speedy, Nanner Splits Unlimited, menolak untuk membeli software terbaru itu. Nanner Splits ingin mengetahui bahwa versi 2.0 akan tetap bisa bekerja pada file versi 1.0 tanpa mengubah mereka. Speedy memutuskan untuk menulis sebuah pengubah balik dan menghubungkannya ke dalam fungsi "simpan". Akan menjadi sedikit kacau, karena saat anda menggunakan fitur versi 2.0, akan kelihatan bekerja, sampai saat anda menyimpan file tersebut ke format 1.0. Anda akan diberitahukan bahwa fitur yang anda gunakan setengah jam yang lalu tidak dapat dipakai pada format file yang lama. Kemudian pengubah balik tersebut memakan waktu dua minggu lagi untuk ditulis, dan hal itu tidak berfungsi dengan bagus. Waktu yang terpakai: 4 minggu. Sekarang, Mr. Rogers di perusahaan Well-Tempered Software (disingkat: "WellTemperSoft") merupakan tipe seorang kutu buku yang rapi yang menolak menulis kode sampai dia memiliki sebuah spec. Dia menghabiskan waktu 20 menit merancang fitur kompatibilitas ke belakang seperti yang dilakukan oleh Speedy, dan menghasilkan sebuah spec yang kurang lebih berbunyi:
Spec ini ditunjukan ke pelanggan, yang mengatakan "tunggu sebentar! Kami tidak mau semuanya berpindah sekaligus!" Lalu Mr. Rogers berpikir lagi, dan mengubah spec menjadi:
Dua puluh menit yang lain telah lewat. Atasan Mr. Rogers, seorang yang mencintai OOP, melihat hal ini dan berpikir ada sesuatu yang kurang. Dia menyarankan arsitektur yang berbeda.
Dua puluh menit lagi. Mr. Rogers menggerutu. Refactoring ini akan memakan waktu 3 minggu, bukannya 2 minggu yang merupakan estimasi awal dia! Namun hal ini menyelesaikan semua masalah pelanggan, dengan cara yang elegan, jadi dia jalan terus dan kerjakan. Total waktu yang berlalu untuk Mr. Rogers: 3 minggu dan 1 jam. Waktu yang dipakai Speedy: 4 minggu, tapi kodenya Speedy tidak sebagus punya Rogers. Pesan dari cerita ini adalah dengan sebuah contoh sederhana, anda dapat membuktikan apapun. Oops. Bukan, bukan itu maksud saya. Pesan cerita ini adalah saat anda mendisain produk anda dengan bahasa manusia, hanya akan memakan waktu beberapa menit untuk memikirkan beberapa kemungkinan, revisi, dan memperbaiki disain anda. Tidak ada yang akan tersinggung saat anda menghapus satu paragraph dari word processor. Namun saat anda mendisain produk anda dalam sebuah bahasa pemrograman, akan memakan waktu berminggu-minggu untuk melakukan iterasi disain. Yang terburuk adalah, seseorang yang baru saja menghabiskan 2 minggu menulis kode akan merasa terikat dengan kode tersebut, tidak perduli sesalah apapun. Tidak ada yang bisa dikatakan oleh atasan Speedy atau pelanggan yang dapat meyakinkan dia untuk membuang kode pengubahnya yang indah, meskipun hal itu tidak mewakili arsitektur yang terbaik. Sebagai hasilnya, produk akhir akan cenderung berkompromi antara disain awal yang salah dan disain yang ideal. Ini adalah "disain terbaik yang bisa kita dapatkan, dari semua kode yang telah kami tulis dan kami tidak mau membuangnya". Tidak akan sebagus "Disain terbaik yang bisa kami dapatkan, titik".
Saat anda tidak menulis sebuah spec, semua komunikasi ini tetap terjadi, tapi akan terjadi saat diperlukan. Orang QA akan mencoba segala macam di program ini, dan saat ada sesuatu yang aneh, mereka akan menghampiri programer dan mengusik mereka lagi-lagi untuk menanyakan pertanyaan bodoh yang lain tentang bagaimana hal ini seharusnya bekerja. Disamping hal ini merusak produktivitas programer, programer cenderung memberikan jawaban yang berhubungan dengan kode yang mereka tulis, daripada "jawaban yang betul". Jadi orang QA sebenarnya sedang menguji program terhadap program, bukan program terhadap disain, yang seharusnya, hmm, lebih berguna. Saat anda tidak mempunyai spec, apa yang terjadi pada penulis teknis yang malang adalah yang terlucu (dengan cara yang menyedihkan). Penulis teknis sering tidak mempunyai wewenang untuk mengganggu programer. Pada banyak perusahaan, jika penulis teknis mempunyai kebiasaan menginterupsi programer untuk bertanya bagaimana sesuatu hal seharusnya bekerja, programer akan menghadap managernya dan mengeluh tentang bagaimana mereka tidak bisa bekerja karena penulis [brengsek] ini, dan minta untuk menyingkirkan mereka. Dan manager, mencoba untuk memperbaiki produktivitas, melarang penulis teknis untuk menghabiskan waktu programer yang berharga lagi. Anda selalu dapat mengetahui perusahaan seperti ini, karena help file dan manualnya tidak memberikan informasi yang lebih dari apa yang dapat diketahui dari layar. Saat anda melihat pesan di layar yang mengatakan
... dan anda klik "Help", sebuah topik help yang lucu namun menyedihkan muncul yang mengatakan sesuatu seperti:
Hm, terima kasih. Hal ini sangat jelas bahwa penulis teknis sedang mencoba menutupi fakta bahwa mereka tidak mengetahui apa itu dukungan LRF-1914. Mereka tidak bisa bertanya ke programer, karena (a) mereka malu, atau (b) programernya di Hyderabad dan mereka di London, atau (c) mereka dilarang oleh managemen untuk menginterupsi programer, atau sejumlah penyakit perusahaan lainnya yang telalu banyak untuk disebutkan, namun masalah dasarnya terletak pada sebuah spec. Alasan terbesar nomor tiga untuk mempunyai spec adalah tanpa memiliki spec yang detail, tidak mungkin membuat jadwal. Tidak memiliki jadwal tidak masalah jika ini merupakan PhD anda dan anda berencana menghabiskan 14 tahun pada hal itu, atau jika anda seorang programer yang bekerja di Duke Nukem berikutnya dan kami akan kirim saat kami baik dan siap. Namun untuk hampir semua jenis bisnis yang nyata, anda perlu mengetahui hal ini akan makan waktu berapa lama, karena mengembangkan sebuah produk membutuhkan uang. Anda tidak akan membeli sebuah jeans tanpa mengetahui berapa harganya, lalu bagaimana sebuah bisnis yang bertanggung jawab memutuskan apakah akan membangun sebuah produk tanpa mengetahui akan memakan waktu berapa lama, dan berapa biayanya? Lebih jauh tentang penjadwalan, baca Penjadwalan software yang mudah. Suatu kesalahan umum yang parah yaitu mengenai perdebatan tentang bagaimana sesuatu harus didisain, dan kemudian tidak pernah ada penyelesaian. Brian Valentine, pemimpin pengembang di Windows 2000, terkenal dengan motto-nya: "Buat keputusan dalam waktu kurang dari 10 menit, atau yang berikutnya gratis". Dalam kebanyakan organisasi programing, setiap kali ada perdebatan tentang disain, tidak ada yang pernah mau mengambil sebuah keputusan, biasanya karena alasan politis. Jadi para programer hanya bekerja pada hal-hal yang tidak kontroversial. Seiring dengan lewatnya waktu, semua keputusan yang sulit ditunda sampai akhir. Hal ini yang sering menyebabkan proyek gagal. Jika anda sedang memulai sebuah perusahaan baru dengan sebuah teknologi baru dan anda menyadari bahwa perusahaan anda secara konstitusi tidak mampu membuat sebuah keputusan, anda sebaiknya menutup perusahaan itu dan mengembalikan uangnya ke investor, karena anda tidak akan menghasilkan apa pun. Penulisan spec merupakan cara terbaik untuk menemukan semua keputusan disain yang sulit itu, yang tidak nampak jika anda tidak mempunyai sebuah spec. Bahkan untuk keputusan kecil pun dapat ditemukankan oleh spec. Sebagai contoh, jika anda sedang membangun sebuah web site dengan keanggotaan, anda semua akan setuju jika pengguna lupa password-nya, anda akan mengirimkannya ke mereka. Bagus. Tapi itu tidak cukup untuk menulis kode. Untuk menulis kode, anda perlu mengetahui kata-kata persis yang akan di-email. Pada kebanyakan perusahaan, para programer tidak dipercayai menulis kata-kata yang akan dibaca oleh user (kebanyakan kasus hal ini merupakan alasan yang bagus). Lalu serorang marketing atau orang PR atau orang jurusan bahasa nampaknya diperlukan untuk menghasilkan kata-kata untuk pesannya. "Yth Shlub, Ini password yang anda lupakan. Harap tidak ceroboh lagi lain kali". Saat anda memaksa diri anda menulis sebuah spec yang bagus dan lengkap (dan saya akan membicarakan lebih banyak lagi tentang hal ini nanti), anda menyadari semua hal ini dan akan membetulkan itu atau paling tidak ditandai dengan sebuah bendera merah yang besar. OK. Kita sudah sependapat sekarang. Specs adalah sesuatu yang baik. Saya menduga bahwa kebanyakan orang sudah mengerti hal ini, dan tulisan saya, walaupun menghibur, tidak mengajarkan hal baru apa pun. Lalu kenapa orang tidak menulis specs? Ini bukan untuk menghemat waktu, karena memang tidak, dan saya pikir kebanyakan pemrogram tahu itu. (Pada kebanyakan organisasi, satu-satunya "specs" yang ada adalah staccato (lembar musik yang bertempo tinggi), selembar dokumen text yang ditulis oleh programer di Notepad setelah menulis kode dan setelah menjelaskan fitur tersebut ke orang yang ke tiga ratus).
Jika anda tidak pernah bekerja pada perusahaan yang membuat functional specification, anda mungkin belum pernah melihatnya. Pada bagian berikutnya dari seri ini, saya akan menunjukkan ke anda sebuah contoh spec yang singkat untuk anda lihat, dan kita akan membicarakan apa yang perlu dimiliki oleh sebuah spec yang baik. Terus baca! Artikel ini aslinya bahasa Inggris dengan judul Painless Functional Specifications | ||
![]() 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