content:
Temukan segala yang ditawarkan Scribd, termasuk buku dan buku audio dari penerbit-penerbit terkemuka.
Mulai Coba Gratis
Batalkan kapan saja.
Scrum Dan XP Secara Praktis
Diunggah oleh
MizanRizqia
0 penilaian0% menganggap dokumen ini bermanfaat (0 suara)
62 tayangan
160 halaman
Informasi Dokumen
klik untuk memperluas informasi dokumen
Data diunggah
Sep 11, 2011
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Format Tersedia
PDF, TXT atau baca online dari Scribd
Bagikan dokumen Ini
Bagikan atau Tanam Dokumen
Opsi Berbagi
Bagikan di Facebook, terbuka di jendela baru
Facebook
Bagikan di Twitter, terbuka di jendela baru
Twitter
Bagikan di LinkedIn, terbuka di jendela baru
LinkedIn
Bagikan dengan Email, membuka klien email
Email
Copy Text
Salin Tautan
Apakah menurut Anda dokumen ini bermanfaat?
0%0% menganggap dokumen ini bermanfaat, Tandai dokumen ini sebagai bermanfaat
0%0% menganggap dokumen ini tidak bermanfaat, Tandai dokumen ini sebagai tidak bermanfaat
Apakah konten ini tidak pantas?
Laporkan Dokumen Ini
Deskripsi:
Hak Cipta:
Attribution Non-Commercial (BY-NC)
Format Tersedia
Unduh sebagai PDF, TXT atau baca online dari Scribd
Tandai sebagai Konten Tidak Pantas
Unduh sekarang
SimpanSimpan Scrum Dan XP Secara Praktis Untuk Nanti
0 penilaian0% menganggap dokumen ini bermanfaat (0 suara)
62 tayangan160 halaman
Scrum Dan XP Secara Praktis
Diunggah oleh
MizanRizqia
Deskripsi:
Hak Cipta:
Attribution Non-Commercial (BY-NC)
Format Tersedia
Unduh sebagai PDF, TXT atau baca online dari Scribd
Tandai sebagai Konten Tidak Pantas
SimpanSimpan Scrum Dan XP Secara Praktis Untuk Nanti
0%0% menganggap dokumen ini bermanfaat, Tandai dokumen ini sebagai bermanfaat
0%0% menganggap dokumen ini tidak bermanfaat, Tandai dokumen ini sebagai tidak bermanfaat
Tanamkan
Bagikan
Cetak
Unduh sekarang
Lompat ke Halaman
Anda di halaman 1dari 160
Cari di dalam dokumen
Scrum dan XP Secara Praktis
Bagaimana kami mengimplementasikan Scrum
Ditulis Oleh: Henrik Kniberg Diterjemahkan Oleh: Ifnu Bima ifnubima.org
3 | BAGAIMANA KAMI MEMBUAT PRODUK BACKLOG
2007 C4Media Inc All rights reserved. C4Media, Publisher of InfoQ.com. This book is part of the InfoQ Enterprise Software Development series of books. For information or ordering of this or other InfoQ books, please contact books@c4media.com. No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic, mechanical, photocopying, recoding, scanning or otherwise except as permitted under Sections 107 or 108 of the 1976 United States Copyright Act, without either the prior written permission of the Publisher. Designations used by companies to distinguish their products are often claimed as trademarks. In all instances where C4Media Inc. is aware of a claim, the product names appear in initial Capital or ALL CAPITAL LETTERS. Readers, however, should contact the appropriate companies for more complete information regarding trademarks and registration. Managing Editor: Diana Plesa Library of Congress Cataloguing-in-Publication Data: ISBN: 978-1-4303-2264-1 Printed in the United States of America
Prakata
Draf pertama dari buku ini hanya memerlukan satu-dua hari membuatnya, tapi bukan satu-dua hari biasa, ini adalah satu-dua hari yang sangat intensif! 150% focus factor :o) Terimakasih kepada istri saya Sophia dan anak-anaku : Dave dan Jenny untuk pengertianya selama menulis buku ini saya sedikit melupakan mereka, juga orang tua Sophia: Eva dan Jorgen untuk datang ke rumah dan membantu keluarga mengerjakan pekerjaan sehari-hari. Terima kasih juga untuk semua rekan kerja saya di Crisp, Stockholm dan semua orang di milis scrumdevelopment at yahoogroups dot com untuk bantuanya menjadi proofreader dan memperbaiki isi dari buku ini. Dan, tentu saja, terima kasih untuk semua pembaca yang telah memberikan umpan balik yang sangat besar. Saya secara khusus sangat lega mendengar bahwa buku ini membuka pintu bagi implementasi pengembangan perangkat lunak dengan metode agile.
Daftar Isi
KATA PENGANTAR OLEH JEFF SUTHERLAND KATA PENGANTAR OLEH MIKE COHN i iii
Daftar isi
Kata Pengantar dari Jeff Sutherland 8 Kata Pengantar Oleh Mike Cohn 10 Intro 13 Bagaimana kami membuat product backlog 16 Bagaimana kami merencanakan release dan menyiasati kontrak dengan harga tetap 97 Bagaimana kami menangani tim yang tersebar secara geografis 150 Checklist scrum master 155 Kata perpisahan 157 Rekomendasi bacaan 159 Tentang penulis 161
Kata Pengantar dari Jeff Sutherland
Tim perlu mengetahui dasar-dasar dari scrum. Bagaimana anda membuat dan menghitung product backlog? Bagaimana mengubahnya menjadi Sprint Backlog? Bagaimana anda mengelola grafik Burndown dan menghitung kecepatan tim anda? Buku ini menjadi panduan dasar praktek scrum yang dapat membantu team bertransfrormasi dari hanya mencoba menggunakan scrum menjadi mengeksekusi scrum dengan baik. Pelaksanaan scrum yang baik menjadi sangat penting untuk team yang sedang butuh-butuhnya investment. Sebagai seorang pelatih agile dari grup pemodal ventura, saya membantu tujuan pemodal ventura ini yaitu hanya menginvestasikan dana ke perusahaan yang dapat melaksanakan praktek agile yang baik. Senior Partner dari grup ini menanyakan semua portofolio perusahaan jika mereka mengetahui kecepatan dari tim development mereka. Pertanyaan tersebut sangat susah dijawab sekarang tanpa menggunakan Agile. Kesempatan investasi di masa depan memerlukan tim development yang tahu kecepatan dari produksi software mereka. Kenapa hal ini sangat penting? Jika tim tidak tahu kecepatan mereka, maka product owner tidak akan bisa membuat roadmap produk dengan tanggal release yang pasti. Tanpa tanggal release yang pasti, perusahaan bisa gagal dan investor bisa-bisa kehilangan banyak sekali uang! Masalah ini dihadapi perusahaan kecil maupun besar, lama atau baru, dibiayai investor atau tidak. Dalam sebuah acara konferensi scrum di London, saya bertanya kepada 135 peserta, berapa orang yang mengimplementasikan scrum di tempatnya bekerja? 30 orang mengacungkan tangan. Kemudian saya bertanya apakah mereka melaksanakan pengembangan berulang seperti yang dijelaskan oleh standard Nokia. Pengembangan berulang sangat fundamental dalam Agile Manifesto menghasilkan software yang baik secepat mungkin dan sesering mungkin. Setelah bertahun-tahun melakukan retrospektif dengan ratusan tim scrum, Nokia mengembangkan kebutuhan dasar untuk mencapai pengembangan berulang : perulangan harus mempunyai batasan waktu dan setiap batasan waktu harus kurang dari 6 minggu panjangnya kode di akhir perulangan harus ditest oleh QA dan harus bekerja sebagaimana mestinya
Dari 30 orang yang menjawab bahwa mereka melaksanakan scrum, hanya setengahnya yang memenuhi prinsip pertama dari Agile Manifesto dengan standard Nokia. Kemudian saya lanjutkan bertanya apakah mereka melaksanakan standard Nokia untuk scrum: sebuah tim scrum harus mempunyai Product Owner dan tahu siapa orang tersebut. Product Owner harus mempunyai Product Backlog dengan perkiraan pengerjaan yang dibuat oleh tim tim harus mempunyai grafik Burndown dan tahu kecepatan mereka. Tidak boleh ada satu orangpun orang diluar tim yang mengganggu tim selama Sprint berlangsung. Dari 30 orang yang melaksanakan scrum, hanya 3 yang memenuhi standard Nokia untuk tim Scrum. Hanya tim dari ketiga orang ini yang bisa menerima investasi di masa depan oleh pemodal ventura yang saya wakili. Nilai utama dari buku Henrik ini adalah : kalau anda mengikuti praktek yang disebutkan dalam buku ini, anda akan punya Product Backlog, melakukan perkiraan untuk Product Backlog, sebuah Burndown Chart, dan anda tahu kecepatan tim anda sekaligus banyak praktek-praktek penting lainya sebagai syarat terbentuknya tim Scrum yang berfungsi dengan baik. Anda akan memenuhi standard Nokia untuk Scrum dan menjadikan pekerjaan anda sangat berharga di mata investor. Jika anda membentuk perusahaan startup, kemungkinan anda mendapat investasi dari pemodal ventura akan sangat besar. Anda mungkin adalah masa depan pengembangan perangkat lunak dan generasi selanjutnya dari sebuah produk yang mempimpin pasar di masa depan. Jeff Sutherland, Ph.D., Co-Creator of Scrum
Kata Pengantar Oleh Mike Cohn
Scrum dan Extreme Programming (XP) keduanya meminta tim untuk menyelesaikan satu bagian dari pekerjaan yang bisa dianggap bekerja dengan baik pada setiap perulangan. Perulangan-perulangan ini didesain pendek dan ada batasan waktunya. Fokus untuk menyelesaikan kode yang bekerja baik dalam waktu yang singkat berarti bahwa tim Scrum dan XP tidak mempunyai waktu berteori. Mereka tidak berusaha untuk menggambar diagram UML yang sempurna, menulis dokumen kebutuhan yang sempurna atau menulis kode yang dapat mengakomodasi semua kebutuhan di masa mendatang. Sebaliknya, tim scrum dan XP fokus dalam menyelesaikan pekerjaan di depan mata. Tim-tim ini menerima kenyataan bahwa mereka mungkin akan melakukan kesalahan di tengah jalan, tetapi mereka menyadari juga bahwa hal yang terbaik adalah menemukan kesalahan-kesalahan tersebut dan berhenti berfikir tataran toritis dan analitis, langsung saja menyelam, membuat tangan mereka kotor dan mulai membangun produknya. Fokus untuk terjun langsung daripada berteori adalah pembeda utama buku ini. Bahwa Henrik Kniberg faham tentang hal ini sangat kentara dari awal buku ini. Beliau tidak menawarkan deskripsi panjang lebar apa itu scrum; beliau hanya menyebutkan beberapa website sebagai rujukan. Sebaliknya, Henrik langsung loncat dengan menggambarkan bagaimanya timnya mengelola dan bekerja dengan product backlog mereka. Dari sana beliau bergerak melewati semua elemen-elemen lain serta praktek-praktek dari sebuah tim agile yang berjalan baik. Tanpa berteori. Tanpa banyak rujukan. Tanpa catatan kaki. Semua itu tidak dibutuhkan. Bukunya Henrik ini bukanlah buku yang menerangkan filosofi, tetapi menerangkan kenapa scrum bekerja baik atau kenapa anda mungkin mau mencoba ini atau itu. Ini adalah sebuah deskripsi bagaimana sebuah tim agile yang dijalankankan dengan sangat baik. Hal inilah kenapa sub judul buku ini Bagaimana kami mengimplementasikan Scrum sangat tepat sasaran. Hal ini bukan berarti bagaimana anda nantinya akan mengimplementasikan Scrum, tetapi bagaimana timnya Henrik mengimplementasikan Scrum. Anda mungkin bertanya ngapain peduli dengan bagaimana tim lain mengimplementasikan scrum?. Anda harus peduli karena kita semua bisa belajar bagaimana mengimplementasikan scrum dengan lebih baik dengan membaca cerita tim lain, terutama mereka yang melaksanakanya dengan sangat baik. Tidak ada dan tidak pernah ada daftar Scrum Best Practices karena tim dan karakteristik project sangat menentukan. Daripada memikirkan best practices, kita perlu tahu praktek yang baik disertai
konteks dimana praktek tersebut sukses diimplementasikan. Membaca cerita-cerita kesuksesan tim lain dan bagaimana mereka menjalankanya, maka anda akan siap menghadapi segala kesulitan yang akan menghadang ketika anda akan mengimplementasikan Scrum dan XP. Henrik menyediakan banyak sekali praktek yang baik sekaligus konteks dimana praktek tersebut dilaksanakan, hal ini sangat membantu kita belajar bagaimana mengimplementasikan Scrum dan XP dalam project anda sendiri. Mike Cohn Pengarang buku Agile Estimating and Planning and User Stories Applied for Agile Software Development.
Pendahuluan - Hey, Scrum keren!
Scrum kereen! Setidaknya buat kami (merujuk ke klien saya sekarang di Stockholm, yang namanya tidak bisa saya sebutkan di sini). Saya harap scrum juga bekerja dengan baik buat anda juga! Mungkin buku ini bisa membantu anda selama perjalanan panjang ini. Ini adalah pertama kali saya melihat metodologi pengembangan perangkat lunak (oh maaf Ken, sebuah framework) langsung bisa bekerja hanya dengan membaca bukunya. Colokin langsung bisa jalan. Kita semua seneng banget dengan scrum ini developer, tester dan manager. Scrum membantu kami keluar dari situasi berat dan membuat kita bisa mempertahankan fokus dan momentum dalam keadaan pasar yang buruk serta pengurangan pegawai. Saya tidak bisa bilang saya terkejut dengan ini, tapi bener lho, saya benerbener terkejut. Setelah awalnya mempelajari beberapa buku dengan topik Scrum, sepertinya bagus sekali, tapi kok sepertinya terlalu bagus, janganjangan hanya ilusi (yah kita semua tau keadaan ini, yang terlalu bagus untuk jadi kenyataan sebagian besar hanya menipu). Jadi saya cukup skeptis pada awalnya. Tetapi setelah menjalankan Scrum selama setahun, saya sangat terkesan dan puas (termasuk juga semua orang dalam tim saya), oleh karena itu sepertinya saya akan terus menggunakan Scrum sebagai default kalau ada project baru, kecuali ada alasan kuat untuk menghindarinya.
1
Intro
Anda akan segera memulai Scrum di organisasi anda. Atau mungkin anda sudah menggunakan Scrum dalam beberapa bulan terakhir. Anda sudah punya dasar-dasarnya, sudah membaca beberapa buku, mungkin malah sudah mengambil sertifikasi Scrum Master. Selamat! Tapi sebenernya anda merasa bingung. Dalam kata-kata Ken Schwaber, Scrum itu bukan metodologi, tapi sebuah framework. Itu artinya adalah Scrum tidak benar-benar memberitahu anda apa yang seharusnya anda lakukan. Sial! Berita bagusnya adalah saya akan memberitahu anda bagaimana saya mengimplementasikan Scrum, sedetail-detailnya!. Kabar buruknya adalah, uhmm, ini adalah bagaimana saya mengimplementasikan Scrum, bukan anda. Itu artinya anda tidak seharusnya melakukan hal yang sama persis. Malahan, saya mungkin akan mengimplementasikan Scrum dengan cara berbeda jika saya berada dalam situasi yang berbeda. Kekuatan sekaligus kelemahan Scrum adalah anda dipaksa untuk mengadaptasi Scrum terhadap situasi sepesifik yang anda hadapi. Pendekatan saya sekarang terhadap Scrum adalah hasil implementasi scrum dalam satu tahun percobaan dalam sebuah tim pengembangan yang terdiri dari sekitar 40 orang. Perusahaan ini berada dalam situasi yang gawat dengan lembur yang gila-gilaan, kualitas software yang buruk, kebakaran di mana mana, tenggat waktu yang selalu terlewat dan seterusnya. Persahaan ini memutuskan untuk menggunakan Scrum tetapi tidak menyelesaikan implementasinya, ini tugas saya. Buat sebagian besar orang-orang dalam tim pengembangaan saat itu, Scrum hanyalah buzzword yang sangat aneh dan terdengar gemanya dari satu kubikel ke kubikel lain tanpa adanya pengaruh yang nyata dalam pekerjaan mereka sehari-hari.
Selama setahun penuh kami mengimplementasikan Scrum ke setiap lapisan perusahaan, misalnya: mencoba ukuran tim (3-12 orang), panjang sprint yang berbeda-beda (2-6 minggu), cara berbeda untuk mendefinisikan selesai, format yang berbeda untuk product dan sprint backlog (excel, jira, kartu index), strategi pengetesan berbeda, cara-cara melakukan demo, cara berbeda untuk mensinkronisasikan beberapa tim Scrum dan seterusnya. Kami juga bereksperimen dengan praktek XP, misalnya: bagaimana melakukan continuous build, pair programming, test driven development dan seterusnya, juga bagaimana caranya mengkombinasikan Scrum dan XP. Ini adalah proses belajar yang terus menerus, jadi ceritanya tidak akan berakhir di sini. Saya sangat yakin perusahaan ini akan terus belajar (terutama jika mereka terus menjalankan retrospektive) dan mendapatkan ilham bagaimana cara terbaik mengimplementasikan Scrum untuk kasus mereka.
Disclaimer
Buku ini tidak mengklaim bahwa apa yang kami lakukan merepresentasikan satu satunya cara terbaik untuk mengimplementasikan Scrum! Buku ini hanya merepresentasikan satu jalan saja, hasilnya juga merupakan perbaikan terus-menerus selama kurun satu tahun. Anda bahkan mungkin memutuskan apa yang kami lakukan sepenuhnya salah. Semua yang ada dalam buku ini merefleksikan pendapat personal saya yang sangat subjectif, jadi tidak ada pernyataan resmi dari Crisp atau klien saya sekarang. Untuk alasan ini, saya secara sengaja menghindari untuk menyebutkan secara spesifik tentang produk atau orang atau instansi tertentu.
Kenapa saya menulis buku ini
Ketika belajar tentang scrum, saya membaca berbagai macam buku yang relevan dengan topik Scrum dan Agile, membaca berbagai macam situs dan forum Scrum, mengambil sertifikasi dari Ken Schwaber, memberondong beliau dengan pertanyaan-pertanyaan dan menghabiskan banyak sekali waktu dengan rekan kerja saya. Salah satu sumber yang sangat berharga sebenarnya adalah cerita perang itu sendiri. Cerita perang yang mengubah Scrum sebagai sebatas teori menjadi... yaaa.. bagaimana sebenarnya anda mengimplementasikanya!. Cerita perang ini sangat membantu saya mengidentifikasi (dan terkadang menghindari) kesalahan umum yang dilakukan oleh Scrum amatiran. Jadi, ini adalah kesempatan untuk berkontribusi balik. Saudara-saudara, inilah kisah perang saya....
Saya berharap buku ini memberikan umpan balik yang bermanfaat untuk anda-anda yang berada pada situasi yang sama. Jangan sungkan-sungkan untuk memberikan pendapat anda kepada saya!
Tapi, Apakah Scrum itu?
Oh maaf, anda masih benar-benar awam dengan Scrum atau XP? Kalau begitu anda mungkin ingin berhenti sebentar membaca buku ini dan melihat-lihat referensi mengendai kedua benda ini, silahkan ikuti tautan berikut ini: http://agilemanifesto.org/ http://www.mountaingoatsoftware.com/scrum http://www.xprogramming.com/xpmag/whatisxp.htm Kalau anda kesulitan dengan bahasa inggris, bisa baca Scrum guide terjemahan bahasa indonesia http://www.scrum.org/storage/scrumguides/Scrum%20Guide %20-%20ID.pdf#view=fit Kalau anda sudah nggak sabar, ga perlu sungkan-sungkan untuk melanjutkan membaca buku ini. Sebagian besar jargon dalam Scrum akan saya jelaskan nanti, jadi mungkin anda merasa cara ini lebih menyenangkan daripada membaca reference yang terlalu serius.
2
Bagaimana kami membuat product backlog
Product backlog adalah jantungnya Scrum. Ini adalah awal dimana semua dimulai. Product backlog pada dasarnya adalah daftar kebutuhan, atau story, atau fitur, atau apa sajalah maunya anda sebut. Product backlog berisi apa yang pelanggan kehendaki, dan yang paling penting ditulis dengan bahasanya pelanggan. Kami sebut ini adalah story, atau terkadang hanya backlog item. Story kami terdiri dari kolom-kolom berikut ini: ID Identifikasi unik, biasanya sih hanya nomor urut saja. Hal ini untuk menghindari kehilangan jejak story kalau kita mengganti namanya. Nama Nama story yang deskriptif tapi pendek saja. Dibuat cukup jelas, sehingga tim dan product owner memahami kira-kira apa sih yang kita omongin, dan juga cukup jelas untuk membedakannya dengan story yang lain. Normalnya 2-10 kata. Kepentingan Derajat kepentingan yang diberikan oleh product owner terhadap story ini. Misalnya 10, atau 150. Intinya sih semakin tinggi semakin penting. o Saya menghindari menggunakan istilah urutan prioritas, hal ini karena kalau prioritasnya 1 maka ya story ini yang paling penting, selanjutnya akan terlihat buruk kalau misalnya ada lagi story lain yang lebih penting, nah nilai prioritasnya jadi berapa? 0? -1? aneh kan! Perkiraan awal Perkiraan awal tim tentang berapa banyak kerja yang diperlukan untuk mengimplementasikan story ini dibandingkan dengan story yang lain. Unit perkiraan ini dinamakan story point dan biasanya kira-kira sama dengan nilai man days (satu hari kerja oleh satu orang) o Untuk menghitung perkiraan ini, tanyakan kepada tim kalau misalnya kalian mengerjakan story ini bersama
16 | SCRUM DAN XP SECARA PRAKTIS beberapa teman (jumlahnya ga terlalu sedikit, atau terlalu banyak, biasanya sih 2 orang) dan mengunci diri di dalam ruangan yang penuh makanan dan bekerja tanpa gangguan sama sekali, setelah berapa hari story ini bisa diselesaikan, didemokan, ditest dan bisa dibilang pantas dilepas?. Kalau jawabanya adalah 3 orang dikunci dalam satu ruangan akan memerlukan kira-kira 4 hari maka perkiraan awal nilainya adalah 12 story points (3 x 4 = 12). o Yang paling penting sih nggak membuat perkuraan yang pasti pas dengan mandays, (misalnya menganggap 2 story point itu sama dengan 2 hari), yang lebih penting adalah mendapatkan perkiraan relatif yang benar, (misalnya 2 story point harusnya memerlukan waktu penyelesaian setengah dari 4 story point). Demo deskripsi umum bagaimana cara story ini didemokan pada waktu sprint demo. Intinya sih gimana cara mengetes story ini. Lakukan ini, klik itu, lalu ini akan muncul. o Kalau anda mempraktekkan TDD (test-driven development) deskripsi ini bisa digunakan sebagai pseudo-code untuk membuat tes. Catatan informasi lain yang mungkin diperlukan, klarifikasi, referensi ke informasi lain, dst. Biasanya cukup panjang mendetail. PRODUCT BACKLOG (Contoh) ID Nama Kepen Perk Demo tingan iraa n wak tu 1 Setoran 30 5 Login, buka halaman setoran, setor 10jt, buka halaman saldo dan cek saldo sudah bertambah 10jt.
Catatan
Lihat detail transaksi pengguna.
10
Login, klik transaksi. setor sejumlah uang. Lakukan transaksi,
Perlu UML sequence diagram. Tidak perlu khawatir tentang enkripsi untuk sekarang. Gunakan paging untuk menghindari query ke
BAGAIMANA KAMI MEMBUAT PRODUCT BACKLOGS | 17 cek apakah detail database transaksi berlebihan. ditampilkan Desain sama dengan benar. persis dengan halaman menampilkan semua daftar pengguna. Kami bereksperimen dengan banyak sekali kolom-kolom lain, tapi pada akhirnya, keenam kolom di ataslah yang sebenarnya selalu kita pakai di setiap sprint. Kita biasanya mencatat story ini dalam dokumen Excel dan diletakkan dalam share folder agar beberapa user bisa melakukan edit secara bersamaan. Secara resmi Product Owner yang memiliki dokumen ini, tetapi kita tidak ingin mencegah user lain mengedit dokumen ini. Seringkali developer ingin membuka dokumen ini untuk mengklarifikasi sesuatu atau mengubah perkiraan. Untuk beberapa alasan, kita tidak meletakkan dokumen ini dalam version control, kita cukup meletakkan dalam share folder. Hal ini adalah cara yang paling sederhana untuk memudahkan anggota team mengupdate dokumen tanpa menyebabkan dokumen ini dikunci atau terjadi konflik. Nyaris semua artefak yang lain kita letakkan dalam version control.
Kolom tambahan dalam story
Terkadang kita menambahkan beberapa kolom lain dalam dokumen product backlog, terutama karena alasan kenyamanan untuk membantu product owner mengurutkan kepentingan dari story. Kategori pengklasifikasian dari story, misalnya kita bisa buat kategori back office atau core component. Dengan begitu, product owner bisa dengan gampang menyaring semua story yang dikategorikan sebagai back office dan mengeset kepentinganya sebagai rendah, dst. Komponen Biasanya berbentuk checkbox dalam Excel, dimana satu story bisa melibatkan lebih dari satu komponen, fungsinya untuk mendaftar komponen apa saja dalam aplikasi yang terlibat, misalnya database, client, server, background process, dst. Hal ini sangat berguna kalau melibatkan beberapa tim scrum, misalnya ada tim back office dan tim yang mengurusi client program, kedua tim ini bisa dengan gampang memilih mana story yang
18 | SCRUM DAN XP SECARA PRAKTIS akan dikerjakan oleh tim berdasarkan data dari kolom komponen ini. Pengusul product owner mungkin ingin menyimpan siapa yang mengusulkan story ini, terutama berguna untuk mengupdate ke pengusul tentang progress dari feature yang diusulkanya. Bug tracking ID kalau kita punya bug tracking system, misalnya jira atau redmine, kolom ini sangat berguna untuk mencatat hubungan antara story dengan bug id.
Bagaimana mempertahankan product backlog di level bisnis
Jika product owner punya latar belakang teknis, mungkin dia akan membuat story seperti Menambah index ke table event, kenapa dia ingin membuat story seperti itu? Alasannya mungkin karena ingin mencapai tujuan seperti mempercepat pencarian event di modul back office. Pada kenyataanya, mungkin yang menyebabkan halaman event lambat bukanlah index pada table event. Mungkin penyebabnya adalah sesuatu yang benar-benar berbeda. Tim biasanya lebih cocok untuk mencari tahu apakah penyebab form event lambat dan mencari tahu bagaimana memecahkan masalah ini, product owner harus fokus pada kebutuhan bisnis. Ketika saya melihat story yang berbau-bau teknis seperti ini, saya akan langsung bertanya kepada product owner rentetan pertanyaan yang diawali dengan tapi kenapa hingga saya bisa melihat akar tujuan dari dibuatnya story semacam ini. Kemudian kami akan menulis ulang story dengan istilah yang lebih cocok menggambarkan tujuan sebenarnya (buat fitur pencarian form event menjadi lebih cepat). Isi story sebelumnya yang berbau sangat teknis menjadi catatan kaki saja (membuat index di table event kemungkinan akan bisa memecahkan masalah lambatnya pencarian di form event ini).
3
Bagaimana kami bersiap-siap untuk melaksanakan rapat perencanaan sprint
OK, Hari H rapat perencanaan sprint akan segera tiba dengan cepat. Satu pelajaran yang selalu kita dapat berulang-ulang adalah: Pelajaran: Pastikan produk backlog sudah siap sebelum rapat perencanaan sprint. Dan apakah artinya? Apakah artinya bahwa semua story harus sudah siap dengan matang? Apakah juga artinya semua perkiraan harus sudah benar? Apakah semua prioritas sudah ditentukan? Oh tidak, tidak dan tidak! Itu semua sebenarnya berarti bahwa: Produk backlog harus sudah ada! (kebayang ga?) Harus ada tepat satu produk backlog dan juga satu orang produk owner (setiap satu produk satu product owner, tidak sebaliknya) Semua item yang dikategorikan penting, harus punya nilai derajat kepentingan yang berbeda. o Sebenarnya oke juga kalau item yang punya derajat kepentingan rendah mempunyai nilai kepentingan yang sama, karena mungkin malah tidak akan masuk dalam sprint. o Semua story yang kemungkinan kecil akan masuk dalam sprint yang sedang direncanakan perlu diberi nilai kepentingan tersendiri dan sama untuk semua story sejenis. o Nilai kepentingan ini digunakan hanya untuk mengurutkan story berdasarkan kepentinganya. Jadi kalau item A punya nilai kepentingan 20 dan item B mempunyai nilai kepentingan 100, maka item A lebih penting dari item B. Hal ini tidak berarti bahwa item B lima kali lebih penting dari item A. Kalaupun item B mempunyai nilai kepentingan 21, tetap saja item B lebih penting dari item A, artinya juga tetap sama!. o Penting juga untuk memberikan jarak antara dua derajat kepentingan, karena kalau misalnya item C muncul dan
20 | SCRUM AND XP FROM THE TRENCHES ternyata item ini lebih penting dari A tapi tidak lebih penting dari B. Tentu saja anda bisa saja menggunakan nilai kepentingan 20,3 untuk item C, tapi kan kelihatan jelek, jadi ya kita beri saja jarak nilai kepentingan antara item A dan item B. Product owner harus mengerti bahwa setiap story (biasanya dia ini adalah yang membuat story, tetapi terkadang seseorang meminta product owner untuk menambahkan feature, yang kemudian product owner bisa membuat prioritas terhadap permintaan ini). Product owner tidak perlu tahu secara pasti apa yang perlu diimpelementasikan, tapi dia perlu mengerti kenapa story tersebut ada.
Catatan: Orang selain product owner boleh menambahkan story ke product backlog. Tetapi tidak boleh memberi nilai kepentingan, karena ini adalah hak prerogatif product owner. Mereka juga tidak boleh memberi nilai perkiraan waktu pengerjaan, karena ini adalah haknya anggota tim. Pendekatan lain yang juga kami coba dan evaluasi antara lain: Menggunakan Jira (bug tracking system yang kami gunakan) untuk mencatat product backlog. Sebagian besar product owner mengatakan kalau Jira terlalu repot, banyak klik sini klik sana untuk membuat backlog. Excel cukup bagus dan mudah untuk langsung mengedit product backlog. Anda bisa dengan mudah mewarnai baris atau kolom, mengatur item, menambah kolom, membuat catatan, import dan export data, dsb. Menggunakan perkakas agile seperti VersionOne, ScrumWorks, Xplanner, dsb. Kami belum sempet mengetes perkakas-perkakas ini, dan kemungkinan akan mengetesnya di masa depan.
4
Bagaimana kami menjalankan perencanaan sprint
Perencanaan Spring adalah rapat yang sangat penting, bisa dibilang even paling penting dalam Scrum (ini pendapat subjektif tentu saja). Rapat perencanaan sprint yang diadakan asal-asalan bisa saja membuat satu sprint berantakan. Tujuan utama rapat perencanaan sprint adalah memberikan tim cukup informasi untuk bisa bekerja tanpa diganggu dalam beberapa minggu, juga untuk membuat product owner percaya bahwa tim sudah cukup informasi untuk bekerja tanpa perlu diganggu selama sprint berlangsung. OK, mungkin masih cukup membingungkan, Jadi output kongkrit dari rapat perencanaan sprint ini adalah: Tujuan Sprint. Daftar anggota tim (dan level komitmen mereka, kalau misalnya tidak bisa 100%). Sprint backlog (daftar story yang akan diikutkan dalam sprint). Tanggal demo yang pasti. Tempat dan waktu yang jelas untuk pelaksanaan rapat scrum harian.
Kenapa product owner harus menghadiri rapat ini
Terkadang product owner tidak mau menghabiskan waktu berjam-jam dengan tim untuk melaksanakan rapat perencanaan sprint. Teman-teman, saya sudah mendaftar semua apa yang saya mau. Saya tidak punya waktu menghadiri rapat perencanaan sprint. Ini pertanda ada masalah sangat serius!. Alasan utama kenapa semua anggota tim dan product owner harus menghadiri rapat perencanaan scrum adalah karena setiap story akan berisi tiga variabel yang sangat bergantung satu dengan yang lainya.
22 | SCRUM AND XP SECARA PRAKTIS
cakupan
kepentingan
perkiraan
Cakupan dan kepentingan ditentukan oleh product owner. Perkiraan ditentukan oleh tim. Selama rapat perencanaan sprint berlangsung, ketiga variabel ini dihitung dengan seksama dan dipikirkan dengan masak-masak secara terus-menerus dalam dialog tatap muka antara tim dan product owner. Biasanya product owner memulai rapat dengan merangkum tujuan sprint dan story yang paling penting. Kemudian, tim akan melihat satu per satu story dengan seksama dan memperkirakan waktu pengerjaan setiap story, dimulai dari yang paling penting. Ketika tim melakukan perkiraan, tim kemungkinan bertanya mengenai cakupan dari story, misalnya : apakah story 'hapus pengguna' ini mencakup semua transaksi dengan status pending dari pengguna tersebut serta membatalkanya? di beberapa kasus, jawaban dari product owner mungkin akan membuat tim sedikit terkejut, kemudian merevisi perkiraan mereka terhadap story ini. Di kasus lainnya, waktu perkiraan untuk story bisa juga tidak sesuai dengan harapan product owner. Hal ini juga akan membuat product owner mengubah derajat kepentingan story tersebut. Atau mungkin mengubah cakupan dari story, yang kemudian membuat tim harus mengulang perkiraanya, dan seterusnya, dan seterusnya. Tipe kolaborasi langsung seperti ini adalah dasar dari Scrum, dan pada faktanya adalah dasar dari pegembangan perangkat lunak yang lincah (Agile). Bagaimana kalau product owner kekeuh tidak mau menghadiri rapat perencanaan sprint? Saya biasanya akan melaksanakan beberapa strategi di bawah ini, saya sebutkan berdasarkan urutan strategi ini saya ajukan kepada product owner: Berusaha membantu product owner memahami kenapa partisipasi langsung dari product owner sangat krusial, dengan begitu saya berharap product owner akan mengubah pikiranya.
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 23 Berusaha meminta salah satu anggota tim secara suka rela menjadi pengganti product owner selama rapat. Kemudian memberitahu product owner Karena anda tidak bisa menghadiri rapat, kami akan memberikan kesempatan kepada Jeff bertindak sebagai pengganti anda. Jeff akan berkuasa penuh untuk merubah priroritas dan cakupan dari setiap story atas nama anda selama rapat. Saya menyarankan anda berdiskusi denganya sebelum rapat. Jika anda tidak sreg dengan Jeff sebagai pengganti, tolong usulkan nama lain, selama orang tersebut bisa bergabung dengan kami selama rapat berlangsung Berusaha meyakinkan jajaran management untuk menunjuk product owner yang baru. Menunda pelaksanaan sprint hingga product owner punya waktu luang bergabung dalam rapat. Selama hal ini berlangsung, saya menolak berkomitmen mengerjakan apapun!. Biarkan tim menghabiskan setiap waktu melakukan apapun yang mereka pikir penting untuk dilakukan di hari itu.
Kenapa kualitas itu tidak bisa dinegosiasikan
Dalam segitiga di atas saya secara sengaja menghindari menyebutkan variabel ke empat: kualitas. Saya akan mencoba membedakan antara kualitas internal dan kualitas external. Kualitas external adalah penilaian pengguna terhadap aplikasi. Antar muka aplikasi yang tidak nyaman dan kinerja yang lambat adalah contoh kualitas external yang buruk. Kualitas internal menunjuk pada hal-hal yang biasanya tidak terlihat dari sisi pengguna, tetapi mempunyai efek yang sangat besar terhadap kemudahan pemeliharaan sistem. Misalnya desain yang konsisten, jangkauan tes, kemudahan kode untuk dibaca, refactoring, dan seterusnya. Secara umum, sebuah sistem dengan kualitas internal yang tinggi masih bisa mempunyai kualitas external yang buruk. Tetapi system dengan kualitas internal yang buruk, sangat jarang yang mempunyai kualitas external yang baik. Sangat sulit membuat sesuatu yang bagus di atas fondasi yang busuk. Saya memperlakukan kualitas external sebagai bagian dari cakupan sistem. Dalam beberapa kasus hal ini bisa jadi kebutuhan bisnis yang penting untuk melepas sistem yang mempunyai antar muka lemot,
24 | SCRUM AND XP SECARA PRAKTIS kemudian secara cepat melepas versi perbaikanya kemudian. Saya serahkan keputusan ini kepada product owner, kerana dia yang bertanggung jawab menentukan cakupan sistem. Tetapi untuk kualitas internal, tidak bisa didiskusikan sama sekali. Ini adalah tanggung jawab tim untuk mempertahankan kualitas internal sistem dalam level yang tinggi di keadaan apapun, kualitas internal tidak bisa dinegosiasikan, titik!.
(umm, ok, nyaris tidak mungkin)
Jadi bagaimana kita membedakan antara isu-isu kualitas internal dan kualitas external? Sebagai contoh, product owner bilang Baiklah kawan-kawan, saya hormati perkiraan kalian bahwa story ini bernilai 6 story point, tetapi saya yakin kalian bisa memotong perkiraan ini menjadi setengahnya kalau berusaha sedikit lebih keras lagi. Aha! Dia sedang berusaha membuat kualitas internal sebagai variabel yang bisa ditawar. Bagaimana saya bisa tahu? Karena dia ingin kita mengurangi perkiraan waktu pengerjaan story tanpa mengurangi cakupanya. Kata-kata memotong waktu pekerjaan seharusnya memicu alarm di kepala anda... Dan kenapa kita tidak boleh membiarkan ini terjadi? Pengalaman saya mengatakan bahwa mengorbankan kualitas internal adalah ide yang buruk, buruk sekali. Sekalinya kode dibiarkan menjadi berantakan, akan sangat susah mengembalikan kualitasnya ke keadaan semula. Sebaliknya, saya biasanya menggiring diskusi ke arah perubahan cakupan. Karena story ini sangat penting untuk dibuat secepat mungkin, kita bisa mengurangi cakupanya sehingga bisa diselesaikan lebih cepat? Mungkin dengan menyederhanakan penanganan kesalahan dan membuat story terpisah untuk 'penanganan kesalahan yang lengkap' di sprint berikutnya? Atau mungkin kita bisa mengurangi prioritas story lain agar kita bisa fokus mengerjakan story ini? Sekalinya product owner mengetahui bahwa kualitas internal tidak bisa ditawar, dia biasanya menjadi lebih pandai memanipulasi dan bermain dengan variabel yang lainya.
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 25
Rapat perencanaan Sprint yang berlarut-larut
Hal yang paling sulit dalam rapat perencanaan sprint adalah: 1) Orang-orang biasanya tidak berfikir bahwa ini akan berlangsung cukup lama. 2) Tapi memang begitu kenyataanya, lama sekali... Semua hal dalam scrum itu dibatasi oleh waktu. Saya senang sekali dengan konsep ini, sederhana dan aturan yang konsisten. Jadi kita akan mematuhi aturan ini. Jadi apa yang kita lakukan kalau rapat perencanaan sprint yang mempunyai waktu terbatas ini segera berakhir tetapi tidak ada tanda-tanda bahwa tujuan sprint dan sprint backlog selesai dikerjakan? Apakah kita akan langsung berhenti di titik ini??? atau memperpanjang rapat selama satu atau dua jam? Atau kita bialng selesai saja di sini untuk kemudian melanjutkan keesokan harinya? Situasi ini sering kali terjadi, terutama kalau timnya masih baru. Jadi apa yang harus anda lakukan? Saya tidak tahu. Apa yang kami lakukan? Uhm, ya biasanya saya menghentikan rapat secara brutal. Selesai sudah. Biarkan sprintnya berantakan. Lebih spesifik lagi saya bilang ke tim dan product owner Jadi, rapat ini akan berakhir 10 menit lagi. Kita tidak punya rencana sprint sih sebenernya. Jadi kita lakukan aja apa yang kita punya sekarang, atau mungkin, kalau mau, kita jadwalkan lagi rapat perencanaan sprint lanjutan besok dari jam 8 pagi?. Anda bisa tebak apa jawaban mereka :o) Saya sudah pernah mencoba membiarkan rapat perencanaan sprint ini berlarut-larut. Biasanya sih nggak ada gunanya, karena semua orang udah capek banget. Jika memang mereka belum menghasilkan rencana sprint dalam 2 8 jam (atau terserah berapa panjang jangka waktu yang anda gunakan), mereka tetap saja tidak bisa menyelesaikanya walaupun diberi tambahan waktu satu jam. Opsi berikutnya sebenarnya cukup baik, menjadwalkan rapat baru di hari berikutnya. Kecuali kenyataan bahwa orang-orang biasanya tidak sabar dan ingin saja segera memulai sprint, dan tidak mau lagi menghabiskan waktu berjam-jam membuat rencana. Jadi saya hentikan saja rapatnya. Dan ya, sprint akan berantakan. Hikmahnya adalah tim akan belajar pelajaran yang sangat berharga, di rapat perencanaan sprint berikutnya akan berjalan lebih efisien. Ditambah lagi, orang-orang akan lebih bisa memahami kalau kita mengajukan rencana rapat yang cukup panjang dan melelahkan, sesuatu yang sebelumnya mereka anggap terlalu lama ternyata masih tidak cukup juga.
26 | SCRUM AND XP SECARA PRAKTIS Belajarlah untuk mempertahankan batasan waktu ini, belajarlah menetapkan panjang batasan waktu yang masuk akal. Aturan ini berlaku untuk durasi rapat sekaligus durasi berjalanya sprint.
Agenda rapat perencanaan sprint
Resiko terjadinya rapat yang berlarut-larut dapat dikurangi dengan menyiapkan jadwal yang sudah ditentukan sebelumnya untuk rapat perencanaan sprint ini. Ini adalah contoh jadwal rapat yang biasanya kami buat. Rapart perencanaan sprint: 13:00 17:00 (istirahat 10 menit setiap jam) 13:00 13:30. Product owner akan menerangkan tujuan sprint dan merangkum product backlog. Waktu, tanggal dan tempat demo ditentukan. 13:30 15:00. Tim melakukan perkiraan waktu pengerjaan, memecah item ke ukuran lebih kecil kalau diperlukan. Product owner mengupdate nilai kepentingan kalau diperlukan. Item diklarifikasi. Kolom Bagaimana cara mendemokan di product backlog diisi untuk semua item yang penting-penting. 15:00 16:00. Tim memilih story yang akan dimasukkan dalam sprint. Lakukan perhitungan kecepatan untuk mengecek apakah sprint ini realistis apa tidak. 16:00 17:00. Pilih tempat dan waktu untuk rapat harian scrum (kalau misalnya tempat dan waktunya berbeda dengan sprint sebelumnya). Lakukan pemecahan story menjadi tugas-tugas yang lebih kecil. Jadwal ini tidak mutlak dipaksakan ketika rapat berlangsung. Scrum master mungkin akan membuat agenda rapatnya menjadi lebih panjang atau lebih pendek jika diperlukan selama rapat berlangsung.
Menetapkan panjang sprint
Salah satu output dari rapat perencanaan sprint adalah penetapan tanggal demo. Hal ini juga berarti anda harus menentukan panjang sprint. Jadi berapa panjang sprint yang bagus? Kalau boleh bilang, sprint yang pendek itu bagus. Hal ini memungkinkan perusahaan menjadi lebih lincah (agile), misalnya bisa berubah arah sering-sering. Sprint yang pendek = siklus umpan balik yang pendek =
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 27 delivery yang lebih sering = umpan balik pelanggan yang lebih sering = kalau berjalan ke arah yang salah bisa cepat diperbaiki = belajar dan berkembang lebih cepat dan seterusnya. Tapi tentu saja, sprint yang panjang juga bagus. Tim mempunyai waktu lebih banyak untuk membangun momentum, mereka mempunyai ruang yang cukup untuk menyelesaikan masalah dan tetap bisa mencapai tujuan sprint, overhead yang lebih kecil disebabkan rapat perencanaan sprint yang lebih sedikit, begitu juga waktu yang dihabiskan untuk demo, dan sterusnya, dan seterusnya. Secara umum product owner lebih senang sprint yang pendek dan developer lebih senang sprint yang lebih panjang. Jadi panjang sprint itu lebih merupakan kompromi kedua fihak. Kami berkeksperimen dengan panjang sprint ini cukup sering, dan akhirnya menemukan panjang sprint yang optimal : 3 minggu. Sebagian besar tim kami (tetapi tentu saja tidak semua) menetapkan panjang sprint adalah 3 minggu. Cukup pendek untuk memberikan kelincahan kepada perusahaan, cukup panjang buat tim untuk memperoleh irama bekerja dan juga menyelesaikan masalahmasalah yang timbul selama sprint. Satu hal yang kami simpulkan : silahkan mencoba-coba panjang sprint yang berbeda pada awal pembentukan tim. Jangan menghabiskan waktu menganalisis hal ini, langsung saja pilih waktu yang dirasa cukup dan cobalah menggunakan panjang sprint yang dipilih ini dalam satu atau dua sprint, kemudian ganti lagi panjangnya sampai ditemukan nilai yang optimal yang sesuai karakteristik tim, pelanggan, product owner dan proyek itu sendiri. Tetapi perlu diperhatikan, setelah anda memutuskan panjang yang dirasa paling optimal, gunakan terus selama beberapa waktu. Setelah beberapa bulan mencoba-coba kami menemukan bahwa 3 minggu itu nilai yang cukup bagus. Jadi ya kita menggunakan ukuran 3 minggu ini, titik. Terkadang 3 minggu ini terasa sedikit teralalu panjang, atau terkadang sedikit terlalu pendek. Tetapi dengan mempertahankan panjang yang sama, hal ini menjadi semacam detak jantung yang teratur di mana semua orang merasa nyaman. Tidak ada lagi argumentasi tetang kapan tanggal release, karena semua pada tahu bahwa setiap 3 minggu pasti ada release, titik.
Mendefinisikan tujuan sprint
28 | SCRUM AND XP SECARA PRAKTIS Sering kali terjadi, pada satu titik tertentu dalam rapat perencanaan sprint seseorang bertanya jadi apa tujuan dari sprint ini? semua orang memandang kosong ke arah teman lainya seraya mengangkat bahu, sedangkan produk owner garuk-garuk kepala dan menaikkan alisnya tanda tak tahu. Banyak alasan kenapa susah sekali menentukan tujuan sprint. Tetapi saya menemukan bahwa banyak manfaat didapat kalau kita bisa menentukan tujuan sprint. Lebih baik punya tujuan yang sedikit samar-samar dari pada tidak punya tujuan sama sekali. Tujuanya bisa saja sesuatu yang cukup umum, misalnya bikin banyak duit atau menyelesaikan tiga story terpenting atau kita buat bos besar terkesan atau membuat sistem cukup bagus untuk dilepas sebagai versi beta atau menambahkan sistem back office yang cukup atau apa saja yang terlintas dalam fikiran. Yang paling penting dari tujuan sprint adalah ini menggunakan istilah bisnis, tidak mengandung istilah teknis. Orang lain di luar tim harus bisa faham mengendai tujuan sprint ini. Tujuan sprint harus menjawab pertanyaan dasar kenapa kita melakukan sprint ini? Kenapa nggak liburan aja?. Kenyataanya, cara terbaik untuk menentukan tujuan sprint ini adalah benar-benar menanyakan pertanyaan di atas kepada product owner, serius!. Tujuan ini harus sesuatu yang belum pernah dicapai berikutnya. membuat bos besar terkesan bisa saja tujuan yang baik, tetapi kalau si bis sudah terkesan dengan keadaan sistem sekarang, ya berarti sudah tercapai dong tujuanya, semua orang bisa pergi liburan dan tujuan tetap saja tercapai. Tujuan sprint terkadang terdengar konyol dan sedikit mengada-ada ketika ditetapkan pada waktu rapat perencanaan sprint, tetapi biasanya menjadi berguna ketika sedang di tengah-tengah sprint, ketika semua orang mulai bingung dengan apa yang seharusnya meraka lakukan. Kalau anda mempunyai beberapa tim scrum yang berjalan berbarengan (seperti kami) dan mengerjakan proyek berbeda-beda, hal ini sangat berguna untuk membuat daftar tujuan sprint dari semua sprint ke dalam satu halaman wiki (atau apa saja deh) dan meletakkanya dalam tempat di mana semua orang dalam perusahaan (tidak cuma management level atas) tahu apa yang sedang dilakukan perusahaan, dan alasanya kenapa!.
Memutuskan mana saja story yang akan diikutkan dalam sprint
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 29 Salah satu aktivitas utama dalam rapat perencanaan sprint adalah menentukan story mana saja yang akan diikutkan dalam sprint. Lebih sepesifik lagi, story mana saja yang ada dalam product backlog yang dicopy paste ke dalam sprint backlog.
Perhatikan gambar di atas. Setiap kotak merepresentasikan sebuah story, diurutkan berdasarkan derajat kepentinganya. Story yang paling penting berada di tempat paling atas dari daftar ini. Ukuran dari kotak merepresentasikan perkiraan ukuran (waktu pengerjaan) dari story (diukur menggunakan story point). Tinggi dari kurung kurawal sebelah kiri merepresentasikan perkiraan kecepatan tim, contohnya: berapa banyak story point yang kira-kira bisa diselesaikan tim pada sprint berikutnya. Sprint backlog di sebelah kanan adalah sebagian dari story dari product backlog. Sprint backlog juga merepresentasikan daftar sotry yang akan dikerjakan oleh tim di sprint ini. Tim yang akan menentukan berapa banyak story yang akan diikutkan dalam sprint. Bukan product owner atau orang lain. Hal ini akan menimbulkan beberapa pertanyaan: 1. Bagaimana tim memutuskan story apa saja yang akan diikutkan dalam sprint? 2. Bagaimana product owner bisa mempengaruhi keputusan mereka? Saya akan mulai dengan pertanyaan kedua.
30 | SCRUM AND XP SECARA PRAKTIS
Bagaimana product owner dapat mempengaruhi story mana yang akan diikutkan dalam sprint?
Misalnya kita berada dalam situasi seperti di bawah ini pada waktu rapat perencanaan sprint.
Perkiraan kecepatan
Product owner kecewa karena story D tidak akan diikutkan dalam sprint. Apa pilihan-pilihan yang bisa dibuat oleh product owner dalam rapat tersebut? Satu pilihan adalah memprioritaskan ulang. Kalau dia memindahkan D menjadi story yang paling penting, tim wajib mematuhi hal ini dan mengikut sertakan story D ke dalam sprint, dalam hal ini berarti juga mengeluarkan story C dari sprint.
Pilihan 1
Perkiraan kecepatan
Pilihan kedua adalah mengganti cakupan misalnya dengan mengurangi cakupan dari sotry A hingga tim yakin bisa memasukkan D dalam sprint.
Pilihan 2
Perkiraan kecepatan
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 31
Pilihan ketiga adalah dengan memecah story. Product owner mungkin memutuskan bahwa beberapa bagian dari story A tidak terlalu penting, jadi dia memecah story A menjadi 2: A1 dan A2, kemudian memberikan derajat kepentingan yang berbeda.
Pilihan 3
Perkiraan kecepatan
Seperti yang anda lihat, walaupun product owner biasanya tidak bisa mengontrol perkiraan kecepatan, ternyata ada banyak cara dimana dia bisa mempengaruhi story mana saja yang bisa masuk dalam sprint.
Bagaimana tim menentukan story mana saja yang diikutkan dalam sprint?
Kami menggunakan cara berikut ini: 1. Tebak-tebak buah manggis 2. Perhitungan kecepatan Memperkirakan menggunakan tebak-tebak buah manggis Scrum master : Kawan-kawan, kira-kira bisa ga kita beresin story A di sprint ini? (menunjuk ke story yang paling penting dalam product backlog) Lisa: Hmm, keknya sih bisa. Kita punya waktu 3 minggu, dan ini keknya sih feature yang gampang Scrum master: OK, gimana kalau story B juga? (menunjuk ke story paling penting ke dua)
32 | SCRUM AND XP SECARA PRAKTIS
Tom & Lisa in unison: Keciiillll Scrum master: OK, kalau story A lanjut B dan terakhir C? Sam (to product owner): Story C itu termasuk error handling yang lengkap? Product owner: nggak kok, dilewatin aja dulu, bikin error handling sederhana aja Sam: Kalau gitu C juga bisa masuk juga deh Scrum master: Oke, kalau story D juga? Lisa: Hmm.... Tom: Keknya sih bisa kali yah Scrum master: 90% yakin? 50%? Lisa & Tom: Yaaaa kira-kira 90% deh. Scrum master: Ok, berarti story D masuk juga. Gimana kalau E dimasukin? Sam: Mungkin aja sih. Scrum master: 90%? 50%? Sam: kalau gw sih yaaa deket-deket 50%. Lisa: Gw gak yakin Scrum master: OK, kita tinggalin aja si E ini. Kita berkomitmen untuk menyelesaikan A, B, C dan D. Kita tentu saja akan mencoba menyelesaikan E kalau bisa, tapi kita anggap bonus aja, kita gak berkomitmen menyelesaikanya di sprint ini, kalau waktunya gak cukup ya ditunda ke sprint berikutnya. Gimana pendapat kalian? Semua-muanya: Okeeeee!
Tebak-tebak buah manggis cukup berhasil untuk tim yang kecil dan sprint yang pendek. Memperkirakan menggunakan perhitungan kecepatan Teknik ini melibatkan dua langkah: 1. Memutuskan kira-kira berapa kecepatan tim sampai sekarang 2. Menghitung berapa banyak story yang bisa kita ikutkan dalam sprint tanpa melewati batas kecepatan yang sudah dihitung di poin 1. Kecepatan adalah nilai yang menunjukkan berapa banyak pekerjaan yang bisa diselesaikan per satuan waktu, dimana setiap item dinilai besarnya dari perkiraan besarnya item pada waktu rapat perencanaan sprint. Karena bisa saja setelah sprint berjalan dan mulai coding, diketahui ternyata perhitungan besarnya item tidak sesuai perkiraan. Jadi yang kita gunakan adalah nilai perkiraan pada awalnya, bukan nilai aktualnya.
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 33
Gambar di bawah ini menunjukkan contoh dari perkiraan kecepatan pada saat awal dari sprint dan kecepatan sebenarnya pada saat akhir dari sprint. Setiap kotak adalah sebuah story, dan angka di dalam kotak adalah perkiraan awal dari story tersebut.
Awal sprint
Selesai Selesai Perkiraan kecepatan = 26 Selesai Nyaris selesai Tidak selesai
Akhir sprint
Kecepatan sebenarnya = 18
Perhatikan bahwa perhitungan kecepatan akan menggunakan perkiraan awal dari setiap story. Sedangkan update di tengah jalan terhadap nilai perkiraan tersebut diabaikan. Ya ya ya saya bisa dengar suara keberatan anda: Lah gimana ini? Tinggi rendahnya kecepatan kan biasanya bergantung banyak faktor! Bisa karena programmer yang facebookan mulu, perkiraan awal yang ngawur, cakupan yang berubah, gangguan lain yang tidak direncanakan (ada yang sakit misalnya), de el el! Saya setuju, ini adalah nilai yang kasar banget. Tapi ini cukup bermanfaat, apalagi kalau dibandingkan dengan tidak ada nilai kecepatan sama sekali!. Hal ini juga memberikan kenyataan pahit, Apapun alasanya, ternyata terdapat perbedaan antara berapa banyak yang kita pikir kita bisa kita kerjakan dan berapa banyak sebenarnya yang bisa kita kerjakan. Bagaimana dengan story yang nyaris selesai? Kenapa kita tidak dapat nilai proporsional dengan sebagian yang sudah kita selesaikan? Ya karena ini untuk menekankan bahwa Scrum (dan pada kenyataanya semua agile software development dan lean manufacturing secara umum) itu hanya mengihitung hal-hal yang sudah selesai, siap dipasarkan, selesai! Nilai dari hal-hal yang setengah jadi adalah nol besar (malah mungkin bisa negatif). Silahkan merujuk ke buku Managing the Design Factory dari Donald Reinertsen atau salah satu buku dari pasangan Poppendieck untuk keterangan lebih lanjut mengenai topik ini. Jadi dengan cara bagaimana kita memperkirakan kecepatan?
34 | SCRUM AND XP SECARA PRAKTIS
Satu cara yang sangat sederhana untuk memperkirakan kecepatan adalah dengan melihat catatan tim sebelumnya. Berapa kecepatan mereka di beberapa sprint sebelumnya? Kemudian asumsukan bahwa kecepatan mereka kira-kira sama seperti itu untuk sprint berikutnya. Teknik ini biasa disebut dengan cuaca kemarin. Hal ini bisa digunakan kalau tim sudah melakukan beberapa sprint sebelumnya (jadi secara statistik datanya tersedia) dan akan melakukan sprint berikutnya dengan keadaan dan cara yang nyaris sama, timnya sama, suasana kerja sama, proyek sama dan seterusnya. Hal ini tentu saja tidak selalu memungkinkan. Cara yang lebih canggih adalah dengan membuat perhitungan sederhana. Misalnya kita merencanakan sprint dengan panjang 3 minggu (15 hari kerja) dengan 4 orang anggota tim. Lisa akan mengambil cuti selama 3 hari, Dave cuma bisa mengalokasikan 50% waktunya dan akan mengambil cuti 1 hari. Nah kita bisa lihat daftar di bawah ini
Jumlah hari kerja Tom Lisa Sam Dave Total 15 13 15 7 50 man days
Ternyata ada 50 man days yang tersedia untuk sprint kali ini. Apakah ini adalah perkiraan kecepatan tim? Bukan! Karena unit perkiraan kecepatan kita adalah story point, dalam kasus kita ini, kira-kira mendekati dengan nilai man days yang ideal. Nilai man days yang ideal adalah satu hari penuh yang efektif, tanpa gangguan sama sekali, yang tentu saja sangat jarang terjadi. Apalagi kalau kita hitung juga kerjaan yang tidak direncanakan ditambahkan ke dalam sprint, anggota tim ada yang sakit, dst. Jadi perkiraan kecepatan kita akan tentu saja kurang dari 50. Tetapi seberapa banyak kurangnya? Kita menggunakan istilah focus factor untuk tujuan ini: perkiraan kecepatan sprint kali ini :
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 35 (man days yang tersedia) x (focus factor) = (perkiraan kecepatan) Focus factor adalah perkiraan seberapa fokus tim. Focus factor yang rendah mungkin mencerminkan bahwa tim mendapatkan banyak gangguan atau juga bisa berarti tim terlalu optimis memperkirakan kecepatanya. Cara terbaik untuk menentukan focus factor yang akurat adalah dengan melihat sprint sebelumnya (atau malah lebih baik, beberapa sprint sebelumnya). Focus Factor Spring sebelumnya : Focus Factor = Kecepatan sebenarnya / Jumlah man days. Kecepatan sebenarnya adalah jumlah dari semua story point yang dapat diselesaikan pada saat sprint sebelumnya. Misalnya sprint sebelumnya kita menyelesaikan 18 story point dengan anggota tom 3 orang terdiri dari Tom, Lisa dan Sam. Mereka bekerja dalam waktu 3 minggu sehingga total ada 45 man days. Dan sekarang kita akan mencoba menghitung perkiraan kecepatan untuk sprint yang akan datang. Untuk membuat kasus ini sedikit rumit, ada orang baru namanya Dave bergabung dengan tim untuk sprint ini. Masukkan jumlah cuti yang diambil oleh anggota tim dan kenyataan bahwa Dave cuma bisa 50% saja mengalokasikan waktunya untuk tim, kita dapat angka 50 mandays untuk sprint berikutnya.
Focus factor sprint sebelumnya Perkiraan Kecepatan sprint berikutnya 18 story point / 45 man days = 40 % focus factor 40% focus factor x 50 man days = 20 story point
Jadi perkiraan kecepatan kita untuk sprint berikutnya adalah 20 story point. Hal ini berarti bahwa tim bisa memasukkan story ke dalam sprint hingga jumlah total story pointnya sekitar 20.
Awal sprint
Diikutkan dalam sprint berikutnya
Tidak diikutkan dalam sprint berikutnya
36 | SCRUM AND XP SECARA PRAKTIS
Lihat gambar di atas, dalam kasus ini tim bisa memilih 4 story teratas dengan total 19 story point, atau memilih 5 story ter atas dengan total 24 story point. Ternyata tim memilih 4 story saja, karena nilai story pointnya paling dekat ke 20. Kalau ragu-ragu, pilih saja yang jumlah storynya lebih sedikit. Karena total jumlah story point dari keempat story ini adalah 19, maka perkiraan akhir kecepatan dari seprint ini adalah 19. Teknik cuaca kemarin cukup gampang digunakan, tetapi gunakan teknik ini dengan seksama dan gunakan logika anda untuk memvalidasi nilainya. Bisa saja sprint sebelumnya sangat lambat dari biasanya karena banyak anggota tim sakit, jadi cukup beralasan kalau kita bilang bahwa sprint berikitnya kita bisa sedikit lebih beruntung dan tidak banyak anggota tim yang sakit, sehingga kita bisa mendapatkan focus factor yang lebih tinggi. Bisa jadi management membelikan laptop macbook pro 17 i7 processor dengan memory 8GB plus solid state hard drive untuk setiap anggota tim, sehingga semuanya bisa bekerja dengan cepat tanpa harus menunggu build atau startup application server yang biasanya memakan waktu lebih dari 2 menit :D. Atau bisa saja ada anggota tim baru yang masuk sehingga kita harus menurunkan focus factor sedikit lebih rendah karena anggota baru ini perlu beradaptasi dan masih dalam tahap training. Kalau memungkinkan, lihat beberapa sprint sebelumnya dan ambil nilai rataratanya untuk mendapatkan perkiraan yang lebih akurat. Bagaimana jika anggota tim atau tim ini baru saja dibentuk sehingga tidak ada catatan statistik yang bisa digunakan? Lihat saja focus factor tim lain yang berada dalam lingkungan kerja yang sama. Bagaimana juga kalau nggak ada tim lain sebagai referensi? Tebak-tebak buah manggis aja deh. Berita bagusnya tebakan ini hanya perlu digunakan untuk sprint yang pertama. Setelah itu kan anda sudah memperoleh data statistik dan secara terus menerus menghitung dan meningkatkan focus factor serta meningkatkan keakuratan perkiraan kecepatan.
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 37 Nilai default dari focus factor yang saya gunakan untuk tim baru biasanya adalah 70%.
Teknik perkiraan mana yang kami gunakan?
Saya menyebutkan beberapa teknik di atas : tebak-tebak buah manggis, perhitungan kecepatan berdasarkan cuaca kemarin dan perhitungan kecepatan berdasarkan jumlah man days dikali nilai focus factor. Nah jadi sebenarnya teknik mana sih yang kami gunakan? Biasanya kami mengkombinasikan semua teknik ini untuk menghitung perkiraan kecepatan, nggak ribet juga kok ngitungnya. Kami mulai dengan melihat focus factor dan kecepatan sebenarnya dari sprint sebelumnya, kita lihat sumber daya yang tersedia untuk sprint ini dan memperkirakan berapa focus factornya. Kami diskusikan perbedaan antara kedua focus factor yang dihitung dengan cara berbeda ini dan kemudian kita buat sedikit penyesuaian untuk mendapatkan nilai optimalnya. Setelah kita dapatkan daftar story yang akan diikutkan dalam sprint ini, saya lakukan pengecekan menggunakan insting. Saya tanya ke tim agar mengabaikan angka-angka tersebut untuk sementara, kemudian meminta mereka untuk berfikir dan mencoba merasakan apakah kira-kira daftar story ini bisa diselesaikan semua dalam sprint ini. Kalau sepertinya kerasa terlalu banyak, kami hilangkan satu atau dua story dari sprint. Dan juga sebaliknya, kalau kira-kira terlalu sedikit ya kami tambahkan satu atau dua story. Pada akhirnya, tujuan dari perhitungan kecepatan ini kan menentukan story mana saja yang akan diikut sertakan dalam sprint berikutnya. Focus factor, sumber daya yang tersedia dan perkiraan kecepatan adalah pilihan cara untuk menentukannya.
Kenapa kami menggunakan kartu index
Sebagian besar waktu dalam rapat perencanaan sprint dihabiskan untuk menentukan mana saja item dari product backlog yang akan diikut sertakan dalam sprint ini. Melakukan perkiraan besarnya story dengan story point, membuat daftar prioritas, melakukan klarifikasi, memecah story ke ukuran yang lebih kecil, dst. Bagaimana kami secara praktek melakukan itu semua?
38 | SCRUM AND XP SECARA PRAKTIS Ya secara default sih tim akan menyalakan infokus dan menunjukkan daftar product backlog dalam excel, satu orang (biasanya product owner atau scrum master) akan memegang papan ketik, menerangkan satu per satu storynya dan mengajak tim untuk berdiskusi. Ketika tim dan product owner berdiskusi seru tentang prioritas dan tetek bengeknya, orang yang memegang papan ketik akan langsung mengupdate story di dalam excel. Kedengaranya bagus? Ah ternyata nggak kok. Biasanya sih nggak efektif. Yang paling parah sih, tim biasanya nggak ngeh kalau cara ini nggak efektif sampai tiba-tiba pada sadar udah mau kelar rapatnya tapi daftar story belum sempat dibahas semua. Pemecahan yang sudah terbukti efektif adalah dengan membuat kartu index dan menempelkanya ke dinding, atau meletakkanya di atas meja yang cukup besar.
Ini adalah antar muka yang lebih baik daripada menggunakan laptop plus infokus, karena: Orang-orang akan berdiri dan berjalan mondar-mandir => ini akan membuat mereka tetap melek dan fokus dalam waktu yang lebih lama. Setiap orang akan merasa secara pribadi dilibatkan (daripada cuma satu orang yang memegang papan ketik). Beberapa story bisa diedit secara berbarengan. Mengubah prioritas sangat mudah ya cukup pindahkan kartunya ke kanan atau ke kiri (lihat gambar di atas). Setelah rapat selesai, kartu index ini bisa dibawa langsung ke ruangan tempat tim duduk dan ditempelkan ke papan tugas (lihat halaman 45 di bagian bagimana kami menjalankan sprint backlog). Anda bisa membuat kartu index ini dengan cara menulis manual product backlog menggunakan pulpen (seperti yang biasa kami lakukan) atau
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 39 menggunakan kode sederhana untuk mencetak kartu index langsung dari daftar product backlog, seperti di bawah ini :
Catatan kode sederhana ini tersedia dari blog saya di http://blog.crisp.se/henrikkniberg Catatan penting: setelah rapat perencanaan sprint selesai, scrum master secara manual akan mengupdate daftar product backlog yang ada di dalam dokumen excel berdasarkan perubahan yang terjadi di dalam kartu index ini. Ya, ini sedikit pekerjaan administratif yang kurang menyenangkan, tapi kita terima ini dengan positif, karena kartu index terbukti bisa membuat rapat perencanaan sprint menjadi lebih efisien dan menyenangkan. Satu catatan tentang kolom importance (derajat kepentingan), ini adalah derajat kepentingan yang ada dalam dokumen excel yang sudah disiapkan oleh product owner sebelum rapat ini berlangsung. Mencetak nilai derajat kepentingan ini di dalam kartu index akan memudahkan proses pengurutan kartu index pada waktu ditempelkan di papan. Biasanya kita letakkan story yang penting di kiri dan story yang kurang penting di kanan. Tetapi, setelah kartu sudah tertempel di papan, anda bisa mengabaikan nilainya, gunakan urutan kartu di papan sebagai urutan kepentingan dari story yang sebenarnya. Kalau misalnya product owner memindahkan beberapa kartu karena ingin mengubah urutan kepentinganya, jangan buang-buang waktu dengan mengupdate nilai derajat kepentingan ini. Cukup pastikan scrum master mengupdate nilai derajat kepentinganya di dalam dokumen excel setelah rapat selesai. Perkiraan besarnya story point dari setiap story biasanya lebih mudah (dan tentu saja lebih akurat) kalau story dipecah-pecah dalam tugas-tugas lebih kecil. Sebenarnya kita menggunakan istilah Aktifitas karena arti dari
40 | SCRUM AND XP SECARA PRAKTIS kata tugas mempunyai arti yang sangat berbeda dalam bahasa swedia :o). Hal ini juga lebih gampang dan mudah dilakukan menggunakan kartu index. Anda bisa membagi tim menjadi beberapa pasang dan menugaskan mereka untuk membagi satu per satu story secara bersamaan. Secara fisik, kita melakukan ini dengan menambahkan post-it note yang lebih kecil di bawah setiap story, setiap post-it note melambangkan satu tugas dalam story tersebut.
Kita tidak mengupdate dokumen excel product backlog berdasarkan pemecahan story menjadi tugas ini karena dua alasan: Pemecahan story menjadi tugas ini biasanya gampang berubah, misalnya dirubah selama sprint, jadi terlalu banyak kerjaan administratif yang perlu dilakukan untuk menjaga product backlog dalam dokumen excel agar mencerminkan data ini secara akurat. Product owner tentu saja tidak perlu tahu secara detail mengenai hal pemecahan ini, karena product backlog itu adalah dokumen milik product owner. Jadi tidak logis meletakkan istilah-istilah teknis ke dalam dokumen ini. Seperti halnya juga kartu index, pemecahan tugas yang diletakkan dalam kertas post-it ini bisa langsung digunakan dalam sprint backlog (lihat halaman 45 di bagian Bagaimana kami menjalankan sprint backlog).
Definisi dari selesai
Sangat penting bagi product owner dan tim untuk setuju dan membuat definisi dari selesai menjadi jelas. Apakah story dianggap selesai kalau kode sudah berada dalam repository? Ataukah story dianggap selesai kalau kode sudah diletakkan dalam server tes dan diverifikasi oleh tim tester? Kalau memungkinkan biasanya kami mendefinisikan selesai
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 41 sebagai siap untuk dideploy di production, tetapi terkadang kita menggunakan definisi selesai sebagai dideploy di server tes dan siap dites oleh tester. Pada awal-awal kita membuat daftar cek yang lengkap untuk memastikan definisi selesai ini dijalankan dengan baik. Tetapi sekarang kita sering bilang kalau sebuah story dianggap selesai kalau tester dalam tim Scrum bilang ini sudah selesai. Jadi sekarang terserah tester untuk memastikan keinginan dari product owner dipahami dengan benar oleh tim dan dicerminkan dari kode yang mereka tulis. Kita sudah menyadari bahwa semua story tidak bisa diperlakukan dengan sama. Sebuah story dengan nama form pencarian pengguna akan diperlakukan dengan sangat berbeda dengan story dengan nama dokumen petunjuk penggunaan aplikasi. Oleh karena itu pemikiran umum yang logis jauh lebih baik daripada daftar cek yang kaku. Kalau anda bingung tentang definisi selesai ini (seperti juga ketika pada awal-awal kita menggunakan scrum) anda perlu membuat kolom definisi selesai untuk setiap story dalam product backlog.
Perkiraan waktu pengerjaan menggunakan planning poker
Perkiraan waktu pengerjaan story adalah aktifitas dari anggota tim scrum, setiap anggota biasanya terlibat dalam melakukan perkiraan ini. Kenapa? Pada awal dari fase perencanaan, biasanya kita tidak tahu siapa yang nantinya akan mengerjakan story ini. Story biasanya melibatkan beberapa orang dengan pengalam yang berbeda-beda (designer antar muka, programmer, tester dsb) Agar bisa membuat perkiraan, anggota tim perlu pemahaman tentang story tersebut. Dengan meminta setiap anggota tim untuk membuat perkiraan setiap story, kita memastikan bahwa setiap anggota tim memahami dengan baik setiap story. Hal ini akan meningkatkan kemungkinan setiap anggota tim untuk saling membantu selama berlangsungnya sprint. Hal ini juga meningkatkan kemungkinan munculnya pertanyaan-pertanyaan penting lebih cepat tentang story ini, pertanyaan ini penting untuk segera dijawab agar anggota tim lebih memahami storynya, kalau pertanyaan ini munculnya sudah telat maka ada kemungkinan kesalah pahaman antara product owner dan anggota tim tentang apa yang akan dibuat dalam story ini. Ketika menanyakan semua anggota tim untuk memperkirakan sebuah story kita sering menemukan perbedaan perkiraan yang
42 | SCRUM AND XP SECARA PRAKTIS sangat mencolok antar anggota tim terhadap story yang sama. Hal-hal semacam ini lebih baik didiskusikan lebih awal lebih baik. Kalau anda menanyakan tim untuk membuat perkiraan, normalnya orang yang mengerti sekali tentang story itu akan mendominasi proses ini, orang lain biasanya ngikut aja. Sayangnya, hal semacam ini bisa berakibat tidak baik. Ada cara yang sangat baik untuk menghindari hal ini, cara ini disebut dengan planning poker (diperkenalkan oleh Mike Cohn kalau tidak salah). Setiap anggota tim mendapatkan satu set kartu yang terdiri dari 13 buah kartu seperti dalam gambar di bawah ini. Ketika proses perkiraan sebuah story dimulai, setiap anggota tim memilih kartu yang merepresentasikan kira-kira berapa story point untuk story ini, kemudian meletakkanya di atas meja dalam posisi tertutup, berikutnya setelah semua anggota tim memilih kartu, masing-masing akan membuka kartunya secara nyaris bersamaan. Hal ini akan memaksa setiap anggota tim untuk berfikir masing-masing tanpa dipengaruhi atau ikut-ikutan dengan angka perkiraan temanya.
Kalau perbedaan antar anggota tim sangat jauh, tim dipersilahkan berdiskusi tentang perbedaan ini dan mencoba untuk membangun gambaran umum tentang apa saja pekerjaan yang perlu dilakukan untuk menyelesaikan story ini. Tim bisa membuat daftar tugas kecil-kecil untuk memecah story ke dalam langkah-langkah yang lebih sepesifik. Setelah itu tim akan diminta untuk melakukan perkiraan lagi. Ulang terus urutan di atas sampai semua orang menunjukkan nilai perkiraan yang kira-kira nyaris sama untuk story tersebut.
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 43 Sangat penting untuk mengingatkan anggota tim bahwa mereka sedang membuat perkiraan total pekerjaan yang perlu dilakukan untuk menyelesaikan story ini. Bukan cuma bagian yang harus masing-masing kerjakan. Kalau ada tester maka mereka tidak boleh hanya memperkirakan pekerjaan testing saja. Perhatikan bahwa angka dalam kartu tidak berurut. Sebagai contoh kenapa tidak ada angka antara 40 dan seratus, misalnya 60 atau 80? Hal ini dimaksudkan untuk menghindari pemikiran yang salah tentang akurasi untuk story yang besar. Misalnya story ini kira-kira diperkirakan besarnya adalah 20 story point, tidak berguna kan kalau misalnya kita berdiskusi kira-kira yang pas itu 18 atau 21 yah?. Yang kita tahu bahwa ini adalah story yang cukup besar dan susah sekali memperkirakan besarnya sampai sangat akurat. Jadi ya 20 itu kira-kira angka yang kita gunakan sebagai perkiraan. Mau perkiraan yang lebih detail? Pecah story tersebut ke story-story yang lebih kecil dan perkirakan besarnya story-story yang lebih kecil ini! Dan anda tidak boleh curang lho, misalnya menggabungkan sebuah story yang besarnya 5 dan story yang besarnya 2 menjadi 7. anda harus ikut aturan planning poker dengan memilih 5 atau 8, karena tidak ada angka 7 di dalam kartu planning poker. Beberapa kartu dengan angka spesial: 0 = story ini sudah selesai atau story ini sepele banget, cuma beberapa menit kerja pasti sudah beres ? = Saya tidak tahu sama sekali story ini tentang apa, nol puthul!. Cangkir kopi = Capek nih gw, ngopi-ngopi atau ngudud dulu lah
Menjelaskan tentang story
Hal terburuk yang bisa terjadi adalah ketika tim dengan sangat bangga mendemonstrasikan beberapa fitur yang dikerjakan dalam sprint ini pada waktu sprint demo, kemudian product owner matanya membelalak sambil geleng-geleng kepala ya ini sih bagus ya, UInya keren, tapi kayaknya itu bukan yang saya minta deh! Bagaimana anda memastikan bahwa pemahaman product owner terhadap sebuah story cocok dengan pemahaman anggota tim? Atau bagaimana memastikan bahwa setiap anggota tim mempunyai pemahaman yang sama
44 | SCRUM AND XP SECARA PRAKTIS terhadap setiap story? Jawabanya ya nggak bisa!? Tapi jangan berkecil hati dulu ada beberapa teknik sederhana untuk mengidentifikasi apakah ada perbedaan pemahaman yang cukup mencolok atau tidak. Teknik paling sederhana adalah dengan memastikan bahwa setiap kolom story dalam product backlog diisi dan diterangkan dengan cukup jelas, terutama story penting yang kira-kira akan dimasukkan dalam sprint berikutnya. Contoh 1 : Anggota tim dan product owner sudah cukup senang dengan rencana sprint dan siap untuk mengkahiri rapat perencanaan sprint. Scrum master tiba-tiba ngomong eh tunggu bentar, ni ada satu story 'tambah pengguna baru' yang belum selesai dibuat perkiraanya. Yuk kita buat! setelah beberapa putaran permainan planning poker tim setuju bahwa story ini besarnya kira-kira 20 story point, product owner tiba-tiba langsung berdiri dengan muka monyong waaah ini gak masuk akal niiih!. Setelah diskusi yang panas selama beberapa saat, ternyata tim salah paham dengan cakupan story tambah pengguna baru ini. Tim menyangka bahwa story ini berarti kita harus membuat antar muka web untuk menambah, menghapus, menonaktifkan dan melakukan pencarian terhadap data pengguna. Sedangkan maksud product owner sebenarnya adalah tambahkan pengguna dengan membuat SQL insert secara manual. Mereka melakukan perkiraan lagi dan akhirnya disetujui bahwa story ini cukup 1 story point saja. Contoh 2 : Anggota tim dan product owner sudah cukup senang dengan rencana sprint dan siap-siap mengakhiri rapat. Scrum master tiba tiba scrum master ngomong sebentar-sebentar, story 'tambah pengguna baru' ini gimana cara mendemokanya? sejenak anggota tim riuh rendah dan akhirnya seseorang ngomong ya kita login ke websitenya dulu, kemudian ... belum sempat selesai ngomong product owner tiba-tiba memotong login ke website? Nggak, nggak nggak, fungsionnalitas ini bukan bagian dari website sama sekali, seharusnya story ini cukup dengan membuat query insert untuk setiap admin, itu saja. Keterangan bagaimana cara mendemokan story seharusnya ditulis sangat lengkap dan mendetail! Kalau nggak jangan diakhiri dulu rapatnya (dengan asumsi masih ada cukup waktu). Pada dasarnya keterangan ini berupa kalimat bahasa sehari-hari tentang bagaimana menjalankan feature yang ada dalam story ini secara manual. Misalnya Lakukan ini, klik itu, masukkan data ini itu, kemudian tekan tombol sumbit, maka harusnya datai ini itu menjadi begini begitu.
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 45 Saya sering menemukan bahwa terkadang deskripsi sederhana yang cukup lengkap bisa mengungkap kesalah pahaman yang penting tentang cakupan dari sebuah story. Bagus juga kan bisa mengungkap kesalah pahaman ini lebih awal?
Memecah story menjadi story-story yang lebih kecil
Story sebaiknya tidak terlalu kecil ataupun terlalu besar (dalam hal perkiraan ukuranya). Kalau anda mempunyai setumpuk story yang ukuranya 0.5 story point, kemungkinan anda menjadi korban mikro management. Sebaliknya, sebuah story yang besarnya 40 story point akan potensial beresiko hanya bisa selesai setangahnya pada akhir sprint, yang pada akhirnya menyebabkan usaha yang sia-sia, ingat feature yang setengah jadi itu nilai aktualnya adalah 0! Dibilang belum dikerjakan tapi sudah ada usaha yang dibuang, dibilang selesai tetapi tidak bisa didemokan karena masih banyak error, jadi ya nilainya 0!. Lebih jauh lagi kalau misalnya kita punya story dengan ukuran 70 story point, akan susah membuat perencanaan yang baik. Anda pada akhirnya harus memilih untuk mengerjakan sprint dengan kecepatan di bawah rata-rata, atau mengerjakan sprint dengan kecepatan terlau jauh dari rata-rata. Saya menemukan bahwa pasti bisa memecah story yang besar menjadi story-story yang lebih kecil. Yang perlu diperhatikan bahwa story yang kecil ini bisa diletakkan di test environment atau di production dan tetap memberikan nilai bisnis yang baik, bukan feature yang selesai tapi tidak memberikan manfaat apa-apa terhadap sistem yang sudah ada. Normalnya kami berpatokan bahwa nilai perkiraan yang baik itu antara 2 8 story point. Kecepatan kita untuk sprint 3 minggu dengan anggota 3 orang adalah sekitar 40-60 story point, jadi kecepatan ini bisa mengerjakan kira-kira 10 story dalam setiap sprint. Tekadang ada pula sprint yang cuma bisa menyelesaikan 5 story, terkadang malah bisa sampai 15 story. Jumlah story segitu masih bisa dikelola menggunakan kartu index dengan baik.
Memecah story ke dalam tugas-tugas lebih kecil
Tunggu sebentar, apa bedanya tugas dan story? Hmm pertanyaan yang bagus.
46 | SCRUM AND XP SECARA PRAKTIS Perbedaanya cukup sederhana. Story adalah suatu feature yang bisa dideliver dan product owner peduli dengan story ini. Tugas adalah feature lebih kecil yang tidak bisa dideliver secara terpisah, atau bisa dibilang kerjaan yang product owner tidak perlu peduli. Contoh pemecahan story ke dalam story yang lebih kecil :
Contoh pemecahan story ke dalam satuan tugas-tugas yang lebih kecil:
Berikut ini adalah contoh beberapa pengamatan yang cukup menarik: Tim Scrum yang baru saja dibentuk biasanya malas menghabiskan waktu memecah setumpuk story ke dalam tugastugas seperti ini sebelum mereka memulai coding. Beberapa orang malah menganggap ini adalah pendekatan waterfall yang menyebalkan. Untuk memahami story dengan lebih baik, lebih mudah membuat pemecahan seperti ini di depan daripada ditunda sampai nanti pas coding. Tipe pemecahan seperti ini biasanya juga akan memunculkan adanya kerjaan tambahan yang perlu dilakukan, hal ini tentu saja akan menyebabkan nilai perkiraan story akan naik, nah kan akhirnya kita bisa tahu lebih dalam tentang story dan membuat perkiraan yang lebih akurat. Tipe pemecahan di depan seperti ini akan membuat rapat harian Scrum menjadi lebih efisien karena bisa didiskusikan tugas-tugas
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 47 apa yang harus dilakukan oleh anggota tim secara lebih detail untuk hari tersebut (lihat halaman 61 bagaimana kami menjalankan rapat harian Scrum). Walaupun misalnya pemecahan ini tidak bisa akurat 100% dan bisa saja berubah nanti pada waktu sprint berlangsung, manfaat yang saya sebutkan di atas tetap berlaku.
Jadi, kita akan mencoba membuat rapat perencanaan sprint dengan waktu terbatas cukup untuk membahas semua topik ini, tetapi kalau memang tidak cukup waktunya, ya sudah berhenti saja di titik tersebut (lihat topik kapan harus menghentikan rapat di bawah ini). Catatan kami mempraktekkan TDD (Test driven development) dimana dalam setiap story, tugas pertama selalu adalah membuat unit test dan tugas terakhir adalah refactor ( meningkatkan kemudahan pembacaan kode dan hapus duplikasi kode kalau ada).
Menetapkan waktu dan tempat untuk rapat harian Scrum
Satu hal yang sering kali terlupa dari rapat perencanaan sprint adalah menetapkan waktu dan tempat untuk rapat harian Scrum. Tanpa adanya rapat harian scrum dalam sprint, maka kita sudah memulai awal yang buruk. Rapat harian scrum pertama setelah rapat perencanaan scrum pada intinya adalah peluit pertanda setiap orang akan memulai pekerjaanya masing-masing. Saya lebih memilih rapat harian scrum di pagi hari. Tetapi, sebenarnya yah, saya belum pernah mencoba rapat harian scrum di siang hari atau di sore hari. Kelamahan rapat scrum harian di sore hari: ketika pagi-pagi datang ke kantor, kita harus mengingat-ingat apa yang kemaren orang-orang sampaikan pada waktu rapat sore hari, kemudian harus mengingat-ingat apa yang perlu kita lakukan hari ini. Kelemahan rapat harian scrum di pagi hari: ketika pagi-pagi datang ke kantor, kita harus mengingat-ingat apa saja yang sudah kita kerjakan kemarin, sehingga kita bisa melaporkan hal tersebut hari ini. Pendapat saya, kelemahan rapat harian di sore hari lebih buruk, karena hal yang paling penting itu adalah mendaftar semua hal yang harus kita lakukan hari ini, bukan yang sudah dilakukan kemaren.
48 | SCRUM AND XP SECARA PRAKTIS Prosedur kami adalah memilih jam seawal mungkin dimana semua anggota tim datang ke kantor. Biasanya sih jam 9:00, 9:30 atau paling telat jam 10:00. Yang paling penting adalah ini adalah waktu yang bisa diterima oleh semua anggota tim secara sungguh-sungguh.
Kapan kita harus menghentikan rapat yang berlarut-larut
Jadi, waktunya sudah habis. Dari semua kolom dalam sprint backlog yang harus kita isi dalam rapat perencanaan sprint, apa yang tidak boleh dikosongin kalau kehabisan waktu? Kalau saya sih menggunakan prioritas di bawah ini, saya urutkan berdasarkan yang paling penting : Prioritas 1 : Kolom tujuan Sprint dan tanggal demo. Kedua hal ini adalah minimum yang harus kita hasilkan dalam rapat perencanaan sprint untuk memulai sebuah sprint. Tim mempunyai tujuan, dan tanggal kapan tujuan ini harus tercapai, mereka bisa segera mulai bekerja dengan melihat product backlog. Ngebetein lah ya, ya jelas sih, seharusnya kalau anda dalam keadaan ini, coba pertimbangkan memulai lagi rapat perencanaan sprint keesokan harinya. Tetapi kalau memang sudah tidak ada waktu lagi dan sprint harus segera dimulai, setidaknya syarat dimulainya scrum sudah tersedia. Jujur saja sih, saya sebenernya tidak pernah memulai sprint hanya bermodalkan informasi minimal ini. Prioritas 2: daftar story apa saja yang diterima oleh tim untuk diikutkan dalam sprint ini. Prioritas 3 : Kolom perkiraan untuk setiap story dalam sprint. Prioritas 4: Kolom bagaimana cara mendemokan untuk setiap story dalam sprint. Prioritas 5 : kecepatan dan perhitungan sumber daya yang tersedia, kedua hal ini adalah cara yang digunakan untuk mengecek apakah rencana sprint masuk akal apa tidak. Termasuk daftar anggota tim dan level komitmen mereka terhadap proyek ini, tanpa keterangan ini perhitungan kecepatan tidak mungkin dilakukan. Prioritas 6: Menetapkan waktu dan tempat untuk rapat harian scrum. Ini hanya perlu beberapa saat saja untuk memutuskan, kalau kehabisan waktu ya scrum master tinggal memutuskan kapan dan dimana rapat harian
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 49 scrum dilaksananan nanti setelah rapat selesai dan mengirimkan email ke semua orang. Prioritas 7: Story dipecah-pecah menjadi tugas-tugas yang lebih kecil. Pemecahan ini nantinya bisa dilakukan setiap hari ketika sprint sudah berjalan pada waktu rapat harian scrum, tapi tetap saja kalau tidak sempat dilakukan bisa mengganggu jalanya sprint.
Story teknis
Ini adalah isu yang susah dipecahkan: Story yang berbau teknis. Atau bisa juga kita sebut sebagai kebutuhan non fungsional atau terserah deh anda menamakanya bagaimana. Saya menunjuk ke hal-hal yang perlu dilakukan tapi sebenarnya bukan bagian integral dari sistem, tidak langsung berkaitan dengan story lain secara spesifik, atau tidak memberi nilai langsung ke product owner. Kami menyebutnya Story teknis. Sebagai contoh: Install continuous build server o Kenapa hal ini perlu dilakukan: karena akan menghemat banyak sekali waktu anggota tim dan juga meminimalisasi resiko masalah besar ketika integrasi mulai dilakukan pada waktu akhir dari sprint. Menulis desain sistem o Kenapa ini perlu dilakukan: karena programmer biasanya selalu lupa desain aplikasi secara umum, sehingga bisa menulis kode yang konsisten. Gambaran umum desain sistem diperlukan agar semua orang berada dalam pemahaman yang sama dari sisi desain. Refactor lapisan DAO o Kenapa hal ini perlu dilakukan: Karena lapisan DAO mudah sekali menjadi berantakan dan membuat orang lain membayar harga yang mahal karena kebingungan dengan kode yang berantakan dan bug yang mungkin terjadi karena kesalah pahaman. Membersihkan kode akan menghemat waktu semua orang dan meningkatkan keandalan sistem. Upgrade bug tracker o Kenapa ini perlu dilakukan: versi yang sekarang ini mungkin banyak bugnya dan lambat, upgrade akan menghemat waktu semua orang.
50 | SCRUM AND XP SECARA PRAKTIS
Apakah story jenis ini masuk akal untuk dilakukan? Siapa yang akan membuat prioritas terhadap story ini? Haruskah product owner dilibatkan dalam hal-hal seperti ini? Kami membuat banyak sekali eksperimen dengan cara yang berbeda untuk menangani story teknis ini. Kita mencoba memperlakukan mereka sebagai story kelas atas, seperti halnya story lainya. Hasilnya tidak bagus, karena ketika product owner membuat prioritas terhadap product backlog, rasanya seperti membandingkan antara apel dengan jeruk. Pada kenyataanya, untuk alasan yang sangat jelas, product owner selalu memberi prioritas yang lebih rendah dibanding dengan story lainya dengan alasan seperti Hmm, ya sepertinya kalau dipikir sih continuous build server itu penting, tapi gimana kalau kita dahulukan feature yang ngasilin duit dulu ya? Trus kalian bisa menambahkan hal-hal berbau teknis ini nanti saja, oke?. Dalam beberapa kasus saja, product owner mungkin benar, tapi di banyak kasus lainya mereka salah. Kita sudah menyimpulkan bahwa product owner tidak selalu punya kualifikasi yang cukup untuk membuat keputusan ini. Jadi ini yang kami lakukan: 1) Mencoba menghindari story teknis. Cari cara bagaimana mengubah story teknis menjadi story normal dengan perhitungan nilai bisnis. Dengan begitu product owner bisa menangkap logika di balik story teknis ini dan mengambil keputusan yang benar. 2) Kalau langkah mengubah story teknis ke story normal tidak memungkinkan, coba cari cara untuk memasukkan tugas ini dalam story normal. Misalnya dalam story edit data pengguna kita cantumkan tugas untuk merefactor DAO karena di dalam proses edit data pengguna juga melibatkan proses penulisan kode di lapisan DAO. 3) Kalau kedua cara di atas gagal, ya definisikan story teknis ini apa adanya, kemudian buat daftar terpisah untuk story jenis ini. Biarkan product owner melihat story ini tetapi tidak bisa mengedit daftar ini. Gunakan focus factor dan perkiraan kecepatan sprint untuk bernegosiasi dengan product owner, kemudian belokkan sebagian waktu dalam sprint untuk mengerjakan story teknis. Contoh dialog yang mungkin akan muncul dalam salah satu rapat perencanaan sprint kami adalah : Tim : Kita punya masalah teknis internal yang perlu diselesaikan. Kita ingin 10 persen waktu dialokasikan untuk
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 51 menyelesaikan masalah ini, misalnya dengan menurunkan focus factor dari 75% menjadi 65%. Boleh ga? Product owner: Nggak, nggak! Kita sudah kehabisan waktu nih! Tim : Gini lho, lihat tuh di sprint sebelumnya (semua mata tertuju kepada nilai kecepatan sprint sebelumnya di papan tulis). Perkiraan kecepatan kita adalah 80, dan ternyata kecepatan sebenarnya cuma 30, betul? PO: Tepat sekali! Jadi kita tidak punya waktu lagi untuk mengerjakan hal-hal teknis internal lagi! Kita perlu menyelesaikan feature baru ini! Tim: Nah, itulah alasan kenapa kecepatan kita menjadi sangat lambat, karena kita menghabiskan banyak sekali waktu untuk mengurusi server untuk test PO: Oke, lalu? Tim: Kalau kita tidak melakukan apa-apa, kecepatan kita akan terus-terusan jelek seperti sebelumnya PO: Oke, terus? Tim: jadi kita menyarankan bahwa kira-kira kita memerlukan 10% wakti dari sprint ini untuk menginstall continuous build server dan beberapa detail lain yang akan mengurangi repotnya menyiapkan server test. Hal ini setidaknya akan meningkatkan kecepatan kita setidaknya sebanyak 20% untuk setiap sprint berikutnya!. PO: Oh ya? Lho kenapa ga dilakukan dari dulu dulu sih!? Team: uhmm.. lha kamu tidak mengijinkan... PO: Oh gitu ya? Ya udah sepertinya ide yang baik untuk melakukanya sekarang.
Tentu saja pilihan terbaik adalah mendorong product owner jauh-jauh dari diskusi apakah story teknis ini boleh dilaksanakan apa tidak, berikan nilai focus factor yang tidak bisa ditawar. Tapi ya tidak ada alasan untuk tidak bermusyawarah sebelumnya terlebih dahulu. Kalau product owner adalah seseorang dengan kompetensi yang baik dan logika yang jalan (dan kami cukup beruntung memiliki product owner seperti ini) saya menyarankan untuk terus mengajak diskusi product owner sebanyak mungkin dan membiarkan dia membuat prioritas secara keseluruhan. Transparansi adalah nilai paling utama dalam scrum bukan?
Bug tracking system vs. product backlog
52 | SCRUM AND XP SECARA PRAKTIS Ini adalah masalah yang juga cukup pelik. Excel adalah aplikasi yang sangat baik digunakan untuk mencatat product backlog. Tetapi kita masih memerlukan bug tracking system, dan excel tentu saja bukan pilihan yang baik untuk tujuan ini. Kami menggunakan Jira. Jadi bagaimana kami membawa daftar bug dalam Jira ke rapat perencanaan sprint? Maksud saya apakah bisa kita lupakan saja dan fokus dengan story? Kita sudah mencoba beberapa strategi: 1) Product owner mencetak daftar bug dengan prioritas tinggi, membawanya ke rapat perencanaan sprint dan meletakkanya dalam papan menjadi satu dengan story yang lainya, juga secara implisit menentukan prioritas bug ini dibandingkan dengan story yang lain. 2) Product owner membuat story yang menunjuk ke bug di dalam Jira, Sebagai contoh ada story seperti ini Perbaiki bug di sistem back office, Jira-124, Jira-126 dan Jira-180. 3) Perbaikan bug dikategorikan sebagai kegiatan di luar sprint. Misalnya dengan menetapkan focus factor yang rendah (misalnya 50%) untuk memastikan mereka mempunyai cukup waktu untuk memperbaiki bug. Hal ini mengasumsikan bahwa tim akan menghabiskan sebagian waktu setiap sprint untuk memperbaiki bug yang didaftarkan dalam Jira. 4) Letakkan product backlog ke dalam Jira (buang dokumen excel). Perlakukan bug seperti story lainya. Kami belum memutuskan mana strategi yang terbaik. Sebenarnya hal ini bervariasi antar tim dan antar sprint. Tetapi saya biasanya lebih cenderung menggunakan cara pertama. Bagus dan sederhana.
Rapat perencanaan sprint akhirnya selesai!
Wow, saya tidak pernah membayangkan bab mengenai rapat perencanaan sprint akan sepanjang ini! Saya kira ini karena pendapat saya sendiri bahwa rapat perencanaan sprint itu adalah kegiatan paling penting dalam Scrum, selain sprint itu sendiri. Sangat berharga untuk menghabiskan banyak waktu terus memoles cara kita melaksanakan rapat ini dengan benar, kalau rapat ini berlangsung dengan baik, maka sisanya (sprint itu sendiri) akan berlangsung dengan lancar dan mudah. Rapat perencanaan sprint ini berhasil kalau semua orang (semua anggota tim dan product owner) keluar dari ruangan rapat dengan senyum lebar,
BAGAIMANA KAMI MENJALANKAN PERENCANAAN SPRINT | 53 dan bangun keesokan harinya dengan senyum, dan memulai rapat harian scrum dengan wajah berbinar-binar. Dan tentu saja, semua hal bisa saja berjalan sangat buruk, sprint berantakan. Tapi setidaknya anda tidak bisa menyalahkan rencana sprint yang sudah disusun kan! :o)
5
Bagaimana kami menyebarluaskan berita tentang Sprint
Sangat penting untuk menyebar luaskan berita tentang sprint ini ke seluruh bagian perusahaan. Kalau tidak, bisa-bisa orang-orang akan mempunyai asumsi yang salah mengenai apa yang sedang terjadi di dalam perusahaan. Kami menggunakan halaman informasi sprint untuk tujuan ini, contohnya seperti di bawah ini :
Tim Hore! Sprint ke 15 Tujuan Sprint - Menyiapkan sistem untuk fase release beta Sprint Backlog - Setor tunai (3) - Perkakas migrasi (8) - Login untuk Backoffice sistem (5) - Administrasi pengguna backoffice sistem (5) Perkiraan kecepatan 21 Jadwal - Periode Sprint : 2006-11-06 s/d 2006-11-24 - Rapat harian scrum : 9:30-9:45, di ruang tim - Demo sprint : 2006-11-23, 13:00 di Kafetaria Tim - Jim - Erica (Scrum master) - Eva
56 | SCRUM DAN XP SECARA PRAKTIS
- John - Tom (75%)
Terkadang kami juga sertakan informasi bagaimana setiap story akan didemonstrasikan. Segera setelah rapat perencanaan sprint selesai dilaksanakan, scrum master akan membuat halaman di atas, meletakkanya ke dalam wiki dan mengirim spam email ke semua perusahaan, contoh emailnya seperti di bawah ini:
Subject : Tim hore sprint ke 15 dimulai!! Halo semua! Tim hore akan memulai sprint ke 15. Tujuan sprint kami kali ini adalah menyiapkan versi beta dari aplikasi yang sedang kita kerjakan untuk direlease tanggal 24 November. Silahkan lihat halaman informasi sprint kami untuk lebih detailnya: http://wiki.perusahaanku.com/tim-hore/sprint15
Kami juga membuat halaman utama di dalam wiki kami, yang mempunyai link ke semua sprint yang sedang berjalan.
Halaman utama Perusahaan Sprint yang sedang berjalan: Tim Hore Sprint ke 15 Tim Asik-Asik Sprint ke 9 Tim Hura-hura Sprint ke 17
Sebagai tambahan, scrum master juga akan mencetak halaman informasi sprint dan menempelkanya di dinding luar ruang tim. Jadi setiap orang yang berjalan melewati bagian depan ruangan tim bisa melihat halaman informasi sprint untuk mengetahui apa yang sedang tim kerjakan. Karena halaman ini juga menyertakan tempat dan waktu rapat harian scrum serta sprint demo, mereka bisa langsung menuju ke sana untuk tahu lebih lanjut apa yang tim ini sedang kerjakan. Ketika sprint akan segera berakhir, scrum master akan mengingatkan setiap orang tentang demo yang akan segera berlangsung dengan mengirimkan spam email kepada semua orang. Contoh emailnya bisa seperti di bawah ini:
HOW WE DO SPRINT PLANNING | 57
Subject: Tim Hore sprint demo besok jam 13:00 di kafetaria. Halo semua! Anda semua diundang untuk menghadiri demo sprint kami besok jam 13:00 di kafetaria. Kami akan mendemonstrasikan versi beta aplikasi kami. Silahkan lihat halaman informasi sprint kami untuk lebih detailnya : http://wiki.perusahaanku.com/tim-hore/sprint15
Dengan semua keterangan ini, tidak ada seorangpun punya alasan untuk tidak tahu apa yang sedang terjadi.
6
Bagaimana kami membuat sprint backlog
Anda sampai di sini masih semangat membaca? Waaw waw, hebat-hebat. Jadi sekarang kita sudah menyelesaikan rapat perencanaan sprint dan memberitahu seluruh dunia tentang sprint ini, sekarang waktunya bagi scrum master untuk membuat sprint backlog. Hal ini perlu segera dibuat segera setelah rapat perencanaan sprint selesai, dan sebelum rapat harian scrum dilaksanakan.
Format sprint backlog
Kami banyak mencoba beberapa format berbeda-beda untuk sprint backlog, termasuk Jira, Excel dan papan tugas yang ditempel di dinding. Pada awalnya kita menggunakan Excel, banyak sekali template Excel untuk sprint backlog ini tersedia di internet, termasuk versi yang bisa membuat grafik burndown dan hal-hal semacam itu. Silahkan anda mencari sendiri, saya tidak menyediakannya di buku ini. Saya akan menerangkan sangat detail apa yang menurut kami format paling efektif untuk sprint backlog ini: papan tugas yang ditempel di dinding. Carilah dinding yang cukup besar dan tidak digunakan atau berisi hal-hal yang tidak penting, seperti logo perusahaan, diagram kuno atau lukisan yang buruk rupa. Bersihkan temboknya (minta ijin kalau diperlukan saja). Gunakan selotip besar untuk menempelkan kertas yang besar (setidaknya berukuran 2 x 2 meter, atau 3 x 2 meter kalau ukuran timnya besar). Lalu gambar seperti di bawah ini :
HOW WE DO SPRINT BACKLOGS | 59
Anda bisa saja menggunakan papan tulis kalau ada. Tapi sepertinya kok mubadzir. Kalau bisa, gunakan papan tulis untuk corat-coret desain dan gunakan kertas ini untuk papan tugas. CATATAN kalau anda menggunakan post-it untuk menulis tugas-tugas, jangan lupa menempelkannya menggunakan selotip, kalau tidak, itu postit akan jatuh-jatuh semua ke lantai karena perekatnya kurang kuat.
60 | SCRUM AND XP FROM THE TRENCHES
Bagaimana papan tugas ini bekerja
Anda bisa saja menambahkan berbagai macam kolom tambahan. Misalnya saja Perlu dites integrasi, atau dibatalkan. Tetapi sebelum anda membuat papan ini menjadi lebih pikir baik baik dahulu. Apakah kolom tambahan ini sangat sangat diperlukan? Saya menemukan bahwa kesederhanaan itu sangat berharga untuk hal-hal seperti ini, jadi saya hanya akan menambahkan kompleksitas kalau saja tidak menambahkan kompleksitas ini malah membuat biaya yang harus dikeluarkan menjadi sangat besar.
HOW WE DO SPRINT BACKLOGS | 61
Contoh 1 setelah rapat harian scrum yang pertama
Setelah rapat harian scrum yang pertama, papan tugas mungkin akan terlihat seperti di bawah ini :
Seperti yang anda lihat, ada tiga buah task yang di checked out, misalnya tim akan mengerjakan item-item tersebut hari ini. Terkadang, untuk tim yang lebih besar, sebuah tugas akan mentok di kolom checked out karena tidak ada yang ingat siapa yang dulu mengerjakanya. Kalau hal ini terjadi, biasanya ada kebijakan dalam tim untuk memberi label task yang sudah dichecked out dengan nama orang yang sedang mengerjakanya.
62 | SCRUM AND XP FROM THE TRENCHES
Contoh 2 setelah beberapa hari kemudian
Setelah beberapa hari kemudian papan tugas mungkin akan terlihat seperti di bawah ini:
Seperti yang anda lihat, kami sudah menyelesakan story deposit (kode implementasi story ini sudah dimasukkan ke dalam server repository, ditest, direfactor dan sebagainya, tergantung definisi selesai yang digunakan). Story Migration tool setengah selesai, dan back office login baru saja dimulai, yang terakhir backoffice user admin belum dimulai sama sekali. Kami mempunyai 3 buah item di dalam kategori tugas yang tidak direncanakan, lihat di pojok kanan bawah. Pencatatan ini berguna nanti pada saat kita melakukan sprint retrospective. Berikut ini adalah contoh sebenarnya dari sprint backlog pada saat akhirakhir dari sprint. Sepertinya terlihat makin berantakan selama sprint berlangsung, tidak masalah sih karena sprint itu umurnya pendek, nanti kalau sprint berakhir, kami akan membersihkan papan tugas dan ganti dengan story yang baru.
HOW WE DO SPRINT BACKLOGS | 63
Bagaimana grafik burndown bekerja
Mari kita zoom grafik burndown:
Grafik di atas memperlihatkan bahwa: Hari pertama sprint, tanggal 1 agustus, tim memperkirakan bahwa ada sekitar 70 story point yang perlu diselesaikan. Ini adalah nilai yang diperoleh berdasarkan perhitungan perkiraan kecepatan tim.
64 | SCRUM AND XP FROM THE TRENCHES Pada tanggal 16 agustus, hanya bersisa 15 story point. Garis lurus putus-putus dari kiri atas ke kanan bawah menunjukkan garis tren apakah tim berada dalam jalur yang sesauai atau tidak. Kalau grafik burndown berkisar di sekitar garis tren ini maka mereka akan menyelesaikan semua tugas tepat waktu.
Kita melewatkan hari sabtu-minggu dan hari libur (kalau ada) di sumbu X karena tidak ada pekerjaan dilakukan pada hari ini, semua orang liburan. Dulu kami menyertakan hari sabtu-minggu dan hari libur di sumbu x, tetapi hal ini malah membuat grafik burndown sedikit membingungkan, karena hal ini akan membuat grafik sedikit mendatar selama hari libur dan biasanya kalau grafik mendatar terjadi, maka ini adalah pertanda buruk dimana tidak ada kemajuan yang terjadi selama hari itu.
Peringatan dalam papan tugas
Hanya dengan melihat sekilas saja ke arah papan tugas, setiap orang bisa melihat indikasi seberapa lancar sprint berjalan. Scrum master bertanggung jawab memastikan tim melakukan aksi yang sesuai untuk setiap peringatan, misalnya :
HOW WE DO SPRINT BACKLOGS | 65
66 | SCRUM AND XP FROM THE TRENCHES
HOW WE DO SPRINT BACKLOGS | 67
Hei, bagaimana caranya melihat keadaan papan tugas hari-hari sebelumnya (traceability)?
Cara terbaik untuk merekam keadaan papan tugas ini dari hari ke hari adalah dengan mengambil foto digital dari papan ini setiap hari. Saya melakukan ini hanya kadang-kadang saja, karena sebanarnya tidak pernah ada keperluan untuk menggali informasi dari foto-foto ini. Biasanya foto ini berguna kalau misalnya papan ini hilang atau secara tidak sengaja dibuang oleh seseorang. Kalau kemampuan untuk melihat lagi keadaan papan tugas di hari-hari sebelumnya sangat penting untuk anda, maka solusi papan tugas ini sepertinya tidak cocok untuk anda. Tetapi saya menyarankan anda untuk benar-benar mempertimbangkan nilai dari traceability ini. Ketika sprint sudah selesai dan kode sudah bisa dideploy di production serta dokumentasi dimasukkan ke repository, apakah ada yang benar-benar peduli dengan berapa banyak story yang diselesaikan pada hari ke 5 sprint? Apakah ada yang benar-benar peduli dengan berapa lama perkiraan waktu untuk menyelesaikan tugas menulis unit test untuk feature Deposit ?
Melakukan perkiraan dalam satuan hari vs jam
Dalam berbagai macam buku dan artikel tentang scrum, anda mungkin akan menemukan bahwa tugas-tugas ini diperkirakan lamanya dalam satuan jam, bukan hari. Kami juga pernah melakukan itu. Rumus kami adalah : 1 man day efektif = 6 man hour efektif. Sekarang kita berhenti melakukan perkiraan waktu dalam satuan jam, setidaknya sebagian besar dari tim kami. Alasanya antara lain : Perkiraan dalam man hour terlalu mendetail, hal ini akan cenderung menyebabkan munculnya tugas-tugas kecil dengan durasi 1-2 jam, dan hal ini tentu saja menyebabkan terjadinya mikro management. Ternyata pada kenyataanya semua orang berfikir pada level satuan per hari, dan mereka biasanya mengalikan hari dengan 6 sebelum menuliskan perkiraan dalam satuan jam. Hmmm, tugas ini bisa selesai dalam satu hari. Oh aku harus menuliskanya dalam jam ya, ok dikalikan 6 dulu berarti yah. Dua unit satuan waktu menyebabkan kebingungan. Hmm dulu kita melakukan perkiraan untuk tugas ini dalam hari apa dalam jam yah?
68 | SCRUM AND XP FROM THE TRENCHES Jadi sekarang kita menggunakan satuan hari sebagai basis satuan waktu. Nilai terendahnya adalah 0.5, tugas yang bisa dikerjalan kurang dari 0.5 hari kita hapus atau kita kombinasikan dengan tugas kecil lain, atau cukup memberikan 0.5 hari sebagai perkiraanya (tidak bahaya kok sedikit memperkirakan lebih panjang dari nilai sebenarnya). Bagus dan sederhana.
7
Bagaimana kami menata ruangan tim
Pojok desain
Saya mencatat bahwa banyak sekali diskusi tentang desain aplikasi yang menarik dan berharga terjadi secara sepontan di depan papan tugas. Dengan alasan ini, kami mencoba menata ruangan untuk memberikan ruang kepada pojok desain ini.
Cara ini terbukti sangat berguna. Tidak ada cara yang lebih baik untuk mendapatkan gambaran dari sistem dibanding dengan berdiri di depan pojok desain ini dan memandang ke arah dua dinding (dinding pertama terpasang papan tulis untuk corat coret, dan dinding ke dua terpasang papan tugas) serta melihat ke arah komputer untuk mencoba aplikasi di server test dari build terakhir (kalau anda cukup beruntung mempunyai
70 | SCRUM AND XP SECARA PRAKTIS continuous build dalam tim anda, silahkan melihat ke bagian bagaimana kami mengkombinasikan Scrum dan XP). Dinding desain ini adalah papan tulis besar yang berisi orat-oret desain dan cetakan dari dokumen desain yang penting (sequence chart, prototipe antar muka, domain model, dst).
Gambar di atas adalah rapat harian scrum yang terjadi di pojok desain yang kita bahas sebelumnya.
Hmmmm.... lihat deh grafik burn down di kanan, kok bagus dan lurus sejajar dengan garis tren, sepertinya mencuragakan ya? Apa ini rekayasa? Tapi tim tersebut kekeuh kalau itu beneran, bukan rekayasa :o)
HOW WE ARRANGE THE TEAM ROOM | 71
Tim harus duduk bersama!
Ketika sampai pada pengaturan tempat duduk dan layout meja, ada satu hal yang harus saya tekankan dengan keras.
Tim harus duduk bersama!
Sedikit mengklarifikasikan agar lebih jelas, saya bilang:
Tim harus duduk bersama!
Orang cenderung malas untuk pindah tempat duduk. Setidaknya di tempat di mana saya pernah bekerja. Mereka tidak mau mengambil barangbarang mereka, mencopot komputer, memindahkan tumpukan barangnya ke meja baru dan mecolokkan semua pada tempatnya lagi. Semakin dekat perpindahanya, semakin malaslah mereka. Ayolah boss, apa artinya pindah cuma 5 meter doank? Kalau anda ingin membangun tim scrum yang efektif, tidak ada alternatif lain. Buat mereka duduk bersama dalam satu meja. Bahkan kalau perlu anda harus mengancam satu per satu anggota tim, bawa barang mereka, dan pindahkan juga cangkir kopinya. Kalau tidak ada ruangan yang cukup untuk tim, buat ruangan baru. Dimana gitu, terserah. Bahkan kalau perlu, di basement. Pindahkan meja-meja yang ada, sogok manager General Affair, lakukan apa saja deh. Pokoknya buat agar tim duduk bersama! Setelah anda bisa membuat tim duduk bersama, hasilnya langsung akan kelihatan. Setelah melewati sprint pertama, tim akan segera setuju bahwa duduk bersama adalah ide yang sangat bagus. Nah sekarang bersama ini contoh kongkritnya seperti apa? Bagaimana meja diatur? Uhm, saya tidak punya pendapat yang pasti tentang pengaturan meja. Bahkan kalaupun saya punya, sebagian besar tim sepertinya tidak akan punya kebebzsan untuk menentukan bagaimana secara pasti mereka menata mejanya. Biasanya ada keterbatasan secara fisik, misalnya ada tim lain di sebelah, ada pintu toilet, ada pantri, ada meja yang dimur ke lantai dan tidak bisa dipindahkan, dan seterusnya. bersama ini berarti: Audibility: Setiap orang dalam tim bisa ngobrol dengan jelas tanpa harus berteriak atau berdiri dari tempat duduknya.
72 | SCRUM AND XP SECARA PRAKTIS
Visibility: Setiap orang dalam tim bisa melihat anggota tim yang lain. Bisa melihat papan tugas, tidak harus dekat sekali sampai bisa kebaca, tapi setidaknya kelihatan. Isolation: Jika tiba-tiba semua anggota tim berdiri dan mulai berdiskusi tentang desain sistem secara spontan dan asyik, tidak ada seorangpun dari luar anggota tim yang merasa terganggu dan sebaliknya pula.
Isolation tidak berarti tim ini terisolasi sepenuhnya. Di lingkungan cubicle, sudah cukup kalau tim berada dalam satu area cubicle tersendiri dan dinding cublicle cukup besar untuk memfilter suara bising dari tim lain. Dan bagaimana kalau ternyata ini adalah tim yang terdistribusi? Tim yang berada dalam tempat yang berbeda-beda? Nah sepertinya anda tidak beruntung. Gunakan sebanyak mungkin bantuan untuk meminimalisasi efek sampingnya, gunakan video conference, webcam, desktop sharing tools, dsb.
Suruh product owner duduk agak jauh dari tim
Product owner sebaiknya duduk agak jauh dari tim tetapi tidak terlalu jauh, tim bisa dengan mudah berjalan ke tempat duduk product owner untuk bertanya sesuatu, dan juga product owner bisa dengan mudah berjalan menuju papan tugas. Tetapi product owner tidak boleh duduk bersama dengan tim. Kenapa? Karena ada kemungkinan product owner tidak bisa menahan diri untuk turut campur sampai hal-hal mendetail, sehingga tim tidak bisa menyatu dengan baik (keadaan dimana tim bisa mengelola dirinya sendiri, sangat produktif dan mempunyai kedekatan antar anggotanya) Jujur saja, ini sebenarnya hanya spekulasi saya. Saya belum pernah secara nyata melihat kasus dimana product owner duduk bersama dengan tim, jadi saya tidak punya pengalaman nyata untuk mendukung alasan saya bahwa product owner yang duduk bersama dengan tim adalah ide yang buruk. Ini lebih merupakan naluri saya dan berdasarkan cerita dari scrum master yang lain.
Jauhkan manager dan coach dari tim
Cukup sulit buat saya untuk menulis bab ini, karena saya sendiri adalah manager sekaligus coach...
HOW WE ARRANGE THE TEAM ROOM | 73 Sudah menjadi tugas saya untuk bekerja sedekat mungkin dengan tim. Saya yang membentuk tim, memindahkan mereka ke tim lain, memasangkan mereka dengan aggota tim lain untuk melaksanakan pair programming, melatih scrum master, mengorganisasikan rapat perencanaan sprint, dst. Beberapa orang berpendapat bahwa ini bisa jadi adalah ide yang baik, karena saya punya pengalaman yang cukup dalam agile software development. Tetapi, saya juga (background musik Dart Vader) kepala divisi pengembangan, jabatan fungsional sebagai manager. Yang artinya kalau saya memasuki ruangan tim, akan menciptakan suasana yang kurang kondusif. Yaah ada boss, ada boss, takut nih, ntar dia nyangka kita yang nggak-nggak, diem-diem aja deh, sok rajin. Kalau bos ngomong jangan dibantah deh Poin saya di sini adalah, kalau anda Scrum coach (dan juga kemungkinan adalah seorang manager), silahkan terlibat sedekat mungkin. Tetapi hanya dalam waktu yang terbatas, kemudian silahkan keluar dan biarkan tim menyatu dan mengelola dirinya sendiri secara bebas. Silahkan lakukan inspeksi ke ruangan tim sekali-kali, tetapi jangan terlalu sering, dengan cara menghadiri sprint demo dan melihat ke papan tugas serta mendengarkan rapat harian scrum. Kalau anda melihat ada yang bisa diperbaiki, ajak scrum master ke ruangan lain dan latihlah dia. Tetapi jangan lakukan ini di depan tim!. Ide lain yang cukup bagus adalah dengan menghadiri spritn retrospective (lihat bagian tentang bagaimana kami menjalankan sprint retrospective), tetapi hanya kalau tim cukup mempercayai anda sehingga kehadiran anda tidak membuat anggota tim malah pada diem. Kalau tim sudah berfungsi dengan baik, pastikan mereka mendapatkan semua yang mereka butuh, lalu ya enyah dari hadapan mereka (kecuali pada saat sprint demo).
8
Bagaimana kami menjalankan rapat harian scrum
Rapat harian scrum yang kami jalankan sama persis dengan yang digambarkan di buku. Rapat dimulai tepat waktu, setiap hari di tempat yang sama. Dulu kita akan melakukan rapat harian scrum di ruang rapat, hal ini terjadi karena dulu kita menggunakan software untuk mencatat sprint backlog. Sekarang kita melakukan rapat harian scrum di ruang yang sama dengan tempat duduk tim, tepat di depan papan tugas. Tidak ada yang lebih efektif dari cara ini!. Kami biasanya rapat sambir berdiri, karena dengan begitu semua orang ingin agar rapat cepat-cepat selesai, sehingga resiko rapat berlarut-larut dan lebih dari 15 menit menjadi lebih sedikit.
Bagaimana kami memperbaharui papan tugas
Kami biasanya memperbaharui papan tugas pada waktu rapat harian scrum. Ketika setiap orang menyampaikan apa yang mereka kerjakan kemarin dan apa yang akan mereka lakukan hari ini, dia akan mencabut post-it dan meletakkanya di kolom berikutnya. Ketika tim menerangkan adanya tugas yang tidak direncanakan, dia akan menempelkan satu kertas post-it sebagai tanda. Kalau ada tim yang mengupdate perkiraan waktu pengerjaan untuk setiap tugas, dia akan menuliskanya di kertas post-it dan mencoret perkiraan waktu yang lama. Terkadang scrum master yang akan mengupdate papan tugas ketika anggota tim berbicara.
Suatu Tim biasanya punya kebijakan bahwa setiap orang harus mengupdate papan tugas sebelum rapat berlangsung. Hal ini juga bekerja
76 | SCRUM AND XP SECARA PRAKTIS dengan baik. Silahkan putuskan kebijakan mana yang sesuai dan terapkan dengan konsisten. Apapun format sprint backlog anda, cobalah melibatkan semua anggota tim dalam menjaga papan tugas dalam keadaan up-to-date. Kami pernah mencoba sprint dimana scrum master adalah satu-satunya orang yang memperbaharui papan tugas dan sprint backlog, scrum master harus berjalan kesana kemari untuk menanyakan setiap orang tentang perkiraan waktu kapan tugas mereka selesai. Banyak kelemahan dari cara ini, antara lain: Scrum master menghabiskan waktu terlalu banyak dengan pekerjaan administratif, alih-alih mendukung tim dengan menyingkirkan penghambat kinerja tim. Anggota tim terkadang tidak tahu-menahu status dari sprint, karena sprint backlog adalah sesuatu yang mereka tidak perlu peduli. Sikap apatis ini mengurangi fokus tim dan kelincahan tim secara umum. Jika sprint backlog didisain dengan baik, setiap anggota tim harusnya bisa mengupdate sprint backlog dengan gampang tanpa bantuan orang lain. Langsung setelah rapat harian scrum, seseorang perlu menjumlah semua perkiraan waktu yang tersisa (mengesampingkan story atau tugas yang ada di kolom selesai) dan kemudian mengeplot angka jumlah perkiraan waktu tersisa ini di grafik burndown.
Menangani si tukang telat
Beberapa tim punya kaleng yang berisi uang. Kalau ada anggota tim yang telat, walaupun cuma satu menit, dia harus memasukkan sejumlah uang tertentu ke dalam kaleng. Tidak perlu bertanya kenapa telat. Kalaupun anda menelpon sebelumnya bilang bahwa anda akan dateng telat, tetap saja harus bayar!. Anda bisa mengelak membayar denda kalau ada alasan yang tidak bisa dihindari, misalnya pergi ke dokter, anaknya sakit atau apalah, usahakan sepakati antar anggota tim, apa alasan yang diijinkan secara sah untuk telat. Uang yang terkumpul digunakan untuk event sosial. Beli makanan untuk acara santai bareng misalnya :o)
HOW WE DO DAILY SCRUMS | 77 Cara ini berjalan cukup baik. Tetapi sebaiknya terapkan cara ini kalau banyak anggota tim yang suka telat. Beberapa tim lain tidak perlu cara ini karena mereka rajin datang pagi dan jarang yang telat.
Menyikapi anggota tim yang tidak tau mau ngapain hari ini
Hal ini tidak jarang terjadi ketika seseorang dari anggota tim ngomong Kemaren saya mengerjakan ini itu itu ini, tetapi hari ini saya nggak tau nih mau ngapain. Gimana donk? Misalnya saja, hari ini Lisa dan Joe tidak tau musti ngapain hari ini. Jika saya adalah scrum master biasanya saya lanjut mempersilahkan anggota tim selanjutnya bicara, tetapi ambil catatan siapa saja yang tidak tau hari ini musti ngapain aja. Setelah semua orang dapat giliran, saya akan memeriksa papan tugas dari atas ke bawah dan memeriksa apakah papan tugas ini sudah mencerminkan keadaan sebenarnya, serta mereka semua paham dengan apa saja yang ada dalam papan tugas tersebut. Saya persilahkan kalau ada yang ingin menambahkan sesuatu di papan tugas ini. Kemudian saya akan melihat catatan saya dan kembali ke orang-orang yang tidak tau mau ngapain hari ini sambil bilang nah kita sudah melihat dari atas sampai bawah papan tugas ini, kira-kira kamu ada ide musti ngapain hari ini? harapan saya sih semoga mereka jadi tau. Kalau tidak, saya biasanya mempertimbangkan apakah ada kesempatan untuk memasangkan orang-orang ini dengan anggota tim lain untuk melakukan pair programming. Misalnya saja, Niklas akan mengimplementasikan antar muka sistem back office hari ini. Saya biasanya dengan sopan menyarankan Joe dan Lisa untuk duduk bersama Niklas dan mencoba melakukan pair programming. Biasanya cara ini cukup berhasil. Kalau tetap saja cara ini tidak berhasil, berikut ini ada beberapa trik yang bisa anda lakukan: Scrum master: Oke, adakah yang bersedia mendemokan versi beta dari aplikasi kita? (asumsinya ini adalah tujuan dari sprint kali ini) Tim: saling pandang bingung sunyi senyap Scrum master: Lho kok pada bingung, bukanya kita sudah selesai? Tim: Lho sapa bilang pak? Blum kok Scrum master: Oh masak? Blom selesai yah? Apa kira-kira yang belum selesai dikerjakan?
78 | SCRUM AND XP SECARA PRAKTIS Tim: Sebenarnya kita tidak punya test server untuk menginstall aplikasi kita, dan build scriptnya gak jalan Scrum master: Aha. (seraya menambahkan dua buah post-it ke dalam papan tugas di bawah kolom 'tugas tidak direncanakan'. Joe dan Lisa, nah kamu mau bantu kita hari ini? Joe: Yup, ok deh saya cari server untuk test dan menginstall aplikasi kita di sana. Lisa: saya coba deh memperbaiki build script yang nggak jalan. Kalau anda beruntung, seseorang akan benar-benar mendemokan aplikasi versi beta yang anda minta. Kereeen! Artinya tim sudah mencapai tujuan sprint. Nah gimana kalau ini terjadi di tengah-tengah sprint? Gampang aja. Beri mereka ucapan selamat, pada hebat-hebat ini orang, lalu ambil satu dua story dari kolom berikutnya di sisi kanan bawah papan tugas, dan pindahkan ke kolom belum dikerjakan di sisi kiri. Ulangi lagi rapat harian scrum. Setelahnya beritahu product owner bahwa anda sudah menambahkan beberapa item baru ke dalam sprint. Tetapi bagaimana kalau tim belum mencapai tujuan sprint sedangkan Joe dan Lisa tetap bersikeras tidak mau menyebutkan mau ngapain mereka hari ini. Biasanya saya akan mempertimbangkan untuk melakukan salah satu dari beberapa cara berikut ini (tidak satupun dari cara ini menyenangkan, tapi ya mau gimana, ini adalah cara terakhir) :
Mempermalukan mereka : ya kalau kamu gak tau musti ngapain hari ini dan gak juga mau bantuin tim, sebaiknya pulang saja, baca buku atau ngapain kek. Atau duduk-duduk aja sana sampai ada seseorang yang memanggil dan butuh bantuan kamu Cara lama : Tinggal kasih aja mereka tugas. Peer pressure: Bilang silahkan pikir-pikir dulu Joe dan Lisa, kita akan terus berdiri di sini sampai kamu setuju melakukan sesuatu yang berguna dan membantu tim menyelesaikan tugasnya!. Pelayan tim: Bilang Baiklah kalau begitu, kamu berdua bisa membantu kita secara tidak langsung hari ini dengan menjadi OB. Bikin kopi, pijat punggung teman-teman yang lain, bersihkan sampah, beliin kita makan siang dan semua hal lainya yang mungkin kita ingin kamu layani selama hari ini. Saya jamin Joe dan Lisa pasti menemukan dengan cepat apa yang bisa mereka lakukan hari ini untuk menghindari jadi OB hari ini :o)
Jika ada seorang anggota tim yang memaksa anda untuk menekan mereka sejauh ini, maka sebaiknya anda menggelandang orang ini ke ruangan lain
HOW WE DO DAILY SCRUMS | 79 dan berikan pelatihan serius. Kalau masalah ini muncul terus-menerus, anda perlu mempertimbangkan orang ini penting gak sih kehadiranya untuk tim. Kalau memang tidak penting, silahkan pindahkan orang ini dari tim, atau malah dipecat sekalian!. Kalau ternyata orang ini cukup penting, mungkin bisa diakali dengan menugaskan teman satu timnya sebagai mentor. Joe mungkin programmer yang jago banget dan levelnya sudah sampai architect, hanya saja dia lebih seneng ada orang lain yang memberinya tugas daripada dia memilih sendiri tugasnya. Oke. Berikan Niklas peran sebagai pemberi tugas kepada Joe secara permanen. Atau bisa juga anda sendiri yang mengambil tugas ini. Jika Joe mamang penting kehadiranya di dalam tim, cara ini akan cukup bermanfaat. Kami punya kasus seperti ini, dan cara ini kurang lebih berhasil memecahkan masalah ini.
9
Bagaimana kami melakukan sprint demo
Sprint demo (atau sprint review seperti beberapa orang meyebutnya) adalah satu bagian scrum yang sangat penting tetapi sering kali diremehkan. Oh kita harus bikin demo yah? Keknya sih nggak asik banget! Kita kan nggak ada waktu menyiapkan demo! Gw ga sempet deh dateng-dateng ke demo orang lain, kerjaan gw aja numpuk banyak gini!
Kenapa kita bersikeras bahwa di akhir sprint harus ada demo
Sprint demo yang dijalankan dengan baik, walaupun kedengaranya tidak terlalu dramatis, mempunyai banyak efek positif terhadap tim. Tim mendapatkan pujian atas pencapaian mereka. Tim akan berasa ada artinya! Orang lain akan tahu tentang apa yang sedang dilakukan tim anda. Demo akan memberikan umpan balik sangat penting dari stakeholder. Demo adalah (atau malah seharusnya) sebuah acara sosial dimana anggota tim berbeda berinteraksi dengan yang lain dan mendiskusikan apa yang sedang mereka kerjakan. Ini sangat berharga. Menjalankan demo sebenarnya akan memaksa tim untuk menyelesaikan tugasnya dengan baik dan mereleasenya (walaupun cuma di test environment). Tanpa adanya demo, kita akan terus menerus mendapatkan aplikasi yang 99% selesai. Dengan melaksanakan demo kita mungkin akan menyelesaikan lebih sedikit, tetapi lihat sisi baiknya, yang sedikit ini 100% selesai. Dimana bagi kita, sedikit yang selesai jauuuuh lebih baik daripada banyak tapi setengah jadi. Pada akhirnya item-item setengah jadi ini akan mengotori sprint berikutnya.
HOW WE DO SPRINT RETROSPECTIVES | 81 Jika tim ternyata dipaksa untuk melaksanakan sprint demo, padahal mereka tidak punya banyak hal yang bisa dibilang selesai, demo akan berarkhir memalukan. Tim akan kagok dan terbata-bata ketika menjalankan demo, tepuk tangan di akhir demo akan berasa setengah hati saja. Orang-orang akan merasa sedikit kasihan ke anggota tim, beberapa bahkan merasa jengkel karena membuang-buang waktu menghadiri demo yang buruk. Hal ini akan terasa menyakitkan bagi tim. Tetapi efeknya akan terasa seperti obat yang pahit. Sprint berikutnya, semua anggota tim akan terbakar semangatnya untuk menyelesaikan tugasnya! Mereka akan berfikir mungkin di sprint berikutnya kita cukup mendemokan 2 feature saja, tapi gw pastiin kali ini 2 fiture ini harus jalan dengan sempurna!!. Tim tahu bahwa mereka harus melakukan demo apapun taruhanya, yang secara signifikan akan meningkatkan semangat mereka untuk menyelesaikan feature tanpa cacat sama sekali pada waktu demo. Saya menyaksikan sendiri dengan mata kepala saya hal ini terjadi beberapa kali.
Checklist untuk sprint demo
Pastikan anda menjelaskan tujuan sprint dengan jelas. Jika ada beberapa yang hadir dalam demo tidak tahu sama sekali tentang produk anda, ambil waktu beberapa menit untuk menjelaskanya. Jangan menghabiskan waktu terlalu lama mempersiapkan demo, terutama tidak perlu lah menyiapkan presentasi (PPT) hanya untuk tujuan ini. Buang hal-hal yang tidak penting dan fokus mendemonstrasikan kode aplikasi. Lakukan demo dengan cepat, fokuskan persiapan anda untuk bisa melakukan menjalankan demo dengan cepat daripada menjalankan demo dengan indah. Pertahankan demo pada level bisnis, tidak perlu menjelaskan detail teknisnya. Fokus pada apa yang sudah kita buat daripada bagaimana kita membuatnya. Kalau mungkin, biarkan yang hadir dalam demo mencoba aplikasi anda sendiri. Jangan mendemokan banyak sekali perbaikan bug kecil kecil atau feature yang remeh. Sebutkan saja sekilas tanpa perlu mendemokan kepada hadirin, karena tentu saja hal tersebut akan memerlukan waktu sangat panjang dan mengalihkan fokus dari feature yang lebih penting.
Bagaimana caranya mendemokan hal-hal yang tidak bisa didemokan
82 | SCRUM AND XP FROM THE TRENCHES Tim : Saya sepertinya tidak akan mendemokan story ini, karena tidak dapat didemokan. Judul storynya adalah 'meningkatkan kemampuan sistem agar bisa menangani 10.000 pengguna sekaligus', gak mungkin donk mengundang 10.000 orang sekaligus dan meminta mereka mengakses sistem berbarengan Scrum master: ini udah selesai ya? Tim: ya, tentu saja udah selesai. Scrum master: Lah trus gimana kamu tahu kalau ini sudah selesai? Tim : Saya siapkan sistem untuk dites performanya, kemudian saya menjalankan 8 server sekaligus, setelah itu sistem akan dibombardir dengan banyak sekali request Scrum master: tapi apa kamu yakin bahwa sistem sanggup melayani 10.000 pengguna sekaligus Tim: Ya, yakin sekali. Mesin servernya sih bapuk, tapi masih sanggup kok menangani 50.000 request secara berbarengan selama test ini berlangsung Scrum master: Gimana cara kamu tahu ada 50.000 request secara bersamaan? Tim (sedikit jengkel) : Saya ada reportnya nih dari JMeter! Anda bisa lihat sendiri kalau tidak percaya! Ada tuh angka-angka yang menandakan berapa banyak request yang dikirim ke server selama test berlangsung Scrum master: Oh luar biasa! Lah itu sudah cukup untuk demo kamu. Tunjukkan saja laporan itu dan terangkan kepada yang hadir di demo. Lebih baik daripada tidak ada demo sama sekali kan? Tim: itu aja cukup tho? Tapi laporanya jelek amat, saya poles sedikit yah. Scrum master: Oke, tapi jangan lama-lama ya molesnya. Tidak harus bagus, yang penting cukup informatif aja
10
Bagaimana kami melakukan sprint retrospective
Kenapa bersikeras bahwa semua anggota tim harus melakukan retrospective
Yang paling penting dari retrospective adalah pastikan bahwa retrospective diadakan. Jadi yang paling penting ada dulu deh. Dengan berbagai alasan, tim sepertinya tidak terlalu senang dengan retrospective. Tanpa pendekatan yang lemah lembut sebagian besar tim akan berusaha melewati retrospective dan langsung menuju sprint berikutnya. Mungkin ini lebih ke arah budaya di Swedia, saya juga tidak terlalu yakin. Walaupun begitu, semua orang sepertinya setuju bahwa retrospective sangat berguna untuk mereka. Malah kenyataanya, saya bisa bilang bahwa retrospective adalah even kedua terpenting dalam scrum (yang paling penting adalah rapat perencanaan sprint) karena dalam retrospective ini lah kesempatan terbaik untuk berkembang. Tentu saja hal ini tidak berarti bahwa ide-ide yang baik hanya muncul dalam retrospective, anda bisa saja sedang duduk santai di rumah tiba-tiba muncul ide yang brilian! Tetapi apakah tim anda akan menerima ide anda? Mungkin saja, tetapi sebuah ide akan lebih mudah diterima oleh tim kalau ide itu berasal dari dalam tim itu sendiri. Contohnya. Ide muncul pada waktu retrospective ketika semua orang dipersilahkan untuk menyampaikan idenya dan kemudian didiskusikan bersama-sama. Tanpa retrospective anda mungkin akan menemukan bahwa tim terus menerus membuat kesalahan yang sama berulang-ulang.
84 | SCRUM AND XP SECARA PRAKTIS
Bagaimana kami mengatur retrospective
Format retrospective berbeda-beda, tetapi biasanya kami melakukanya seperti di bawah ini: Kami mengalokasikan 1-3 jam tergantung seberapa panjang kirakira rapat ini berlangsung. Peserta: Product owner, scrum master, seluruh anggota tim dan saya sendiri. Kami pindah dari ruangan kantor yang tertutup, ke ruangan yang di dalamnya ada sofa yang nyaman, atau ruangan di loteng atas gedung (rooftop), atau tempat yang kira-kira semua orang merasa nyaman. Selama kita bisa berdiskusi tanpa terganggu sih saya rasa cukup. Kami biasanya tidak pernah mengadakan retrospectives di ruangan tim, karena biasanya perhatianya bisa terpecah. Satu orang ditunjuk sebagai sekretaris yang bertugas mencatat hasil retrospectives. Scrum master akan menunjukkan sprint backlog dan, dengan bantuan anggota tim lain, merangkum sprint yang baru saja selesai. Kejadian-kejadian penting dan keputusan yang dibuat selama sprint, dst. Kita biasanya memberikan giliran kepada setiap orang untuk menyampaikan uneg-unegnya, tentang apa yang sudah berjalan dengan baik, apa yang bisa diperbaiki dan apa yang mereka pikir bisa dilakukan dengan cara yang berbeda. Kita lihat perbandingan antara perkiraan vs kecepatan aktual. Kalau ada perbedaan yang cukup besar, kita coba analisis apa kira-kira penyebabnya. Ketika waktu yang dialokasikan sudah habis, scrum master akan berusaha merangkum saran-saran kongkrit tentang apa saja yang bisa kita lakukan dengan lebih baik di sprint berikutnya.
Retrospectives yang kami lakukan secara umum tidak terlalu terstruktur. Yang menjadi semangat retrospectives adalah satu ide yang sama, yaitu apa yang bisa kita perbaiki dalam sprint berikutnya Berikut ini adalah contoh dari retrospectives yang baru-baru ini kita adakan:
BAGAIMANA KITA MENJALANKAN SPRINT RETROSPECTIVES| 85
Terdapat tiga kolom: Bagus: kalau kita ulang lagi scrum ini dari awal, kita akan melakukan hal ini sama persis dengan yang sekarang sudah kita lakukan. Bisa diperbaiki : Kalau kita mengulang lagi sprint ini, kita akan melakukan hal ini sedikit berbeda. Perbaikan: ide yang kongkrit tentang bagaimana kita bisa memperbaiki sprint di masa yang akan datang. Jadi kolom pertama dan kedua melihat ke masa lalu, sedangkan kolom ketiga melihat masa depan. Setelah tim melakukan brainstorming dan menempelkan kertas post-it, kita lakukan voting untuk menentukan perbaikan mana yang akan kita fokuskan di sprint berikutnya. Setiap anggota tim diberi tiga buah magnet kemudian mempersilahkan mereka untuk memilih mana saja perbaikan yang menjadi prioritas di sprint yang akan datang. Setiap anggota tim besa menempelkan magnet sesuka hatinya, bahkan boleh saja menempelkan ketiga magnet ke satu item perbaikan. Berdasarkan hasil voting ini, kita memilih 5 perbaikan yang akan menjadi fokus di sprint berikutnya. Catat kelima perbaikan ini untuk nanti didiskusikan kembali pada waktu retrospectives berikutnya. Sangat penting untuk tidak terlalu ambisius dalam melakukan perbaikan. Fokuskan saja pada beberapa perbaikan pada satu sprint.
86 | SCRUM AND XP SECARA PRAKTIS
Menyebarkan apa yang sudah kita pelajari kepada anggota tim lain
Informasi yang muncul dalam sprint retrospectives biasanya sangat bermanfaat. Apakah tim ini susah fokus karena sales manager sering menculik programmer untuk berpartisipasi sebagai technical expert di rapat-rapat sales? Ini adalah informasi yang sangat penting. Mungkin juga tim lain juga mempunyai masalah yang sama? Apakah kita juga harus mengajari sales lebih banyak tentang produk kita, sehingga mereka bisa melakukanya sendiri? Sprint retrospectives tidak hanya tentang bagaimana satu tim ini bisa meningkatkan kinerja mereka di sprint berikutnya, sprint retrospectives juga mempunyai implikasi yang lebih luas. Strategi kami untuk mengatasi hal ini sangat sederhana. Satu orang (dalam hal ini saya) akan menghadiri semua sprint retrospectives dan bertindak sebagai pengumpul informasi. Informal saja. Alternatif lain adalah setiap tim scrum akan mempublikasi laporan sprint retrospectives. Kita sudah mencoba teknik ini, tetapi ternyata tidak banyak yang mau membaca laporan seperti ini, dan pada akhirnya tidak banyak aksi untuk menindak lanjuti laporan ini. Jadi ya kita lakukan yang paling sederhana saja. Aturan yang penting untuk seseorang yang menjadi pengumpul informasi: Dia haruslah seorang pendengar yang baik. Kalau retrospectives berlangsung sepi-sepi saja, dia harus siap dengan pertanyaan-pertanyaan sederhana yang punya tujuan jelas yang bisa merangsang diskusi dalam tim. Pertanyaan ini misalnya : kalau misalnya kalian bisa memutar waktu kembali dan memulai lagi sprint ini dari awal, apa saja yang mungkin ingin kamu lakukan sedikit berbeda? Dia harus mau menghabiskan sebagian waktunya mengunjungi semua retrospectives yang diadakan oleh seluruh tim dalam perusahaan. Dia harus seseorang dari posisi yang cukup punya kekuasaan, sehingga kalau ada saran perbaikan yang berhubungan dengan hal-hal diluar tim, dia bisa segera mengambil aksi. Cara ini bekerja cukup baik, tetapi bisa jadi banyak juga pendekatan lain yang lebih berhasil. Kalau memang ada yang seperti itu, tolong kasih tau saya juga ya.
BAGAIMANA KITA MENJALANKAN SPRINT RETROSPECTIVES| 87
Berubah atau tidak berubah
Misalnya tim menyimpulkan bahwa komunikasi antara kita minim sekali, jadi kerjaan kita saling tumpang tindih dan membuat desain menjadi berantakan. Apa yang bisa anda lakukan untuk mengatasinya? Membuat rapat harian desain? Menggunakan perkakas baru untuk mempermudah komunikasi? Membuat halaman wiki? Yaaa, bisa saja begitu. Tapi bisa juga nggak begitu. Kita sering menemukan bahwa, di banyak kasus, hanya dengan menemukan masalah sudah cukup bagi tim untuk bisa memecahkan masalah tersebut dengan sendirinya di sprint berikutnya. Terutama kalau kita menempelkan hasil dari sprint retrospectives di dinding di dalam ruangan tim (masalahnya kita sering lupaaa, memalukan!). Setiap parubahan yang kita buat dalam tim pasti ada konsekuensinya, sebelum memaksakan perubahan ini, pertimbangkan untuk tidak melakukan apapun dan berharap masalah akan hilang (atau mengecil) dengan sendirinya. Contoh di atas (komunikasi yang minim antar anggota tim) adalah tipe dari jenis masalah yang kalaupun didiemin nanti juga hilang dengan sendirinya. Karena ini masalah kebiasaan saja, setelah tahu masalahnya, masing-masing tim akan menyesuaikan dengan sendirinya tanpa perlu ada perubahan berarti di dalam alur kerja tim. Kalau anda membuat perubahan berarti setiap kali seseorang mengeluh tentang sesuatu, orang-orang akan menjadi malas menyampaikan masalah-masalah kecil yang terkadang sepele, dan ini tanda yang tidak baik.
Contoh-contoh hal-hal yang mungkin muncul dalam retrospectives
Berikut ini adalah beberapa contoh masalah yang sering muncul dalam rapat perencanaan sprint, masalah ini biasanya terungkap dalam sprint retrospectives. Saya juga sertakan pemecahan umum yang bisa digunakan.
Kita seharusnya menghabiskan waktu lebih banyak memecah story ke dalam tugas-tugas yang lebih kecil
Hal ini sangat umum terjadi. Setiap hari pada saat rapat harian scrum, anggota tim sering kali ngomong Gw ga tau nih mau ngapain hari ini. Jadi setelah rapat harian scrum selesai, anda harus menghabiskan sedikit
88 | SCRUM AND XP SECARA PRAKTIS waktu untuk mencari tugas yang bisa diberikan kepada anggota tim ini. Biasanya jauh lebih mudah melakukan hal ini jauh-jauh hari, misalnya pada saat rapat perencanaan sprint. Pemecahan : tidak ada. Tim kemungkinan besar akan menyelesaikan ini dengan sendirinya di rapat perencanaan sprint berikutnya. Kalau hal ini terus berulang, tambahkan batas waktu lamanya rapat perencanaan sprint agar ada cukup waktu untuk memecah story menjadi tugas-tugas yang lebih kecil
Terlalu banyak gangguan external
Pemecahan: Minta tim untuk menurunkan focus factor di sprint berikutnya, sehingga mereka bisa mempunyai rencana yang lebih realistis. Bilang ke tim untuk mencatat gangguan apa saja yang muncul di sprint berikutnya. Siapa yang mengganggu dan berapa lama gangguan berlangsung. Ini akan membuat pemecahan masalah menjadi lebih mudah di sprint berikutnya. Bilang ke timnya, kalau ada yang gangguin suruh minta ijin dulu ke scrum master atau product owner. Tim bisa menunjuk satu orang sebagai penjaga gawang, semua gangguan harus lewat dia, sehingga sisa dari tim bisa fokus. Bisa saja penjaga gawang ini adalah scrum master atau dijabat secara bergantian antar anggota tim.
Kita terlalu optimis dan akhirnya hanya setengah saja yang bisa terselesaikan
Pemecahan: tidak perlu. Tim akan menyadari ini dan di sprint selanjutnya mereka tidak akan terlalu optimis.
Kantor kita terlalu berisik dan berantakan
Pemecahan: Coba buat lingkungan kerja yang lebih baik, atau pindahkan tim ke hotel atau villa di puncak :D. Terserah deh gimana caranya. Lihat bagian tentang Bagaimana kami mengatur ruangan tim Kalau tidak memungkinkan, bilang ke tim untuk menurunkan focus factor di sprint berikutnya, serta terangkan dengan jelas bahwa focus factor yang rendah ini disebabkan karena kantor yang berisik dan berantakan. Harapanya product owner akan membawa masalah ini ke management level atas supaya segera diperbaiki.
BAGAIMANA KITA MENJALANKAN SPRINT RETROSPECTIVES| 89
Untungnya saya tidak pernah sampai mengancam akan memindahkan tim ke luar kantor. Tapi saya pasti melakukanya kalau tidak ada pilihan lain.
11
Waktu jeda antara dua buah sprint
Dalam kehidupan nyata, anda tidak bisa terus menerus berada dalam sprint. Anda perlu beristirahat antara sprint. Sprint biasanya berlangsung sangat intensif, baik di scrum atau di software development secara umum. Sebagai seorang developer, anda tidak selalu dapat istirahat cukup, setiap hari anda harus berdiri di rapat harian scrum dan menjelaskan ke semua orang apa yang sudah dilakukan kemaren dan apa yang akan dilakukan hari ini. Tetapi developer lain yang mungkin nggak ada banyak kerjaan akan mengatakan bahwa saya menghabiskan sebagian besar waktu saya facebookan, twitteran dan ngaskus sambil nyeruput cappuccino. Sebagai tambahan dari waktu istirahat di hari libur, ada alasan lain kenapa waktu jeda antara sprint adalah ide yang baik. Setelah sprint demo dan retrospectives, kepala product owner dan anggota tim akan berisi banyak sekali informasi dan ide-ide untuk dicerna. Kalau kita langsung mengadakan rapat perencanaan sprint selanjutnya, setiap orang menjadi tidak punya waktu cukup untuk mencerna informasi dan memasukkanya dalam hati. Product owner juga perlu waktu untuk melihat lagi prioritas apa saja yang perlu sedikit diubah setelah melihat sprint demo. Contoh yang buruk: Senin 09-10 : Sprint 1 demo 10-11 : Sprint 1 retrospectives
13-16: Sprint 2 rapat perencanaan
Kami berusaha memperkenalkan waktu jeda sebelum memulai sprint baru (lebih sepesifik lagi adalah waktu jeda antara setelah menyelesaikan sprint retrospectives hingga tepat sebelum memulai rapat perencanaan sprint yang baru). Tapi ya terkadang kita gak bisa juga sih, karena harus cepatcepat memulai sprint berikutnya.
92 | SCRUM AND XP SECARA PRAKTIS Setidaknya, kita mencoba memastikan bahwa sprint retrospectives dan rapat perencanaan sprint berikutnya tidak dilaksanakan dalam hari yang sama. Setiap orang harus tidur dulu yang pules tanpa memikirkan sprint barang sekejap, baru kemudian kita mulai lagi sprint. Contoh yang baik: Senin 09-10 : Sprint 1 demo 10-11 : Sprint 1 retrospectives Contoh lebih baik lagi:
Jumat 09-10 : Sprint 1 demo 10-11 : Sprint 1 retrospectives Sabtu Minggu Senin 13-16: Sprint 2 rapat perencanaan
Selasa 13-16: Sprint 2 rapat perencanaan
Satu hal kita bisa lakukan untuk mengisi waktu jeda ini adalah dengan menyelenggarakan lab days atau hackaton ( atau apapun anda mau menyebutnya). Ini adalah waktu di mana developer dianjurkan untuk melakukan apa saja yang mereka mau (OK, saya terinspirasi google). Misalnya dengan membaca tentang perkakas baru atau API baru, belajar untuk mendapatkan sertifikasi, diskusi hal-hal nerd dengan teman sekantor, membuat kode untuk sekedar hobi, dst. Tujuanya utamanya adalah kita buat satu hari jeda tanpa sprint dan mengisinya dengan kegiatan bermanfaat. Dengan begitu anda bisa memberikan kesempatan tim untuk sedikit beristirahat sekaligus memberi mereka kesempatan untuk mengupdate pengetahuan mereka dengan halhal baru di luar sprint. Plus ini adalah salah satu daya tarik yang cukup berarti bagi pegawai lama untuk tetap tinggal dan pegawai baru yang akan bergabung ke perusahaan, ada waktu bebas :D. Contoh terbaik?
Kamis 09-10 : Sprint 1 demo 10-11 : Sprint 1 retrospectives Jumat Hackaton Sabtu Minggu Senin 13-16: Sprint 2 rapat perencanaan
Sekarang ini kita punya lab days sekali sebulan. Jumat pertama setiap bulan tepatnya. Kenapa kok tidak dilakukan antara dua sprint? Uhm karena menurut saya lebih penting untuk mengadakan lab days bersamaan serentak satu kantor daripada masing-masing tim scrum. Kalau nggak, biasanya orang-orang tidak menganggap ini serius. Selain itu, kita juga sebenarnya tidak mempunyai jadwal sprint yang sama persis untuk semua
HOW WE DO RELEASE PLANNING AND FIXED PRICE CONTRACTS |93 produk, jadi saya harus memilih satu hari yang tidak terkait denga sprint sebagai hari pelaksanaan lab days. Kami mungkin suatu hari ingin mencoba mensinkronisasikan semua sprint dalam satu perusahaan (start dan selesainya sprint selalu bersamaan). Dalam kasus seperti ini, kami pasti akan meletakkan satu hari lab days antar sprint.
12
Bagaimana kami merencanakan release dan menyiasati kontrak dengan harga tetap
Terkadang kita perlu merencanakan lebih dari satu sprint dalam satu waktu. Biasanya hal ini terjadi kalau proyek yang kita kerjakan mempunyai harga tetap (fixed price) dimana perencanaan harus dilakukan jauh-jauh hari, kalau tidak begitu bisa-bisa kita tidak bisa menyelesaikan pekerjaan tepat waktu. Biasanya, kita merencanakan release untuk menjawab pertanyaan Kapan kira-kira, kasarnya, kita bisa memberikan versi 1.0 dari aplikasi ini kepada pelanggan? Kalau anda benar-benar ingin belajar untuk memahami perencanaan release, saya sarankan anda membaca bukunya Mike Cohn Agile estimating and Planning. Saya sangat berharap dulu saya baca buku itu lebih awal (saya baca buku itu setelah berusaha memikirkan sendiri bagaimana caranya merencanakan release...). Perencanaan release versi saya sendiri ini cukup sederhana dan bisa digunakan sebagai titik awal.
Definiskan batas-batas yang bisa diterima pelanggan
Sebagai tambahan dari product backlog yang normal, product owner mendefinisikan batas-batas yang bisa diterima pelanggan yang merupakan klasifikasi sederhana dari sisi pentingnya story ditinjau dari sisi kontrak dengan pelanggan. Berikut ini contoh aturan dari batas-batas tersebut: Semua item dengan nilai derajat kepentingan >= 100 harus dimasukkan ke versi 1.0, kalau tidak kita akan didenda sampai bangkrut.
HOW WE DO RELEASE PLANNING AND FIXED PRICE CONTRACTS |95 Semua item dengan nilai kepentingan 50-99 juga harus diikutkan dalam versi 1.0, tetapi kita bisa sedikit mengelak dengan melepas versi berikutnya setelah versi 1.0 dilepas. Item dengan nilai kepentingan 45-49 bisa dilakukan di versi release berikutnya : 1.1. Item dengan kepentingan < 25 artinya adalah fiture ini sedikit spekulatif, kemungkinan kita nggak memerlukannya sama sekali, kita daftarkan lebih karena jaga-jaga siapa tahu user menanyakan.
Berikut ini adalah contoh product backlog, warna menyesuaikan dengan aturan di atas
Derajat kepentingan 130 120 115 110 100 95 80 70 60 40 35 10 10 Nama pisang apel jeruk jambu pear kismis kacang donat bawang anggur pepaya blueberry peach
Merah = harus dimasukkan ke versi 1.0 (pisang pear) Kuning = kalau bisa dimasukkan ke dalam versi 1.0 (kismis bawang) Hijau = bisa dikerjakan nanti saja kalau diperlukan (anggur peach)
Kalau kita bisa menyelesaikan semua dari pisang sampai bawang, pada saat deadline kita aman. Kalau kehabisan waktu mungkin kita bisa selamat walaupun kismis, kacang, donat dan bawang belum selesai. Semua di bawah bawang bisa kita kategorikan sebagai bonus.
Perkiraan waktu pengerjaan adalah item yang paling penting
Agar release bisa direncanakan dengan baik, product owner memerlukan perkiraan waktu, setidaknya semua story yang ada dalam kontrak harus diperkirakan terlebih dahulu. Sama caranya dengan kita melaksanakan
96 | SCRUM AND XP SECARA PRAKTIS rapat perencanaan sprint, yaitu kerja sama antara tim dan product owner, tim akan melakukan perkiraan dan product owner akan menjelaskan story serta menjawab pertanyaan yang diajukan tim. Perkiraan waktu yang mendekati nilai sebenarnya sangat berharga, nilainya menjadi rendah kalau perkiraan itu melenceng, misalnya, 30%, dan menjadi tidak berharga sama sekali kalau tidak mendekati kenyataan. Ini adalah pendapat saya mengenai nilai dari perkiraan waktu dalam kaitanya dengan siapa yang menghitungnya dan berapa lama waktu yang mereka habiskan untuk melakukan perhitungan tersebut.
Grafik di atas adalah cara panjang untuk mengatakan bahwa : Biarkan tim yang melakukan perkiraan. Jangan membiarkan mereka menghabiskan terlalu banyak waktu melakukan perkiraan. Pastikan bahwa mereka memahami bahwa waktu perkiraan adalah perkiraan kasar saja, bukan merupakan komitmen. Biasanya product owner akan mengumpulkan semua anggota tim dalam ruangan, memberikan briefing yang cukup dan menyampaikan tujuan dari rapat perencanaan release ini adalah untuk melakukan perkiraan untuk, misalnya, 20 story terpenting dalam product backlog. Product owner akan menjelaskan satu per satu setiap story kemudian mempersilahkan tim untuk mulai melakukan perkiraan. Product owner akan tinggal di dalam ruang rapat untuk menjawab dan mengklarifikasi cakupan dari setiap story kalau diperlukan. Sama persis seperti dalam rapat perencanaan sprint, kolom bagaimana cara mendemokan story akan sangat berguna untuk menekan resiko adanya kesalahpahaman.
HOW WE DO RELEASE PLANNING AND FIXED PRICE CONTRACTS |97 Rapat ini harus dibatasi waktunya secara ketat, kalau tidak begitu anggota tim biasanya cenderung menghabiskan banyak waktu untuk memperkirakan sebagian kecil story. Jika product owner ingin menghabiskan waktu lebih banyak lagi untuk rapat perencanaan release ini, dia bisa menjadwalkan rapat lagi di lain waktu. Anggota tim meyakinkan kepada product owner tentang akibat yang timbul karena waktu yang dihabiskan untuk mengadakan rapat ini, jadi product owner mengerti bahwa ada harga yang dibayar karena waktunya digunakan untuk mengadakan rapat, alih-alih menulis kode. Berikut ini sebuah contoh bagaimana hasil dari proses perkiraan waktu ini (dalam satuan story point).
Derajat kepentingan 130 120 115 110 100 95 80 70 60 40 35 10 10 Nama pisang apel jeruk jambu pear kismis kacang donat bawang anggur pepaya blueberry peach Perkiraan waktu 12 9 20 8 20 12 10 8 10 14 4
Memperkirakan Kecepatan
OK, jadi sekarang kita sudah mempunyai perkiraan kasar dari beberapa story terpenting dalam product backlog. Langkah berikutnya adalah membuat perkiraan rata-rata kecepatan per sprint. Hal ini berarti kita harus memutuskan berapa angka focus factor. Lihat bagian tentang bagaimana tim memutuskan apa saja story yang diikutkan dalam sprint. Focus factor pada dasarnya adalah seberapa besar porsi waktu anggota tim yang dihabiskan untuk fokus bekerja pada story yang sudah ditetapkan. Angkanya tidak pernah 100% karena tim biasanya menghabiskan waktu untuk mengerjakan hal-hal yang tidak direncanakan,
98 | SCRUM AND XP SECARA PRAKTIS berpindah dari satu tugas ke tugas yang lain (context switching), membantu teman yang lain, memeriksa email dan membalasnya, memperbaiki komputer yang rusak, bergosip tentang politik kantor di pantri, ngaskus dst. Misalnya kita menetapkan bahwa focus factor dari tim sekitar 50% (angka ini cukup rendah, biasanya focus factor berkisar di angka 70%). Kemudian misalnya panjang dari sprint adalah 3 minggu (15 hari) dan ukuran tim kita adalah 6 orang. Setiap sprint akan ada 90 man days, tetapi kita cuma bisa berharap akan menyelesaikan story senilai 45 man days (dikarenakan focus factor yang hanya 50%). Jadi perkiraan kecepatan kita adalah 45 story point. Kalau misalnya setiap story point bisa diselesaikan dalam waktu 5 hari (yang biasanya tidak begitu) maka tim akan bisa menyelesaikan kira-kira 9 story point per sprint.
Kita gabungkan semua informasi di atas ke dalam rencana release
Sekarang karena kita sudah punya perkiraan waktu dan perkiraan kecepatan, kita bisa dengan mudah memotong-motong product backlog ke dalam sprint. Derajat kepentingan 130 120 115 110 100 95 80 70 60 40 Nama Pisang Apel Jeruk Jambu Pear Kismis Kacang Donat Bawang Anggur Perkiraan waktu Sprint 1 12 9 20 Sprint 2 8 20 12 Sprint 3 10 8 10 14 Sprint 4
HOW WE DO RELEASE PLANNING AND FIXED PRICE CONTRACTS |99 35 10 10 Pepaya Blueberry Peach 4
Setiap Sprint akan mengikutkan sebanyak mungkin story tanpa melebihi kecepatanya, yaitu 45 story point. Nah sekarang kita bisa melihat bahwa kira-kira akan diperlukan 3 sprint untuk menyelesaikan semua story yang dikategorikan dalam harus selesai (warna coklat) dan kalau bisa sih selesai (warna kuning). 3 sprint = 9 minggu hari kerja = 2 bulan hari kerja. Sekarang apakah perhitungan ini sesuai dengan batas waktu yang dijanjikan kepada pelanggan? Tergantung sepenuhnya dari apa yang ada dalam kontrak, misalnya seberapa kaku cakupan waktunya dst. Kami biasanya menambahkan waktu cadangan yang cukup banyak untuk berjaga-jaga terhadap perhitungan perkiraan waktu yang meleset, masalah yang tidak diharapkan, feature tambahan yang tidak diperhitungkan sebelumnya, dst. Jadi dalam kasus ini kita mungkin bisa setuju untuk menyelesaikan aplikasi dalam waktu 3 bulan, dengan begitu ada 1 bulan waktu cadangan. Satu hal yang menarik adalah kita akan mendemonstrasikan sesuatu yang kelihatan bisa digunakan kepada pelanggan setiap 3 minggu dan mengundang mereka untuk melakukan perubahan yang diperlukan sejalan dengan waktu (hal ini juga tergantung dengan persetujuan dalam kontrak tentang perubahan feature).
Menyesuaikan rencana release
Kenyataan selalu tidak sesuai dengan rencana, jadi rencanalah yang harus menyesuaikan kenyataan, bukan sebaliknya. Setelah setiap sprint kita bisa melihat kecepatan sebenarnya dari sprint tersebut. Kecepatan aktual dari sprint pasti berbeda dengan perkiraan kecepatan, kita akan merevisi perkiraan kecepatan untuk sprint di masa mendatang dan menyesuaikan rencana release. Kalau ternyata kenyataan ini membuat kita dalam kesulitan, product owner mungkin bisa mulai bernegosiasi dengan pelanggan dan mulai mengecek bagaimana dia bisa mengurangi cakupan aplikasi tanpa melanggar kontrak. Atau mungkin bisa juga dia dan tim berusaha meningkatkan kecepatan atau menaikkan focus factor dengan menyingkirkan halangan serius yang ditemukan selama sprint berlangsung. Product owner mungkin memanggil pelanggan dan bilang Hi, kita agak telat dibanding dengan jadwal, tetapi kita tetep percaya kalau tenggat
100 | SCRUM AND XP SECARA PRAKTIS waktu yang ditentukan masih bisa dicapai kalau saja kita menghilangkan 'game pacman' dalam aplikasi yang ternyata memerlukan banyak sekali waktu untuk diimplementasikan. Kita bisa menambahkan feature itu 3 minggu setelah release, kalau anda berkenan. Bukan berita yang bagus buat pelanggan sepertinya, tetapi setidaknya kita bicara jujur dan memberikan pilihan pemecahan masalah kepada pelanggan jauh-jauh hari sebelum tanggal tenggat waktu yang ditentukan, apakah kita bisa menyelesaikan feature yang penting dulu dan tetap mempertahankan tanggal release yang sama, atau kita selesaikan semua dulu dan memundurkan tanggal release.
13
Bagaimana kami mengkombinasikan Scrum dengan XP
Pernyataan bahwa Scrum dan XP (eXtreme Programming) dapat menghasilkan kombinasi yang berbuah manis bukanlah pernyataan yang kontroversial. Sebagian besar hal-hal yang saya lihat di internet mendukung pernyataan ini, jadi saya tidak akan menghabiskan waktu membahas kenapa menggabungkan Scrum dan XP bisa berbuah manis. Scrum fokus ke praktek management dan organisasi sedangkan XP sebagian besar focus kepada praktek pemrograman. Oleh karena itulah keduanya bisa digabungkan dengan baik, karena keduanya mengatasi area yang berbeda dan saling melengkapi. Saya dengan ini menyatakan bahwa saya mendukung fakta-fakta yang menyatakan bahwa Scrum dan XP bisa dikombinasikan dan berbuah manis! Saya akan menyorot beberapa praktek yang baik dalam XP dan bagaimana praktek ini bisa kita terapkan dalam pekerjaan sehari-hari. Tidak semua tim kami bisa mempraktekkan semua hal dalam XP, tetapi secara keseluruhan kami telah mencoba sebagian besar aspect cara mengkombinasikan XP dan scrum. Beberapa praktek dalam XP secara langsung beririsan dengan Scrum, misalnya seluruh tim, Duduk bersama, Story dan proses perencanaan. Kalau ada yang seperti ini, kita akan menggunakan praktek dari scrum dibanding XP.
Pair programming
Kami mulai menggunakan pair programming akhir-akhir ini saja di salah satu tim kami. Berjalan cukup baik. Sebagian tim kami yang lain belum mulai melakukan pair programming terlalu banyak, sesudah mencobanya beberapa kali di salah satu tim kami, saya ingin lebih banyak mengajarkan pair programming ke tim yang lain dan menganjurkan mereka untuk mencobanya.
102 | SCRUM AND XP SECARA PRAKTIS Beberapa kesimpulan yang saya dapat sejauh ini tentang pair programming antara lain: Pair programming benar-benar meningkatkan kualitas kode. Pair programming bisa meningkatkan fokus tim (sebagai contoh, misalnya teman yang berada di belakang kita bilang Hey yang kamu kerjakan ini benar-benar diperlukan dalam sprint ini? pertanyaan ini akan menyadarkanya untuk fokus pada pekerjaan yang penting dahulu). Yang menarik, ternyata sebagian besar developer yang sangat menentang pair programming sebenarnya tidak pernah mencobanya, dan mereka akan cepat belajar serta mendapatkan manfaatnya segera setelah mereka benar-benar mencobanya. Pair programming sangat melelahkan dan seharusnya tidak dilakukan setiap hari. Berganti pasangan sesering mungkin adalah bagus. Pair programming dapat meningkatkan laju penyebaran pengetahuan di dalam tim. Dan sangat cepat! Beberapa orang memang tidak merasa nyaman dengan Pair programming. Jangan memecat programmer yang baik hanya karena dia tidak nyaman dengan Pair programming . Code review adalah alternatif yang cukup baik untuk menggantikan pair programming Navigator (orang yang tidak memegang keyboard) harus mempunyai komputernya sendiri. Bukan sebagai development, tetapi sebagai tempat bekerja kalau perlu melakukan spike (research) kalau perlu, mencari dokumentasi atau googling kalau driver (orang yang memegang keyboard) mentok, dsb. Jangan memaksakan pair programming kepada anggota tim. Anjurkan saja ke mereka dan sediakan alat yang menunjang kegiatan pair programming ini, biarkan mereka mencoba-coba dengan kecepatan dan caranya sendiri.
Test-driven development (TDD)
Amiin! TDD, buat saya, lebih penting daripada scrum dan XP itu sendiri. Kamu boleh ambil deh rumah saya, TV saya, anjing saya tapi jangan mencegah saya mempraktekkan TDD! Kalau anda tidak menyukai TDD dan berusaha melarangnya, jangan biarkan saya masuk ke tempat anda, saya akan berusaha menyelundupkanya dengan berbagai cara! :o) Ini adalah rangkuman 10 detik tentang TDD dari saya : Test-driven development berarti bahwa anda akan menulis tes terotomasi, anda pada awalnya cukup menulis kode yang lulus tes, kemudian kalau
HOW WE COMBINE SCRUM WITH XP | 103 sudah lulus refactor kode tersebut utamanya agar mudah dibaca dan menghilangkan duplikasi kode. Bilas dan ulangi lagi! Beberapa catatan mengenai TDD: TDD itu susah. Butuh beberapa lama bagi seorang programmer untuk bisa mengerti. Malahan, dalam beberapa kasus tidak peduli berapa banyak anda mengajarkan, melatih dan mendemonstarasikanya, tetap saja ada programmer yang nggak ngerti-ngerti. Di banyak kasus, salah satu cara agar programmer bisa mengerti konsep TDD adalah dengan memmasangkan programmer ini dengan programmer lain yang sudah mempraktekkan TDD dalam sesi pair programming. Sekalinya programmer paham, dia biasanya terinfeksi akut dan tidak akan pernah mau coding tanpa TDD. TDD mempunyai efek yang sangat positif terhadap desain sistem. Untuk memulai dan bisa lancar berTDD memerlukan waktu yang cukup panjang terutama kalau produknya masih baru, apalagi kalau kita harus membuat test black-box untuk integrasi sistem, tetapi balik modal atas waktu yang dihabiskan untuk membuat TDD berjalan lancar sangatl cepat!. Pastikan anda menginvestasikan waktu untuk membuat proses penulisan tes menjadi mudah. Hal ini maksudnya adalah menggunakan perkakas yang benar, mengajari dan melatih anggota tim, dan menyediakan class-class perkakas atau class dasar agar mudah ditest, dst. Gunakan perkakas-perkakas di bawah ini untuk menjalankan TDD jUnit / httpUnit / jWebUnit. Kami sedang mempertimbangkan untuk menggunakan TestNG dan Selenium. HSQLDB sebagai database yang berjalan di memory untuk tujuan tes ini. Jetty sebagai application server yang jalan di memory untuk tujuan test ini. Cobertura untuk memeriksa jangkauan tes. Spring framework untuk merekatkan bagian-bagian dan tipe-tipe yang berbeda dari aspek tes ini (dengan mocks, tanpa mocks, dengan database external, dengan database dalam memory, dsb). Di product kami yang paling canggih (dari sisi TDD) kita punya blackbox acceptance test, jadi test ini menggantikan UAT tester. Test ini akan menjalankan semua sistem dari depan sampai belakang di dalam memory, termasuk database dan webserver, kemudian test ini akan mengases aplikasi dari antar muka publik (misalnya HTTP).
104 | SCRUM AND XP SECARA PRAKTIS Hal ini akan membuat siklus develop-build-test menjadi sangat-sangat cepat. Tes ini juga bisa bertindak sebagai jaring pengaman, memberikan developer kepercayaan diri untuk merefactor sering-sering, yang pada akhirnya akan membuat desain tetap bersih dan sederhana walaupun sistem tumbuh menjadi lebih besar.
TDD untuk kode yang baru ditulis
Kami memastikan TDD dibuat untuk semua kode baru, walaupun itu artinya proses konfigurasi di awal mulainya project menjadi lebih panjang (karena kita memerlukan perkakas lebih banyak dan dukungan untuk melaksanakan test, silahkan lihat perkakas-perkakas yang kami gunakan dalam TDD ini). Walaupun begitu, keputusan untuk menggunakan TDD ini sangat mudah dan jelas, karena manfaatnya jauh jauh lebih banyak daripada usaha yang dikeluarkan untuk membuat TDD ini berjalan baik, apalagi kalau tidak menggunakan TDD sama sekali.
TDD untuk kode yang sudah lama ditulis
TDD itu susah sekali, tetapi mencoba untuk menjalankan TDD di kode yang tidak ditulis dengan TDD sebagai acuanya dari awal.... nah ini baru namanya menantang maut! Kenapa? Ya karena pada dasarnya.... hmm saya sebenarnya bisa menulis berhalaman-halaman untuk menerangkan alasanya, tapi saya stop di sini saja. Saya simpan topik ini untuk buku saya yang lain TDD secara praktis :o) Kami menghabiskan banyak sekali waktu untuk mencoba mengotomasi integration testing di salah satu sistem kami yang sangat rumit, kode sistem ini sudah ada cukup lama, sangat-sangat berantantakan dan tidak ada sama sekali bagian dari kode yang dibuat untuk tujuan TDD. Untuk setiap release dari sistem ini, kita mempunyai tim khusus tester yang akan menjalankan banyak sekali tes yang sangat rumit untuk memastikan bahwa kode baru tidak merusak fitur lama (regression test) dan kinerjanya juga bagus. Regression test sebagian besar dikerjakan secara manual. Keadaan ini secara signifikan memperlambat proses development kami dan pada akhirnya memperlambat siklus release. Tujuan kami adalah mengotomasi semua tes ini. Setelah membenturbenturkan jidat kami ke tembok selama beberapa bulan, sayangnya, kami tidak bisa mencapai tujuan kami walaupun sedikit saja. Kemudian kami mengganti pendekatan kami. Kami sadar bahwa ternyata kita mentok karena salah pendekatan, daripada berusaha membuat regression testing secara manual menjadi otomatis kami berusaha mencari solusi agar proses regression testing secara manual menjadi lebih cepat dan tidak bertele-tele. Sistem yang kami kerjakan ini adalah game online, kami sadar ternyata tim tester menghabiskan banyak sekali waktu untuk
HOW WE COMBINE SCRUM WITH XP | 105 menyiapkan game untuk dites, misalnya browsing di sistem back office untuk membuat turnamen, atau menunggu turnamen terjadwal untuk mulai berjalan. Jadi kami pada akhirnya membuat perkakas untuk memudahkan kegiatan-kegiatan tersebut. Misalnya dengan membuat short cut agar proses persiapan regression test ini menjadi cepat, tidak perlu repot, sehingga tim tester bisa fokus untuk melakukan testing daripada sibuk menyiapkan game yang akan dites. Usaha yang kami lakukan berhasil! Seharusnya pendekatan inilah yang kami ambil dari awal. Kami terlalu semangat mengotomasi proses testing dan kami lupa melakukanya selangkah demi langkah, dimana langkah pertama adalah membuat hal-hal yang dapat membuat testing secara manual menjadi efisien. Hikmah dari pengalaman ini: Kalau anda terpaksa harus melakukan regression test secara manual dan ingin mengotomasi proses manual ini, jangan anda lakukan (kecuali memang proses peralihanya sangat mudah)!. Sebaiknya anda membuat sesuatu yang membuat proses regression test secara manual menjadi lebih mudah. Baru kemudian pertimbangkan untuk melakukan tes secara otomatis.
Desain yang bertahap
Desain yang bertahap artinya adalah memulai desain dengan bentuk yang sangat sederhana pada awalnya, kemudian secara terus menerus perbaiki desainya, daripada anda berusaha membuat semua desain yang kimpleks dari awal dan harus secara ketat menggunakan desain ini. Kami cukup berhasil melaksanakan hal ini, misalnya kita menghabiskan waktu yang cukup banyak untuk merefractor dan memperbaiki desain yang sudah ada, dan kami jarang sekali menghabiskan banyak waktu membuat desain yang besar dan kompleks di depan. Terkadang kacau juga, tetapi dengan membiarkan desain yang agak berantakan untuk terus ditekuni dengan sangat teliti terus menerus, pada akhirnya kita akan memperoleh hasil yang baik. Pada akhirnya kami bisa puas melihat hasil dari desain yang bertahap ini. Desain yang bertahap secara terus menerus ini biasanya adalah efek samping yang otomatis dari praktek TDD.
Integrasi yang terus menerus (Continuous integration)
106 | SCRUM AND XP SECARA PRAKTIS Sebagian besar product kami mempunyai continuous integration yang cukup canggih menggunakan Maven dan QuickBuild. Cara ini terbukti sangat bermanfaat dan bisa menghemat banyak sekali waktu. continuous integration adalah solusi dari masalah klasik lho ini jalan di komputerku loh, masak nggak jalan di komputermu?. Server continuous integration kami bertindak sebagai hakim atau sebagai rujukan untuk menentukan apakah semua kode kami berada dalam keadaan sehat atau tidak. Setiap kali seseorang dari tim memasukkan sesuatu (check in) di dalam server version control (server untuk menyimpan kode program) server continuous integration akan bangun, kemudian melakukan build semua kode di server dan menjalankan semua tes. Jika suatu masalah terjadi, email akan dikirim ke semua anggota tim dan build gagal, informasi yang dikirim termasuk bagian kode mana yang membuat build gagal serta link ke laporan dari test yang sudah dijalankan, dst. Setiap malam server continuous build akan membuild product kami dari awal dan mempublikasikan file binari (ear atau war, dst), dokumentasi, laporan tes, laporan coverage test, dependency report dst, ke portal dokumentasi internal kami. Beberapa product juga akan secara otomatis mendeploy kode ke tes server. Memasang semua tetek-bengek continuous integration memerlukan banyak sekali waktu dan usaha, tapi semua terbayar lunas dengan manfaat yang diperoleh.
Kepemilikan kode barsama (Collective code ownership)
Kami menyarankan diterapkanya kepemilikan kode bersama, tetapi belum semua tim melaksanakan ini dengan baik. Kami juga menemukan bahwa pair programming dengan rotasi pasangan yang sering secara otomatis dapat mendorong kepemilikan kode bersama dalam level yang sangat tinggi. Tim dengan level kepemilikan kode bersama yang tinggi terbukti mempunyai kinerja handal, sebagai contoh, sprint tidak akan terganggu sama sekali hanya karena seseorang yang sangat penting dalam tim sakit dalam waktu cukup lama.
Tempat kerja yang informatif
Semua tim mempunyai akses ke papan tulis dan ruang kosong di dinding untuk digunakan sebaik-baiknya. Di ruangan-ruangan tim kami, anda akan menemukan banyak sekali informasi tentang produk dan project. Masalah terbesar adalah sampah-sampah lama yang terkumpul di tembok, biasanya kami akan menunjuk salah satu rekan dalam tim sebagai tukang
HOW WE COMBINE SCRUM WITH XP | 107 bersih-bersih agar informasi yang ditampilkan adalah informasi terbaru yang berguna saja. Kami sebenarnya menyarankan untuk menggunakan papan tugas, tetapi belum semua tim membuat papan tugas ini. Lihat bagian tentang bagaimana kami mengatur ruangan tim
Coding standard
Akhir-akhir ini kami mendefinisikan coding standard. Sangat berguna, andai saja kami melakukanya lebih awal. Tidak membutuhkan banyak waktu mengimplementasikanya, mulailah dengan sekumpulan aturan yang sederhana dan biarkan aturan itu tumbuh perlahan. Hanya tuliskan hal-hal yang sepertinya belum jelas dipahami oleh semua orang, kemudian beri tautan ke materi yang berkaitan dengan aturan tersebut kalau memungkinkan. Sebagian besar programmer membunyai gaya coding masing-masing. Detail-detail kecil misalnya bagaimana mereka menangani exception, bagaimana membuat komentar dalam kode, kapan mereka mengembalikan nilai null, dst. Dalam beberapa kasus perbedaan itu tidak menjadi masalah, di kasus yang lain perbedaan ini bisa mengakibatkan desain sistem yang tidak konsisten dan kode yang susah dibaca. Coding standard terbukti sangat berguna, selama anda fokus pada hal-hal yang penting saja. Berikut ini adalah contoh-contoh coding standard kami:
Anda boleh melanggar aturan-aturan berikut ini, tetapi hanya kalau ada alasan kuat saja, jangan lupa untuk mendokumentasikan dalam kode anda kalau hal ini terjadi. Gunakan code convention dari Sun secara default :
http://java.sun.com/docs/codeconv/html/CodeConvTOC. doc.html
Jangan pernah menangkap exception tanpa melakukan salah satu dari 2 hal berikut ini: log dari stack trace yang ada dalam exception atau melempar lagi exception ke lapisan lebih atas. Log.debug() sudah cukup, intinya sih jangan sampai kehilangan stack trace. Gunakan dependency injection pada setter dari class agar ketergantungan antar class menjadi lebih baik (kecuali kalau memang ketergantungan itu dikehendaki)
108 | SCRUM AND XP SECARA PRAKTIS Hindari singkatan. Singkatan yang sudah banyak diketahui semisal DAO tidak apa-apa. Method yang mengembalikan data dengan tipe collection atau array tidak boleh mengembalikan nilai null. Kembalikan collection atau array dengan panjang 0 daripada mengembalikan nilai null.
Kecepatan yang konstan / kerja yang giat
Banyak sekali buku bertema agile software development menyatakan bahwa lembur yang terlalu itu mengakibatkan kinerja yang kontra produktif dalam pengembangan perangkat lunak. Setelah percobaan yang tidak dikehendaki (saya tidak menghendaki ada lembur di tim saya) berkaitan dengan topik ini, saya setuju sekali sepenuh hati dengan pernyataan di atas. Kira-kira setahun yang lalu, salah satu tim kami (tim terbesar dalam perusahaan) bekerja lembur gila-gilaan. Kualitas kode yang dibuat sangat parah, mereka harus menghabiskan sebagian waktu memadamkan kebakaran. Tim tester (yang juga harus kerja lembur) tidak punya cukup waktu melakukan quality assurance yang serius. Pelanggan kami marahmarah dan tabloid memakan kami hidup-hidup. Setelah beberapa bulan, kami bisa menurunkan jam kerja anggota tim ke level yang sepantasnya. Tim bekarja dengan jam kerja normal (kecuali saat-saat tertentu, biasanya mendekati deadline). Dan, abrakadabra, produktifitas dan kualitas justru meningkat signifikan. Tentu saja mengurangi jam kerja bukan satu-satunya hal yang memicu perbaikan kinerja, tetapi kami cukup yakin bahwa hal tersebutlah memang yang memicu perbaikan kinerja tersebut.
14
Bagaimana kami melakukan tes
Ini adalah bagian yang paling susah. Saya tidak yakin apakah ini adalah bagian paling susah dari Scrum, atau memang bagian paling susah dari pengembangan perangkat lunak secara umum. Tes adalah bagian yang kemungkinan paling bervariasi bentuknya antar organisasi yang berbeda. Tergantung pada berapa banyak tester yang anda punya, berapa banyak tes terotomasi yang anda punya, dan tipe sistem yang anda buat (hanya server + aplikasi web? Atau anda membuat aplikasi yang disebarkan lewat CD installer?), ukuran dari siklus release, seberapa kritiskah software anda (server blog vs sistem pengendali pesawat terbang), dst. Kita sudah mencoba banyak sekali cara bagaimana kami melakukan tes dalam scrum. Saya akan mulai mendeskripsikan apa yang sudah kami lakukan dan pelajaran apa saja yang kami dapatkan.
Anda kemungkinan besar tidak dapat menghilangkan fase acceptance test
Dalam dunia scrum yang ideal, hasil dari sprint adalah sistem yang berpotensi untuk dideploy. Jadi ya cukup deploy aja bukan?
Salah besar!. Pengalaman yang kami dapatkan bahwa keadaan ini biasanya tidak berjalan sesuai keadaan ideal. Pasti ada bug-bug di dalam sistem. Kalau
110 | SCRUM AND XP SECARA PRAKTIS kualitas itu adalah sesuatu yang penting buat anda, proses acceptance test secara manual pasti diperlukan. Acceptance test adalah dimana tester yang khusus menangani tes ini dan bukan bagian dari anggota tim. Mereka akan menghajar sistem dengan segala macam jenis tes dimana anggota tim scrum tidak pernah terpikirkan, tidak punya waktu, atau tidak punya hardware untuk melakukan tes tersebut. Tester mengakses sistem dengan cara yang sama persis dengan pengguna akhir sistem, yang artinya mereka harus melakukannya secara manual (dengan asumsi sistem anda nantinya digunakan oleh manusia, bukan semacam sitem integrasi yang hanya berkomunikasi dengan sesama sistem).
Mari kita lihat sebentar gambar di atas. Tim tester akan berusaha menemukan bug, tim scrum harus memperbaiki bug tersebut kemudian membuat release minor, beberapa saat kemudian versi yang sudah bebas dari bug bisa direlease, versi 1.0.1 ke pengguna akhir, hal ini jauh lebih baik daripada melepas versi 1.0.0 yang kemungkinan mengandung banyak sekali bug. Ketika saya bicara tentang fase acceptance test saya menunjuk ke seluruh periode pengetesan, debugging, dan merelease versi yang cukup pantas digunakan sebagai production release.
Minimize the acceptance test phase
Fase acceptance test sungguh tidak menyenangkan. Rasanya sangat tidak agile. Walaupun begitu, tetap saja kita tidak bisa menyingkirkanya begitu saja, tetapi kita bisa meminimalisasinya. Lebih spesifik lagi, meminimalisasi waktu yang diperlukan untuk fase acceptance test. Dengan cara: Memaksimalkan kualitas kode yang dibuat oleh tim scrum. Memaksimalkan efisiensi dari tes manual (misalnya dengan menyewa tester terbaik, memberi mereka perkakas terbaik, memastikan bahwa mereka memberitahu kalau ada tugas tes yang
HOW WE DO TESTING | 111 Jadi bagaimana caranya kita memaksimalkan kualitas kode yang dibuat oleh tim scrum? Caranya sih banyak. Berikut ini dua cara terbaik yang kita temukan: Letakkan tester sebagai bagian dari tim scrum. Lakukan pekerjaan sesedikit mungkin per sprint.
Meningkatkan kualitas dengan meletakkan tester dalam tim scrum
Ya, saya dengar anda berkeberatan: Bukankah sudah jelas diterangkan bawah anggota scrum seharunya bisa semua! (cross functional) Di dalam tim scrum seharusnya tidak boleh ada yang punya peran selain anggota tim, scrum master dan product owner. Kita tidak boleh memasukkan seseorang yang pekerjaanya hanya menjadi tester! Biar saya perjelas. Apa yang saya maksud di sini sebagai tester adalah seseorang yang skill utamanya adalah testing, dibanding dengan seseorang yang tugasnya hanya melakukan testing saja. Developer biasanya adalah tester yang buruk. Apalagi kalau mereka ini mengetes kode mereka sendiri.
Tester adalah seseorang yang memberikan signoff
Sebagai tambahan dari cuma sebagai anggota tim, tester mempunyai tugas yang sangat penting. Dia adalah seseorang yang memberikan signoff. Tidak ada yang dikategorikan sebagai selesai dalam sprint sampai tester bilang selesai. Saya sering menemukan bahwa developer akan bilang selesai padahal belum. Walaupun kita punya definisi yang amat sangat jelas tentang apa itu selesai (dimana hal ini wajib didefinisikan, lihat bagian tentang definisi 'selesai'), developer pasti lupa!. Kita, programmer, adalah orang-orang yang nggak sabaran dan ingin cepatcepat mengerjakan tugas berikutnya secepat mungkin. Jadi bagaimana si T ini (terster kami) mengetahui bahwa sesuatu sudah pasti selesai kalau begitu? Ya pertama-tama mereka harus mengetesnya donk! Di banyak kasus, ternyata apa yang dibilang developer sebagai selesai malah tidak bisa dites sama sekali! Karena ternyata kode belum dimasukkan ke server, atau kode belum dideploy ke server tes, atau tidak
112 | SCRUM AND XP SECARA PRAKTIS bisa digunakan sebelum sesuatu yang lain selesai dibuat, dst dst. Ketika si T ini mengetes featurenya, dia harus melihat dengan teliti checklist yang menyatakan bahwa feature ini benar-benar selesai. Sebagai contoh, kalau misalnya definisi dari selesai ini harus ada catatan release, maka si T akan memeriksa apakah catatan release benar-benar ada. Kalau misalnya ada penjelasan formal dari feature ini maka si T akan memeriksanya juga. Efek samping yang baik dari hal ini adalah sekarang si T ini adalah orang yang sempurna untuk mempersiapkan dan membawakan sprint demo.
Apa yang harus dilakukan tester kalau belum ada kode yang bisa dites sama sekali?
Pertanyaan ini terus saja muncul. Si T: Hey Scrum master, tidak ada yang bisa saya tes sama sekali sekarang, jadi saya harus ngapain?. Biasanya butuh beberapa saat sebelum tim menyelesaikan setidaknya satu story, jadi apa yang harus dilakukan oleh tester selama tim belum menyelesaikan satupun story? Ya pertama-tama kan tester harus menyiapkan apa saja langkah-langkah tesnya. Misalnya dengan menulis spesifikasi tes, menyiapkan lingkungan untuk melakanakan tes, membuat skenario tes, dst. Jadi ketika developer mempunyai story yang siap dites, tidak ada lagi waktu jeda, si T sudah harus segera melakukan tes. Jika tim melakukan TDD maka tim meluangkan waktu menulis kode untuk melakukan tes dari hari pertama. Tester harus melakukan pair programming dengan developer yang membuat kode tes. Jika tester tidak bisa menulis kode program sama sekali, dia harus tetap melakukan pair programming dengan developer, dimana si T ini cukup menjadi navigator dan developer menjadi driver (memegang keyboard). Seorang tester yang baik biasanya selalu bisa membuat skenario tes yang berbeda dengan yang dibuat developer, jadi keduanya bisa saling melengkapi. Kalau tim ternyata tidak melaksanakan TDD, atau tidak ada cukup banyak test-case untuk mengisi waktu tester, dia harusnya ya melakukan apa saja yang dia bisa untuk membantu tim mencapai tujuanya. Persis seperti anggota tim lain lakukan. Jika tester bisa menulis kode program ya syukur. Kalau tidak, ya tim sebaiknya mendaftar semua tugas-tugas yang tidak terkait dengan programming agar diberikan kepada tester. Ketika memecah story menjadi tugas-tugas lebih kecil pada waktu rapat perencanaan sprint, tim biasanya cenderung hanya berfokus pada tugastugas yang terkait dengan menulis kode. Padahal biasanya banyak sekali
HOW WE DO TESTING | 113 tugas-tugas yang tidak terkait dengan programming. Kalau tim menghabiskan waktu mencari tugas-tugas yang tidak terkait dengan programming, maka si T bisa berkontribusi banyak walaupun tidak bisa coding selama tidak ada testing yang bisa dilakukan sekarang ini. Contoh tugas-tugas non-programming yang sering kali harus dilakukan dalam sprint: Mempersiapkan server tes. Mengklarifikasi feature ke Product Owner. Mendiskusikan detail deployment dengan bagian infrastruktur. Menulis dokumen untuk deployment (release notes, RFC atau apapun yang disyaratkan oleh organisasi). Menghubungi orang-orang yang terkait dengan project tetapi bukan bagian dari tim (misalnya desainer antar muka). Memperbaiki build script. Lebih jauh memecah story ke tugas-tugas lebih kecil. Mencatat pertanyaan-pertanyaan dari developer dan mencari jawaban atas pertanyaan itu ke product owner atau pihak lain yang terkait. Apa yang bisa kita lakukan kalau misalnya si T ini kerjaanya lebih lambat dari pada developer? Misalnya kita sudah berada di bagian terakhir sprint dan ternyata si T belum menyelesaikan semua skenario tes. Apa yang bisa kita lakukan? Kita bisa membuat semua anggota tim menjadi asisten si T. dia akan memutuskan bagian mana yang akan dilakukan sendiri dan menyerahkan sebagian yang lain ke anggota tim lain. Nah inilah yang kita sebut sebagai tim yang cross functional. Bukan cuma tester yang bisa coding tetapi juga developer yang bisa menjalankan tes. Jadi ya bisa kita katakan si T ini mempunyai peran yang istimewa dalam tim, tetapi juga dia diperbolehkan untuk melakukan pekerjaan lain selain tes, dan anggota tim lain juga masih diperbolehkan untuk melakukan pekerjaan si T ini.
Meningkatkan kualitas dengan mengerjakan pekerjaan lebih sedikit per sprint
Sekarang kita kembali sebentar ke rapat perencanaan sprint. Sederhananya, jangan menjejalkan terlalu banyak story ke dalam satu sprint! Kalau anda mempunyai masalah dengan kualitas, atau siklus tes yang panjang, kerjakan sedikit pekerjaan per sprnt! Cara ini langsung akan meningkatkan kualitas, siklus tes yang lebih pendek, lebih sedikit bug akan memberikan pengaruh positif kepada pengguna dan kualitas yang tinggi juga akan sangat bermanfaat dalam jangka lebih panjang
114 | SCRUM AND XP SECARA PRAKTIS karena tim akan fokus ke feature baru daripada sibuk memperbaiki feature lama yang banyak bug. Mengerjakan pekerjaan yang lebih sedikit, tetapi bagus dan solid, daripada mengerjakan banyak pekerjaan tetapi harus repot memperbaikinya berkali-kali.
Apakah seharusnya acceptance tes merupakan bagian dari sprint?
Kami mempunyai perbedaan praktek yang cukup besar di area ini. Beberapa dari tim kami menyertakan acceptance test ini dalam sprint. Tetapi sebagian besar tim kami tidak menyertakanya dalam sprint, karena dua hal: Sprint mempunyai batasan waktu. Acceptance tes (dalam definisi saya tes ini akan mencakup debugging dan re-releasing) sangat susah untuk melakukanya dalam batasan waktu yang ketat. Bagaimana jika waktu sprint sudah nyaris habis tetapi kita masih mempunyai bug yang sangat kritis? Apakah kita akan melepaskan produk dengan bug semacam ini ke production? Ataukah anda akan menunda merelease kode ke production setelah sprint berikutnya? Dalam banyak kasus kedua pemecahan ini tidak dapat diterima. Jadi kita lebih memilih acceptance tes di luar sprint. Kalau anda mempunyai banyak scrum tim bekerja dalam produk yang sama, acceptance tes harus dilaksanakan pada kode kombinasi antara tim-tim ini. Kalaupun misalnya setiap tim melakukan acceptance tes di dalam sprint, anda masih harus melakukan acceptance tes terhadap kode secara keseluruhan.
HOW WE DO TESTING | 115
Hal ini bukanlah solusi yang sempurna, tetapi sudah cukup bagus buat kami di banyak kasus.
Siklus sprint vs siklus acceptance test
Dalam dunia Scrum yang ideal anda tidak perlu melakukan fase acceptance test karena setiap tim scrum akan melepas produk baru yang sudah siap dilepas ke production setiap kali sprint berakhir.
Tetapi gambaran sebenarnya adalah seperti gambar di bawah ini:
Setelah sprint 1, versi 1.0.0 yang punya banyak bug dilepas. Selama sprint 2, banyak sekali laporan bug menghujani tim dan tim harus menghabiskan sebagian besar waktunya mencari bug dan terpaksa harus melepas versi baru 1.0.1 di tengah-tengah sprint. Kemudian pada waktu sprint 2 selesai, versi baru 1.1.0 akan dilepas, nah masalahnya versi ini akan mempunyai bug lebih banyak lagi karena waktu yang ditersedia untuk menyelesaikan story di sprint 2 lebih sedikit lagi dikarenakan banyak waktu tersita untuk memperbaiki bug dari sprint 1. dst dst.
116 | SCRUM AND XP SECARA PRAKTIS
Garis merah diagonal dalam gambar di atas melambangkan kekacauan dalam sprint 2 ini. Tidak kelihatan bagus kan? Sedihnya, keadaan ini tidak akan berubah walaupun anda mempunyai tim tester yang melakukan acceptance test. Perbedaanya adalah laporan bug akan datang dari tim tester daripada dari pengguna yang marah-marah. Perbedaan ini sangat besar dari sisi bisnis, tapi dari sisi developer keadaan ini sama saja, tidak ada bedanya. Kecuali bahwa tester biasanya lebih ramah dan tidak agresif dibanding user. Biasanya sih :D.
Kami belum menemukan solusi sederhana mengatasi permasalahan ini. Kami juga banyak sekali bereksperimen dengan model yang berbedabeda. Pertama-tama, maksimalkan kualitas kode setiap kali tim Scrum melepas kode. Biaya yang harus dibayar untuk memperbaiki bug lebih awal, di dalam sprint yang sama, sangat-sangat jauh lebih murah daripada menemukan dan memperbaiki setelah kode dilepas. Tetapi faktanya masih sama, kalaupun kita meminimalisasi jumlah bug, tapi pasti tetap saja ada bug yang ditemukan setelah sprint selesai. Nah bagaimana kita menyelesaikan masalah ini?
HOW WE DO TESTING | 117
Pendekatan 1: Jangan mulai mengerjakan pekerjaan baru hingga kerjaan lama berada dalam production
Kelihatanya bagus bukan? Apakah anda merasakan perasaan hangat dan menyenangkan? Kami nyaris mengambil pendekatan ini beberapa kali, dan menggambar model yang menarik bagaimana kami akan menjalankan pendekatan ini. Tetapi kita selalu berubah pikiran ketika kita menyadari kelemahannya. Kita harus menambahkan periode release yang tidak dibatasi waktu antara 2 sprint, dimana kita cuma akan melakukan testing dan debugging hingga kita bisa malepas kode ke production.
Kami tidak suka ide untuk membuat periode release yang tidak dibatasi waktu antara 2 sprint, utamanya karena ini akan merusak harmonisasi sprint yang teratur. Kita tidak lagi bisa bilang setiap 3 minggu kita akan memulai sprint baru. Lagi pula, cara ini tidak sepenuhnya menyelesaikan masalah. Walaupun kita punya periode release, pasti ada laporan bug yang sangat urgent datang dari waktu ke waktu, dan kita harus siap untuk menyelesaikanya.
Pendekatan 2: Tidak masalah mengerjakan feature baru tetapi beri prioritas kepada usaha melepas feature lama ke production
Pendekatan ini yang kami gunakan. Setidaknya untuk sekarang. Pada dasarnya, ketika kami menyelesaikan satu sprint kami akan lanjut ke sprint berikutnya. Tetapi kami mengantisipasi bahwa kami akan menghabiskan sebagian waktu di sprint berikutnya memperbaiki bug dari sprint sebelumnya, kami menganalisis kenapa bug ini terjadi dan bagamana kami bisa meningkatkan kualitas. Kami memastikan bahwa sprint cukup panjang untuk tetap bertahan walaupun ada sejumlah kegiatan perbaikan bug dari sprint sebelumnya. Secara bertahap, setelah sekian banyak bulan berlalu, jumlah waktu yang dihabiskan untuk memperbaiki bug dari sprint sebelumnya semakin berkurang. Sebagai tambahan, kami juga bisa menekan jumlah anggota
118 | SCRUM AND XP SECARA PRAKTIS tim yang terlibat ketika bug ditemukan, jadi secara keseluruhan tim tidak terganggung setiap kali bug muncul. Sekarang kami berada dalam level yang cukup bisa diterima.
Selama rapat perencanaan sprint kami memilih focus factor yang cukup rendah untuk mangakomodasi waktu yang kita akan habiskan untuk memperbaiki bug dari sprint sebelumnya. Sejalan dengan waktu, tim menjadi cukup pintar memperkirakan hal ini. Perhitungan kecepatan cukup banyak membantu menentukan focus factor ini (lihat bagian Bagaimana kami memutuskan story mana saja yang akan diikutkan dalam sprint?).
Pendekatan yang buruk - Fokus mengerjakan feature baru saja
Hal ini berarti fokus mengerjakan feature baru saja daripada berusaha melepas feature lama ke production. Nah siapa sih yang mau melakukan hal itu? Ya tetap saja kami melakukan kesalahan ini cukup sering pada awalnya, kami juga yakin banyak perusahaan lain melakukan kesalahan yang sama juga. Biasanya ini adalah kesalahan yang terkait dengan stress. Banyak manager tidak memahami bahwa, walaupun semua coding sudah selesai, sebenarnya kita masih jauh dari production release. Setidaknya aturan ini berlaku untuk sistem yang kompleks. Jadi manager (atau dalam hal ini product owner) meminta tim untuk melanjutkan mengerjakan feature baru, di sisi lain tumpukan kode lama yang-nyaris-siap-untukdilepas menjadi semakin tinggi dan tinggi, membuat semua proses menjadi semakin lambat.
Jangan meninggalkan bagian terlambat anda di belakang
Misalnya saja acceptance test adalah bagian terlambat prosesnya. Kita misalnya juga mempunyai tester yang terlalu sedikit, atau proses acceptance test menjadi lambat karena kualitas kode yang sangat buruk.
HOW WE DO TESTING | 119 Kita anggap saja tim acceptance test hanya bisa menyelesaikan 3 story per minggu (kita sebenarnya tidak pernah menggunakan satuan sekian story per minggu sebagai bagian dari perhitungan dalam scrum, saya hanya menggunakanya dalam contoh ini). Dan kita anggap juga developer sanggup menyelesaikan 6 story per minggu. Hal ini akan menggoda manager atau product owner (atau bahkan anggota tim itu sendiri) untuk menjadwalkan pengerjaan 6 story per minggu. Stop! Kenyataan akan menyadarkan anda bahwa hal ini akan berakibat fatal. Sebaiknya jadwalkan saja mengerjakan 3 story per minggu dan gunakan sisa waktu untuk menambah kecepatan tes sehingga bisa setara dengan kecepatan development. Misalnya : Jadikan beberapa developer sebagai tester (ohhh mereka akan meloncat-loncat kegirangan :D) Buat perkakas dan script sehingga proses testing menjadi lebih mudah. Tambahkan lebih banyak kode tes terotomasi. Naikan panjang sprint dan masukkan acceptance test ke dalam sprint. Buat beberapa sprint sebagai test sprint dimana seluruh tim bekerja sebagai tester. Tambah jumlah tester (bahkan jika hal tersebut berarti harus melepas beberapa developer) Kami sudah mencoba semua solusi di atas kecuali yang terakhir. Solusi jangka panjang yang lebih baik tentu saja adalah poin nomor 2 dan 3: membuat perkakas dan script serta menambah tes terotomasi. Retrospectives adalah forum terbaik untuk mengidentifikasi bagian paling lambat ini.
Kembali ke kenyataan
Saya mungkin memberikan gambaran bahwa kami mempunyai tester di dalam semua tim scrum, juga bahwa kami mempunyai tim acceptance test yang besar untuk setiap produk yang kami lepas setiap satu sprint selesai, dst, dst. Sebenarnya, kami tidak selalu punya itu semua.
120 | SCRUM AND XP SECARA PRAKTIS Kami biasanya bisa melakukan semua hal tersebut, dan kami juga sudah melihat efek positifnya. Tetapi kami masih jauh dari level standar kualitas yang baik, dan kami masih harus belajar banyak di area ini.
15
Bagaimana kami mengelola beberapa tim Scrum sekaligus
Banyak hal menjadi jauh lebih susah kalau anda mempunyai beberapa tim scrum mengerjakan produk yang sama sekaligus. Masalah ini sangat umum terjadi dan tidak ada sangkut pautnya dengan Scrum. Lebih kepada sebuah aturan sederhana yang universal: lebih banyak developer = lebih banyak komplikasi. Kami punya pengalaman dengan masalah ini. Paling banyak kami mempunyai 40 orang mengerjakan produk yang sama. Pertanyaan penting yang perlu dijawab: Berapa banyak tim yang harus kita buat? Bagaimana membagi orang-orang ke dalam tim yang dibentuk?
Berapa banyak tim yang harus dibentuk
Kalau memang berurusan dengan beberapa tim scrum sekaligus sangat menyusahkan, kenapa kita mau susah-susah melakukanya? Kenapa nggak taruh saja semua orang ke dalam satu tim yang sama? Tim scrum terbesar yang kami punya terdiri dari 11 orang. Tidak berjalan baik sayangnya. Rapat harian scrum biasanya berlangsung melewati batas waktu 15 menit yang ditentukan. Setiap anggota tim tidak tau apa yang sedang dikerjakan anggota tim lainya, jadi banyak kebingungan terjadi. Sangat susah pula bagi srum master untuk menjaga semua orang sejalan dengan tujuan sprint, dan tentu saja susah pula menemukan waktu yang cukup untuk menyelesaikan laporan masalah yang menghambat tim. Alternatif yang lain adalah memecah tim besar ini menjadi 2 tim. Tapi apakah cara ini lebih baik? Sayangnya tidak selalu begitu. Kalau tim sudah berpengalaman dan merasa nyaman dengan scrum, ada cara yang logis untuk memecah tim menjadi dua dan membuat dua jalur berbeda untuk setiap tim, dimana dua jalur ini tidak melibatkan kode
BAGAIMANA KAMI MENGELOLA BANYAK TIM SCRUM | 123 sumber yang sama, maka saya bisa bilang memecah tim menjadi dua adalah ide yang baik. Kalau tidak bisa begitu ya saya menyarankan untuk tetap mempertahankan satu tim ini, walaupun ada beberapa kelemahan mempunyai tim dengan ukuran besar. Pengalaman saya mengatakan lebih baik mempunyai lebih sedikit tim yang ukuranya terlalu besar daripada mempunyai banyak tim-tim kecil yang pada akhirnya saling mengganggu tim lain karena pekerjaanya banyak bersinggungan. Buat tim-tim kecil hanya ketika tim-tim ini tidak saling mengganggu.
Tim Virtual
Bagaimana anda tahu jika anda membuat keputusan yang benar tentang tim besar vs banyak tim? Kalau anda membuka mata dan telinga anda lebar-lebar, anda mungkin akan mencatat adanya bentuk tim virtual. Contoh 1: anda memutuskan untuk memilih tim besar daripada memecahnya menjadi beberapa tim. Tetapi ketika anda melihat siapa sering berbicara dengan siapa selama sprint, anda mencatat sepertinya tim ini terpecah menjadi dua sub tim.
Contoh 2: anda memilih untuk memecah menjadi 3 tim lebih kecil. Tetapi ketika anda melihat siapa berbicara dengan siapa dalam satu sprint, anda mencatat bahwa tim 1 dan tim 2 saling berbicara sepanjang waktu, sedangkan tim 3 bekerja sendiri tanpa berinteraksi dengan 2 tim lainnya.
124 | SCRUM AND XP SECARA PRAKTIS
Jadi apa artinya ini? Apakah strategi pembagian tim anda ada yang salah? Ya, jika tim virtual sepertinya terus terjadi secara permanen. Tidak, jika tim virtual sifatnya hanya sementara. Lihat contoh 1 sekali lagi. Kalau dua sub tim virtual cenderung berubah sesekali (misalnya ada anggota tim yang pindah antar sub tim virtual) maka anda mungkin membuat keputusan yang benar dengan mempertahankan satu tim besar ini. Jika kedua sub tim virtual terus berada dalam keadaan yang sama selama seluruh sprint, anda mungkin perlu mecahnya menjadi tim 1 dan tim 2 di sprint berikutnya. Sekarang kita lihat contoh 2 sekali lagi. Kalau tim 1 dan tim 2 saling bicara (tetapi tidak tim 3) selama seluruh sprint, anda mungkin ingin menggabungkan tim 1 dan tim 2 menjadi satu tim di sprint berikutnya. Kalau tim 1 dan tim 2 saling berkomunikasi secara intensif di paruh pertama sprint, dan kemudian tim 2 dan tim 3 berkomunikasi secara intensif selama paruh kedua sprint, maka anda perlu mempertimbangkan menggabungkan ketiga tim ini menjadi satu tim besar, atau bisa juga membiarkanya menjadi 3 tim. Tanyakan kepada tim apa yang terbaik buat mereka pada waktu retrospective dan biarkan tim yang memutuskan. Pembagian tim adalah salah satu hal yang paling sulit dalam scrum. Jangan terlalu berfikir mendalam atau mengoptimisasinya terlalu keras. Lakukan saja percobaan, amati terus apakah terjadi tim virtual, dan pastikan anda meluangkan cukup banyak waktu mendiskusikan hal-hal seperti ini selama retrospectives. Cepat atau lambat anda akan menemukan solusi yang tepat untuk situasi tertentu. Yang paling penting adalah tim nyaman dan tidak saling menghalangi satu sama yang lain terlalu sering.
Ukuran tim yang optimal
Sebagian besar buku yang saya baca mengklaim bahwa ukuran tim yang optimal adalah sekitar 5-9 orang.
BAGAIMANA KAMI MENGELOLA BANYAK TIM SCRUM | 125 Dari yang sudah saya lihat sampai sekarang, saya cukup setuju. Walaupun saya bisa bilang kalau ukuran tim yang optimal menurut pendapat saya pribadi adalah antara 3-8 orang. Saya percaya bahwa usaha dan pengorbanan untuk mendapatkan ukuran tim yang optimal dalam perusahaan anda akan terbayar lunas ketika nilai itu dapat anda peroleh. Katakan saja anda punya sebuah tim scrum yang terdiri dari 10 orang. Pertimbangkan untuk mengeluarkan 2 orang yang paling lemah skillnya. Oops, keceplosan deh saya :D Atau misalnya anda mempunyai dua produk berbeda, masing-masing produk dikerjakan oleh sebuah tim scrum yang terdiri dari tiga orang, kedua tim ini berjalan sangat lambat. Mungkin yah,menggabungkan kedua tim ini menjadi satu tim dengan ukuran 6 orang adalah ide yang bagus, kemudian satu tim ini bertanggung jawab untuk menyelesaikan dua produk tersebut. Dalam kasus ini, silahkan membebaskan salah satu dari dua product owner (atau berikan peran sebagai penasehat atau apa lah gitu).
Kalau anda mempunyai sebuah tim dengan anggota berjumlah 12, hal ini karena kode produknya berantakan sekali sehingga tidak mungkin dua tim berbeda mengerjakan produk ini secara mandiri. Usahakan untuk memperbaiki kodenya terlebih dahulu (dibanding membuat feature baru) hingga anda sampai pada titik dimana anda bisa memecah tim menjadi dua. Usaha ini kemungkinan besar akan segera terbayar dengan cepat.
126 | SCRUM AND XP SECARA PRAKTIS
Sprint yang tersinkronisasi atau tidak?
Misalnya anda mempunya tiga tim scrum mengerjakan produk yang sama. Apakah sprint mereka tersinkronisasi, artinya mulai dan berakhir secara bersamaan? Ataukah lebih baik sprintnya saling tumpang tindih? Pendekatan pertama kami adalah membiarkan sprint saling tumpang tindih (dalam hal waktu mulai dan selesai).
Kelihatanya bagus bukan? Setiap saat pasti ada sprint yang akan segera selesai dan sprint yang akan segera mulai. Kerja product owner juga lebih terbagi rata setiap saat. Ada beberapa release yang terus mengalir. Demo terjadi setiap minggu. Hoalakadah! Ya, begitulah, tetapi kelihatanya sangat meyakinkan waktu itu! Kami baru saja akan mulai menerapkan ini ketika suatu hari saya berkesempatan untuk bertemu dengan Ken Schwaber (dalam rangka sertifikasi scrum saya). Beliau memberi tahu bahwa ini adalah ide yang buruk, akan jauh lebih baik kalau sprint tersebut tersinkronisasi. Saya tidak terlalu ingat dengan pasti alasanya, tetapi setelah beberapa kali berdiskusi saya menjadi yakin bahwa sprint tersinkronisasi lebih baik daripada saling tumpang tindih.
Sprint yang tersinkronisasi adalah solusi yang kami gunakan sejak saat itu, dan tidak pernah menyesalinya. Saya tidak pernah tahu secara langsung apakah sprint yang saling tumpang tindih akan membawa ke jurang keggalan, tetapi saya kira akan begitu. Manfaat dari sprint yang tersinkronisasi antara lain: Ada satu waktu dimana kita bisa merubah komposisi tim, yaitu pada waktu sprint berakhir bersamaan! Dengan sprint yang saling tumpang tinding, tidak satu waktu yang bisa digunakan untuk merubah komposisi tim tanpa mengganggu tim yang sedang berada di tengah-tengah sprint.
BAGAIMANA KAMI MENGELOLA BANYAK TIM SCRUM | 127 Seluruh tim bisa bekerja dengan tujuan yang sama dalam satu periode sprint dan melaksanakan rapat perencanaan sprint secara bersama sama, hal ini akan meningkatkan kolaborasi antar tim. Lebih sedikit administrasi yang perlu dilakukan, misalnya lebih sedikit rapat perencanaan sprint, sprint demo dan releases.
Kenapa kami mempunyai orang yang berperan sebagai team lead
Misalnya ada seorang product owner dan tiga tim scrum.
Yang berwarna merah dengan label P adalah product owner. Yang berwarna hitam dengan label S adalah Scrum Master. Dan sisanya adalah anggota tim. Dengan formasi seperti ini, siapa yang memutuskan siapa saja yang berada dalam tim? Apakah product owner? Ketiga scrum master? Ataukah setiap orang bisa memutuskan timnya sendiri? Bagaimana kalau semua orang ingin berada di tim 1 (karena Scrum master tim 1 adalah cewe cantik, sexy, baik, murah senyum, single dan seneng nraktir?) Bagaimana jika kemudian diketahui ternyata tidak mungkin ada lebih dari dua tim bekerja secara bersamaan dalam produk yang sama, sehingga kita perlu mengubahnya menjadi dua tim dengan masing-masing 9 orang, bukanya tiga tim dengan masing-masing 6 orang? Artinya cuma akan ada 2 orang scrum master. Sehingga manakah dari salah satu 3 scrum master akan dibebas tugaskan dari peran tersebut? Di banyak perusahaan hal-hal semacam ini akan menjadi isu yang cukup sensitif. Bisa saja product owner yang melakukan pembagian dan perubahan komposisi tim. Tapi kan itu bukan tugasnya product owner? Product
128 | SCRUM AND XP SECARA PRAKTIS owner adalah orang yang berpengalaman membuat produk dan mengarahkan tim tentang apa saja yang harus dikerjakan. Dia seharusnya tidak terlibat dengan hal-hal kecil dan detail. Apalagi dia adalah ayam (coba cari perumpamaan ayam dan babi dalam scrum, bisa baca scrum guide atau googling saja). Kami memecahkan masalah ini dengan memperkenalkan jabatan team lead. Jabatan ini bisa juga disebut sebagai Scrum of Scrum master atau bisa juga Bos Besar, dst. Dia tidak harus memimpin tim scrum, tetapi dia bertanggung jawab atas masalah-masalah yang timbul di semua tim, misalnya menentukan siapa yang harus menjadi scrum master untuk suatu tim, berapa banyak orang bisa masuk dalam satu tim, ada berapa banyak tim dst. Kami cukup kesulitan untuk mencari nama yang cocok untuk jabatan ini. Team lead akhirnya menjadi nama yang kami gunakan. Solusi ini bekerja dengan baik dalam kasus kami, dan saya merekomendasikan solusi ini (apapun keputusan anda menamakan jabatan ini).
Bagaimana kami mengalokasikan orang ke dalam tim-tim
Ada dua strategi umum untuk mengalokasikan orang ke dalam tim-tim, ketika anda mempunyai beberapa tim mengerjakan satu produk yang sama: Serahkan kepada orang yang ditugasi untuk melakukan alokasi ini. Misalnya team lead yang sudah saya bahas sebelumnya, atau mungkin manager senior yang mengurusi resource, budget dan jadwal. Biarkan tim membentuk dirinya sendiri.
Kami sudah mencoba ketiga stretegi tersebut. Lho kok tiga? Iyah, strategi 1, strategi 2 dan kombinasi keduanya. Kami menemukan bahwa kombinasi keduanyalah yang terbaik. Sebelum rapat perencanaan sprint, team lead mengadakan rapat pembagian tim bersama dengan product owner dan semua scrum master tanpa kehadiran anggota tim. Kami membicarakan tentang sprint sebelumnya dan akan membuat keputusan apakah perlu ada perubahan
BAGAIMANA KAMI MENGELOLA BANYAK TIM SCRUM | 129 komposisi tim. Mungkin kita ingin menggabungkan dua tim menjadi satu atau memindahkan beberapa orang ke tim yang lain. Kami membuat keputusan awal dan menuliskan keputusan ini sebagai proposal alokasi tim, yang kemudian kita bawa keputusan ini ke rapat perencanaan sprint. Prioritas utama yang perlu kita lakukan dalam rapat perencanaan sprint adalah membahas story dalam produk backlog. Setelah proses itu selesai, team lead kemudian bisa menyampaikan: Halo semua. Kami mempunyai saran untuk alokasi tim di sprint yang sedang kita bahas ini. Seperti yang anda semua lihat, saran kami adalah mengurangi jumlah tim dari empat menjadi tiga saja. Kami sudah membuat daftar anggota setiap tim. Silahkan membentuk grup dan merapat ke dinding masing-masing tim (Team lead menunggu orang-orang lalu lalang dalam ruangan untuk membentuk grup, setelah beberapa saat akan ada tiga grup, setiap grup akan berdiri di depan dinding kosong yang disediakan untuk setiap tim) Nah ini adalah pembagian tim awal! Ini hanya titik awal, ya untuk menyingkat waktu saja. Sejalan dengan rapat perencanaan sprint anda semua bebas pindah ke tim lain, bagi tim anda menjadi dua, dan silahkan bertukar anggota tim, atau gimana deh terserah anda semua. Gunakan pikiran anda sendiri berdasarkan prioritas dari product owner. Cara ini yang kami temukan sebagai cara terbaik. Kontrol terpusat pada level tertentu, kemudian diikuti desentralisasi pada level tertentu hingga keadaan optimum tercapai.
Tim spesialis atau tidak?
Misalnya saja teknologi yang anda gunakan terdiri dari tiga komponen utama:
130 | SCRUM AND XP SECARA PRAKTIS
Dan misalnya anda mempunyai 15 orang bekerja pada produk ini, kemudian anda tidak mau menyatukan 15 orang ini dalam satu tim scrum yang sama. Seperti apa komposisi tim yang ingin anda buat?
Pendekatan 1 : tim-tim sepesialis berdasarkan komponen
Pendekatan pertama adalah membuat tim spesialis berdasarkan komponen, misalnya tim client, tim server dan tim database
Ini adalah pendekatan yang mula-mula kita gunakan. Tidak berjalan terlalu bagus, setidaknya kalau sebagian besar story melibatkan lebih dari satu komponen. Misalnya kita punya sebuah story dengan nama papan pencatat dimana pengguna bisa mengirimkan pesan ke pengguna lain. Feature papan pencatat ini akan melibatkan perubahan dalam antar muka pengguna di client, menambahkan kode di sisi server dan menambah tabel baru di dalam database.
BAGAIMANA KAMI MENGELOLA BANYAK TIM SCRUM | 131
Ini artinya ketiga tim tim client, tim server dan tim database harus bekerja sama untuk menyelesaikan story ini. Tidak terlalu bagus dalam prakteknya.
Pendekatan 2: tim nonspesialis, bisa semua komponen
Pendekatan kedua adalah membuat tim yang tidak tergantung komponen, tim yang bisa mengerjakan story tanpa tergantung story ini termasuk dalam komponen apa.
132 | SCRUM AND XP SECARA PRAKTIS
Jika sebagian besar story melibatkan lebih dari satu komponen, tim jenis ini bisa mengerjakanya lebih baik. Setiap tim bebas mengerjakan seluruh story baik di sisi client, server maupun database. Sehingga tim bisa bekerja tanpa tergantung tim lain, dimana keadaan ini bisa dibilang yang terbaik. Hal pertama yang kita lakukan ketika kami memperkenalkan scrum adalah dengan memecah tim spesialis komponen (pendekatan 1) dan membuat tim yang tidak tergantung komponen (pendekatan 2). Hal ini mengurangi kasus-kasus seperti kita tidak bisa menyelesaikan bagian ini karena sedang menunggu tim server menyelesaikan bagian mereka. Kami bisa, kalau perlu, kadang-kadang membentuk tim sementara yang spesialis terhadap komponen tertentu. Tetapi harus ada alasan sangat kuat untuk membentuk tim semacam ini.
Merubah kompososi tim di sprint berikutnya atau tidak?
Setiap sprint biasanya sedikit berbeda dengan sprint yang lain, tergantung tipe story yang berada pada prioritas paling atas pada saat sprint direncanakan. Sebagai konsekuensinya, komposisi tim yang optimal bisa berbeda untuk setiap sprint.
BAGAIMANA KAMI MENGELOLA BANYAK TIM SCRUM | 133 Faktanya, hampir setiap sprint kami berfikir bahwa sprint ini bukan sprint normal, karena (bla bla bla). Setelah beberapa saat kita menyerah untuk menggunakan istilah sprint yang normal. Tidak ada satupun sprint yang bisa disebut sprint yang normal. Seperti halnya tidak ada keluarga normal ataupun manusia normal, semuanya unik dan berbeda. Ada satu sprint dimana mempunyai tim yang tahu tentang komponen client adalah ide yang bagus, tim ini terdiri dari orang-orang yang ahli dalam teknologi client. Sprint berikutnya justru mungkin lebih baik mempunyai dua buah tim yang tidak tergantung dari komponen, sehingga tim khusus client tadi dipecah dan disebar dalam dua tim ini. Satu aspek yang sangat penting dalam Scrum adalah tim kompak, jika tim bekerja sama dalam beberapa sprint, mereka biasanya menjadi sangat kompak. Mereka akan belajar bagaimana mencapai kekompakan grup dan pada akhirnya level produktifitasnya menjadi sangat tinggi. Tetapi kekompakan ini akan memerlukan waktu hingga beberapa sprint. Kalau anda terus menerus merubah komposisi tim, anda mungkin tidak akan pernah melihat tim menjadi kompak, karena belum lama tim bersama mereka dipecah lagi dan ada perubahan personel, sehingga perlu waktu lagi bagi tim untuk menemukan kekompakan. Jadi jika anda ingin merubah komposisi tim, pastikan anda mempertimbangkan konsekuensinya. Apakah perubahan ini bersifat jangka panjang atau jangka pendek? Kalau sifatnya hanya jangka pendek, pertimbangkan untuk membatalkan saja perubahan komposisi tim ini. Kalau jangka panjang, ya silahkan lanjut. Satu pengecualian adalah ketika anda baru memulai Scrum dengan ukuran tim yang cukup besar untuk pertama kalinya. Dalam kasus ini mungkin ada manfaatnya sedikit bereksperimen dengan komposisi tim hingga anda merasa semua orang sudah merasa nyaman. Pastikan juga bahwa semua orang faham bahwa tidak jadi masalah kalau percobaan tidak berhasil dalam beberapa kali percobaan, asal kita terus berkembang dan ada kemajuan.
Anggota tim paruh waktu
Saya hanya mengkonfirmasi apa yang ditulis buku-buku scrum bahwa mempunyai anggota paruh waktu dalam tim scrum pada umumnya adalah ide yang buruk.
134 | SCRUM AND XP SECARA PRAKTIS Misalnya anda akan mengambil Joe sebagai anggota tim paruh waktu, pikir baik-baik dahulu. Apakah anda benar-benar memerlukan Joe dalam tim anda? Apakah anda yakin tidak bisa membuat Joe bekerja dalam tim secara penuh? Apa kerjaan lain yang Joe kerjakan? Bisakah Joe bergabung dalam tim secara penuh di sprint berikutnya, dan memindahkan tanggung jawabnya yang lain ke temannya? Terkadang memang tidak ada jalan lain. Anda sangat memerlukan Joe karena dia adalah satu-satunya DBA dalam perusahaan, tetapi tim lain juga perlu Joe seperti anda perlu dia, jadi tidak mungkin menarik Joe menjadi anggota tim anda secara penuh, padahal perusahaan tidak bisa mempekerjakan DBA baru. Baiklah. Ini adalah keadaan dimana mempunyai anggota tim paruh waktu tidak bisa dihindari (hal ini persis dengan apa yang terjadi pada kami). Tetapi anda harus benar-benar melakukan evaluasi setiap kali ingin menambahkan anggota tim paruh waktu ke dalam tim anda. Secara umum saya lebih senang punya 3 orang anggota tim secara penuh daripada mempunyai 8 anggota tim paruh waktu. Kalau anda mempunyai satu anggota tim yang waktunya terbagi dalam beberapa tim sekaligus, misalnya DBA yang kita bahas di atas, sebaiknya tetap meletakkanya dalam satu tim sebagai anggota tetap. Carilah satu tim yang memerlukan tenaganya paling banyak dan gunakan tim ini sebagai tim utama. Kalau tidak ada tim lain yang memerlukanya, dia akan secara otomatis menjadi anggota tim ini, ikut dalam kegiatan rapat scrum harian, rapat perencanaan sprint, retrospectives dst.
Bagaimana kami melakukan Scrum-of-Scrums
Scrum-of-scrums pada dasarnya adalah rapat reguler antara semua scrum master dimana mereka akan berkumpul dan berdiskusi. Pada satu saat kami mempunyai empat produk, tiga produk punya masing-masing satu tim scrum dan produk terakhir punya 25 orang dibagi dalam beberapa tim scrum. Digambarkan seperti di bawah ini:
BAGAIMANA KAMI MENGELOLA BANYAK TIM SCRUM | 135
Gambar di atas memperlihatkan bahwa kami punya dua level Scrum-ofscrums. Kami punya satu buah Scrum-of-scrums dalam level produk yang terdiri dari empat tim yang mengerjakan produk D, dan satu buah Scrum-of-scrums dalam level perusahaan yang terdiri dari semua produk dalam perusahaan.
Scrum-of-Scrums level produk
Rapat Scrum-of-scrums ini sangatlah penting. Kami mengadakanya sekali seminggu, kadang-kadang malah lebih sering. Kami berdiskusi mengenai masalah-masalah integrasi, keseimbangan pekerjaan tim, persiapan untuk rapat perencanaan sprint berikutnya, dst. Kami mengalokasikan 30 menit untuk rapat ini, tapi rapat lebih sering melewati tenggat waktu tersebut. Alternatif yang lain adalah melakukan rapat Scrum-of-scrums setiap hari, tapi kami belum sempat mencoba jadwal setiap hari. Agenda Scrum-of-scrums adalah: 1) Setiap orang bergiliran mendeskripsikan apa yang sudah diselesaikan setiap tim minggu lalu, apa yang rencananya akan diselesaikan minggu ini dan apa kendala yang mereka hadapi. 2) Mendiskusikan isu lain yang terkait antar tim, misalnya masalah integrasi aplikasi antar tim, dst. Agenda Scrum-of-scrums tidak terlalu penting buat saya, yang terpenting adalah anda punya rapat Scrum-of-scrums yang reguler, dijadwalkan secara rutin.
136 | SCRUM AND XP SECARA PRAKTIS
Scrum-of-Scrums level perusahaan
Kami menyebut rapat ini adalah detak jantung. Kami sudah pernah mencoba melaksanakan rapat ini dalam berbagai macam format, dengan peserta yang bervariasi pula. Akhir-akhir ini kami membuang konsep ini secara keseluruhan, dan menggantinya dengan pertemuan mingguan dimana semua orang hadir. Cukup 15 menit saja. Serius? 15 menit saja? Semua orang? Semua orang dari semua tim dari semua produk? Berhasil ga ? Ya berhasil kok, kalau anda (atau siapapun yang menjalankan pertemuan) secara ketat menjaga pertemuan ini sesingkat mungkin. Format pertemuan adalah: 1) Update berita dari kepala bagian development. Informasi tentang event yang akan datang misalnya. 2) Satu orang dari setiap produk melaporkan apa yang sudah mereka capai minggu lalu, apa rencana minggu ini dan apakah ada masalah. Beberapa orang lain juga melaporkan kegiatan mereka, misalnya bagian QA, bagian Project Management Officer dst. 3) Setiap orang dalam rapat bebas menambahkan informasi atau menyampaikan pertanyaan kalau ada. Ini adalah forum untuk menyampaikan berita yang ringkas saja, bukan untuk berdiskusi atau curhat. Dengan menjaganya seperti itu, 15 menit biasanya sudah cukup. Terkadang kami sedikit lebih dari 15 menit, tetapi jarang sekali lebih dari 30 menit. Kalau ada diskusi menarik terjadi, saya biasanya menghentikan diskusi itu dan mengundang orang-orang yang tertarik untuk melanjutkan diskusi dalam rapat berbeda. Kenapa kami melakukan rapat ini dengan dihadiri semua orang? Karena kami mencatat bahwa Scrum-of-scrums level perusahaan sebagian besar adalah tentang laporan. Kami jarang sekali punya diskusi dalam rapat ini. Biasanya orang lain di luar grup scrum master ini juga memerlukan informasi seperti ini. Mereka ini adalah anggota tim yang ingin tahu apa yang tim lain kerjakan. Kalau misalnya dalam rapat ini yang disampaikan adalah informasi apa saja yang dilakukan dari setiap tim, kenapa nggak semua orang saja kita undang, sehingga manfaatnya bisa dirasakan oleh orang lebih luas lagi.
BAGAIMANA KAMI MENGELOLA BANYAK TIM SCRUM | 137
Jadwal rapat harian scrum
. Kalau anda punya banyak tim scrum mengerjakan satu produk yang sama, dan mereka semua mengadakan rapat scrum harian pada waktu yang sama, masalah akan muncul. Product owner (dan orang yang selalu ingin tahu seperti saya) hanya bisa menghadiri satu rapat harian scrum per hari. Jadi kami meminta tim untuk menghindari mengadakan rapat harian scrum pada waktu yang sama.
Contoh jadwal di atas berasal dari periode dimana kami mengadakan rapat harian scrum di ruangan yang berbeda dengan ruangan di mana tim duduk. Rapat biasanya berlangsung sekitar 15 menit tetapi setiap tim mendapat jatah 30 menit untuk menggunakan ruangan hanya untuk berjaga-jaga kalau rapat sedikit molor. Cara ini sangat berguna karena dua alasan: 1. Product owner (dan saya) bisa mengunjungi semua rapat harian scrum dalam satu hari. Tidak ada cara yang lebih bagus untuk mendapatkan gambaran akurat tentang bagaimana keadaan sprint sekarang ini dan apa saja masalah utama yang dihadapi tim. 2. Tim bisa mengunjungi rapat harian scrum tim lain. Bisanya sih tidak terjadi terlalu sering, tetapi kadang-kadang dua tim akan mengerjakan pekerjaan yang mirip, sehingga satu atau dua orang anggota tim lain akan ikut serta dalam rapat harian scrum agar selalu up to date. Kelemahanya hanya satu, tim tidak bisa bebas menentukan kapan waktu rapat harian scrum untuk mereka. Tetapi ini bukan menjadi masalah buat kami sih.
Tim pemadam kebakaran
Kami punya situasi dimana satu produk yang sangat besar tidak dapat menjalankan scrum dengan lancar karena mereka menghabiskan banyak
138 | SCRUM AND XP SECARA PRAKTIS sekali waktunya memadamkan kebakaran, misalnya memperbaiki bug secara panik karena sistem dilepas prematur dan ada banyak bug serius. Keadaan ini seperti lingkaran setan, mereka terlalu sibuk memadamkan api sehingga tidak punya waktu untuk proaktif mencegah api muncul (misalnya dengan memperbaiki desain, mengotomasi tes, membuat perkakas monitoring, perkakas alarm, dst). Kami memecahkan masalah ini dengan membuat tim pemadam kebakaran secara khusus dan tim scrum secara terpisah pula. Tim scrum tugasnya adalah (dengan restu produk owner) berusaha membuat sistem menjadi lebih stabil dan secara efektif mencegah api muncul. Tugas tim pemadam kebakaran (sebenarnya kami menyebut tim ini sebagai tim support) punya dua tugas : 1) Memadamkan api 2) Melindungi tim scrum dari segala macam gangguan, termasuk hal-hal seperti tugas tidak terduga, change request yang datang tak diundang, dst. Tim pemadam kebakaran kami letakkan dekat dengan pintu masuk, sedangkan tim scrum kami letakkan di bagian belakang ruangan. Jadi tim pemadam dapat secara langsung melindungi tim scrum secara fisik dari berbagai macam gangguan, misalnya orang dari bagian sales atau pelanggan yang marah-marah. Developer senior kami letakkan pada masing-masing tim, jadi satu tim tidak perlu tergantung dari tim lain untuk mendapatkan informasi atau petunjuk kalau ada yang tidak tahu. Cara ini pada dasarnya adalah usaha untuk memecahkan masalah bagaimana memulai scrum. Bagaimana bisa kita memulai scrum kalau tim tidak punya waktu untuk merencanakan pekerjaan mereka lebih dari satu hari ke depan? Strategi kami, seperti sudah saya jelaskan, adalah dengan memecah tim menjadi dua. Cara ini bekerja dengan sangat baik. Karena tim scrum diberi ruang untuk bekerja tanpa gangguan, akhirnya mereka berhasil membuat sistem stabil. Sementara itu tim pemadam kebakaran menyerah sama sekali dengan perencanaan ke depan, mereka hanya bereaksi kalau ada masalah saja, hanya memperbaiki sementara saja kalau ada masalah muncul.
BAGAIMANA KAMI MENGELOLA BANYAK TIM SCRUM | 139 Tentu saja, tim scrum tidak sepenuhnya bebas dari gangguan. Tidak jarang tim pemadam kebakaran harus melibatkan anggota kunci dari tim scrum, atau malah pada saat-saat yang buruk, melibatkan seluruh tim scrum. Yah pokoknya, setelah beberapa bulan sistem cukup stabil sehingga kita bisa membuang tim pemadam kebakaran dan membuat satu lagi tim scrum. Tim pemadam kebakaran cukup senang mencopot baju anti api dan helm mereka untuk bergabung dengan tim scrum.
Memecah product backlog atau tidak?
Misalnya saja anda punya satu produk dan dua tim scrum. Berapa banyak product backlog yang harus anda punya? Berapa banyak product owner? Kami mencoba tiga pendekatan untuk memecahkan masalah ini. Pilihan yang anda ambil bisa memberi efek yang sangat besar bagaimana rapat perencanaan sprint akan berlangsung.
Strategi 1: Satu product owner, satu backlog
Ini adalah cuma ada satu model. Model yang kami pilih sampai sekarang. Keuntungan menggunakan model ini adalah anda bisa mempersilahkan tim menentukan sendiri apa yang mereka kerjakan berdasarkan prioritas utama yang sekarang ada dalam product backlog. Product owner hanya perlu fokus pada apa yang dia perlukan dan mempersilahkan tim memutuskan bagaimana mereka akan melakukan pembagian kerja.
140 | SCRUM AND XP SECARA PRAKTIS Agar lebih kongkrit, berikut ini kira-kira suasanya rapat perencanaan sprint untuk kasus ini: Rapat perencanaan sprint berlangsung dalam ruangan konferensi yang berada di luar kantor kami. Tepat sebelum rapat dimulai, product owner mengambil satu dinding untuk dijadikan dinding product backlog dan meletakkan story di dinding ini (kartu index), diurutkan berdasarkan kepentingan. Dia terus meletakkan kartu index hingga dinding penuh, biasanya cukup untuk meletakkan semua product backlog dalam satu sprint.
Setiap tim scrum akan memilih dindingnya masing-masing dan menuliskan nama tim mereka di sana. Itu adalah dinding tim. Setiap tim kemudian mengambil story dari dinding product backlog, dimulai dari story yang paling penting, kemudian menempelkan kartu indeks ke dinding mereka masing-masing. Kegiatan ini digambarkan dalam gambar di bawah ini, dimana panah kuning adalah simbol perpindahan kartu indeks dari dinding backlog ke dinding tim.
BAGAIMANA KAMI MENGELOLA BANYAK TIM SCRUM | 141
Sejalan dengan rapat, product owner dan anggota tim bermain-main dengan kartu index, memindahkan ke tim berbeda, mengubah urutan ke kiri dan ke kanan untuk merubah prioritas, memecah story menjadi story yang lebih kecil, dst. Setelah kira-kira satu jam, tim akan punya calon pertama dari sprint backlog di setiap dinding tim. Setelah itu tim bisa bekerja sendiri-sendiri dengan melakukan perkiraan waktu pengerjaan dan memecah story menjadi tugas-tugas lebih kecil.
142 | SCRUM AND XP SECARA PRAKTIS Proses ini cukup berantakan, sedikit ruwet dan melelahkan, tetapi juga sangat efektif, sosial dan menyenangkan. Ketika waktu habis, biasanya semua tim akan mempunyai informasi yang cukup untuk memulai sprint.
Strategi 2: Satu product owner, beberapa backlog
Dalam strategi ini, product owner akan membuat beberapa product backlog, satu untuk setiap tim. Kami belum benar-benar mencoba strategi ini, tapi kami sudah berusaha menuju ke sana. Strategi ini kami siapkan sebagai rencana cadangan kalau misalnya strategi 1 gagal. Kelemahan dari strategi ini adalah product owner mengalokasikan story ke setiap tim, sebuah pekerjaan yang mungkin lebih baik dilakukan oleh tim itu sendiri.
Strategi 3: Beberapa product owner, satu backlog per product owner
Strategi ini sama dengan strategi 3, satu backlog per tim, tetapi setiap tim akan mempunyai product owner yang berbeda pula!
BAGAIMANA KAMI MENGELOLA BANYAK TIM SCRUM | 143
Kami belum melakukan strategi ini, dan sepertinya tidak akan pernah. Kalau dua product backlog melibatkan kode yang sama, hal ini kemungkinan akan menyebabkan konflik yang serius antara kedua product owner tersebut. Kalau kedua product backlog melibatkan kode yang berbeda, hal ini pada dasarnya sama saja dengan memisah seluruh produk menjadi dua buah sub produk terpisah dan menjalankan keduanya tanpa saling tergantung. Artinya juga kita kembali pada situasi satu tim per produk, yang mudah dan bagus.
Membuat cabang kode (code branching)
Dengan beberapa tim bekerja pada kode yang sama, kami tidak bisa menghindari bekerja dengan cabang kode dalam SCM (software configuration management, seperti SVN, GIT, CVS atau Mercurial). Banyak sekali buku-buku dan artikel yang membahas bagaimana caranya beberapa orang bekerja pada kode yang sama sehingga kita tidak akan membahas secara detail di sini. Saya tidak mempunyai sesuatu yang revolisioner untuk ditambahkan. Saya akan, setidaknya, membuat rangkuman beberapa pelajaran yang paling penting yang kami pelajari sampai saat ini oleh tim-tim kami. Pertahankan mainline (atau trunk) dalam keadaan konsisten secara ketat. Hal ini berarti, setidaknya, semuanya bisa dicompile dan semua unit test harus sukses. Kalau kita ingin membuat release setiap saat dari trunk, semua kode bisa berjalan dengan baik. Kalau bisa, sistem continuous build harus mengcompile
144 | SCRUM AND XP SECARA PRAKTIS kode dan secara otomatis mendeplonya ke tes server setiap malam. Buat tag untuk setiap release. Setiap kali melepas kode untuk acceptance tes atau ke production, pastikan ada satu versi yang ditag untuk menandai versi yang mana yang dilepas. Dengan begitu, anda bisa kembali dan membuat cabang pemeliharaan dari titik tersebut. Buat cabang baru hanya kalau perlu saja. Aturan yang baku dalam hal pembuatan cabang adalah kalau kita tidak bisa menggunakan trunk tanpa harus melanggar poin pertama. Kalau anda tidak yakin, jangan membuat cabang. Kenapa hal ini perlu diperhatikan baik-baik? Karena setiap cabang yang aktif akan memerlukan biaya dalam hal administrasi dan kompleksitas. Gunakan cabang utamanya untuk memisahkan siklus hidup yang berbeda. Anda bisa saja membuat repository berbeda untuk tim yang berbeda, tetapi bisa juga menggunakan repository yang sama. Tetapi satu hal yang pasti, jika anda mencampur perubahan kode untuk memecahkan perbaikan yang bersifat jangka pendek dan perubahan kode untuk mengimplementasikan feature baru yang bersifat jangka panjang, anda pasti kesulitan untuk melepas perubahan kode jangka pendek! Sinkronisasi kode sering-sering. Kalau anda bekerja pada sebuah cabang, sinkronisasi kode anda ke trunk setiap kali build berjalan sukses. Setiap hari sinkronisasi cabang anda untuk mengambil perubahan yang ada dalam trunk, sehingga cabang anda up-todate dengan perubahan yang dilakukan oleh tim lain. Kalau misalnya kegiatan ini mengakibatkan merge-hell lanjutkan saja, karena kalau menunggu nanti-nanti pasti jauh lebih menyusahkan.
Retrospectives untuk beberapa tim sekaligus
Bagaimana kami melakukan sprint retrospectives kalau ada beberapa tim mengerjakan produk yang sama? Segera setelah sprint demo selesai, setelah tepuk tangan dan ucapan selamat, setiap tim akan menuju ke ruangan masing-masing, atau bisa juga keluar ke lokasi di luar kantor. Mereka akan melaksanakan retrospectives sama persis seperti gambaran yang ada dalam bagian Bagaimana kami melaksanakan sprint retrospectives.
BAGAIMANA KAMI MENGELOLA BANYAK TIM SCRUM | 145 Pada waktu rapat perencanaan sprint berikutnya (yang dihadiri semua tim, karena kita memilih untuk menggunakan sprint bersama-sama untuk semua tim dalam satu produk), hal yang pertama kita lakukan adalah mempersilahkan juru bicara masing-masing tim berdiri dan merangkum poin-poin penting dari retrospectives masing-masing tim. Setiap juru bicara diberi waktu sekitar 5 menit. Kemudian akan ada diskusi terbuka selama 10-20 menit. Istirahat sebentar. Setelah istirahat baru kita mulai perencanaan sprint sebenarnya. Kami belum mencoba cara lain untuk banyak tim ini, cara yang sudah kami gunakan bekerja cukup memuaskan. Kekurangan terbesar adalah tidak ada waktu jeda antara sprint retrospectives dan rapat perencanaan sprint berikutnya (lihat bagian waktu jeda antar sprint). Untuk produk yang dikerjakan oleh satu tim saja, kami tidak melakukan summary dari retrospectives pada waktu rapat perencanaan sprint. Hal tersebut tidak diperlukan, karena semua orang dalam tim hadir dalam rapat sprint retrospectives.
16
Bagaimana kami menangani tim yang tersebar secara geografis
Apa yang terjadi jika anggota tim berada di lokasi geografis yang berbeda? Banyak sekali keajaiban scrum dan XP terjadi karena tim berada dalam ruangan yang sama dan saling berkolaborasi, misalnya dengan melaksanakan pair programming atau komunikasi tatap muka setiap hari. Kami mempunyai beberapa tim yang terpisah secara geografis dan kami juga punya beberapa tim yang anggotanya sering bekerja dari rumah. Strategi kami untuk menangani hal ini sangat sederhana. Kami berusaha sekuat tenaga untuk memaksimalkan jalur komunikasi antar anggota tim yang terpisah secara geografis. Saya tidak berbicara jalur komunikasi dalam Mbit/detik (walaupun hal ini juga penting ya). Saya mengartikan jalur komunikasi dalam cakupan yang lebih luas, misalnya: Kemampuan untuk menjalankan pair programming bersamasama Kemampuan bertemu tatap muka pada waktu rapat harian scrum. Kemampuan untuk berdiskusi tatap muka kapanpun diperlukan. Kemampuan untuk bertemu secara fisik dan bersosialisasi. Kemampuan untuk melakukan rapat spontan dengan semua anggota tim. Kemampuan untuk melihat keadaan sprint backlog, sprint burndown, product backlog dan semua sumber informasi dengan cara yang sama.
Berikut ini adalah beberapa perangkat komunikasi yang sudah kami implementasikan (atau sedang berusaha kami implementasikan, kami belum menyelesaikan semua implementasinya) untuk membantu mencapai jalur komunikasi yang baik: Webcam dan headset di setiap workstation.
148 | SCRUM AND XP SECARA PRAKTIS Ruang rapat virtual dengan webcam, microphone, komputer yang selalu siap sedia dan terkoneksi dengan semua anggota tim yang berbeda lokasi, perangkat lunak berbagi desktop, dst. Jendela buatan. Layar lebar di setiap lokasi, memperlihatkan suasana kantor di lokasi yang lain. Semacam jendela buatan antara dua ruangan. Kamu bisa berdiri di depan layar besar tersebut dan melambai ke orang-orang di sebelah sana. Kamu bisa melihat siapa saja yang sedang duduk di depan meja masingmasing, dan siap saja yang sedang saling berbicara. Hal ini untuk menciptakan suasana Hei kita sedang berada di ruangan yang sama. Program pertukaran anggota tim, dimana orang-orang dari setiap lokasi bepergian saling mengunjungi secara teratur.
Semakin sering menggunakan teknik ini, pelan-pelan tetapi pasti kami mulai mengerti bagaimana menjalankan rapat perencanaan sprint, demo, retrospectives, rapat harian scrum, dst, dengan tim yang tersebar di lokasi geografis berbeda. Seperti biasa, lakukan siklus eksperimen yang normal. Periksa => sesuaikan => periksa => sesuaikan => periksa => sesuaikan => periksa => sesuaikan =>
periksa =>
sesuaikan
Outsourcing
Kami punya beberapa tim outsource dan kami sudah bereksperimen dengan bagaimana cara kami menangani hal ini dengan efisien menggunakan Scrum. Ada dua strategi outsourcing yang kami gunakan: tim yang sepenuhnya terpisah atau hanya anggota tim saja yang terpisah.
BAGAIMANA KAMI MENGELOLA TIM YANG TERPISAH SECARA GEOGRAFIS | 149
Strategi pertama, tim yang benar-benar terpisah, adalah pilihan yang cukup menggoda. Tetapi walaupun begitu, kami malah mencoba menggunakan strategi kedua, anggota tim yang terpisah. Ada beberapa alasan kami memilih hal ini. 1. Kami ingin anggota tim saling mengenal satu sama lain dengan baik. 2. Kami ingin mempunyai infrastruktur komunikasi yang bagus antara dua lokasi, dan kami ingin memberikan insentif yang kuat ketika hal ini diimplementasikan dengan baik. 3. Pada awalnya, tim outsource terlalu kecil untuk membentuk tim scrum sendiri yang efektif.
150 | SCRUM AND XP SECARA PRAKTIS 4. Kami ingin ada periode waktu dimana setiap anggota tim akan berbagi pengetahuan dengan intensif sebelum tim outsource mampu menjalankan tim scrum sendiri. Dalam jangka waktu yang lebih panjang, kami bermaksud untuk menjalankan stretegi pertama, tim yang benar-benar terpisah.
Anggota tim yang bekerja dari rumah
Bekerja dari rumah terkadang terasa sangat nikmat. Terkadang anda malah bisa mengerjakan lebih banyak tugas-tugas pemrograman dari rumah dalam sehari daripada satu minggu bekerja di kantor. Ya setidaknya kalau anda belum mempunyai anak :o) Padahal salah satu syarat dasar dari scrum adalah semua anggota tim harus berada secara fisik dalam lokasi yang sama. Jadi apa yang bisa kami lakukan? Pada dasarnya kami mempersilahkan kepada tim untuk menentukan kapan dan seberapa sering frekuensi yang bisa diterima untuk bekerja dari rumah. Beberapa anggota tim bekerja dari rumah secara reguler karena jarak rumah dan kantor sangat jauh. Kami, walaupun begitu, berusaha untuk menganjurkan anggota tim berada dalam lokasi yang sama sesering mungkin. Ketika ada anggota tim bekerja dari rumah, mereka akan bergabung dalam rapat perencanaan sprint menggunakan telpon suara skype (terkadang malah video). Mereka online lewat aplikasi chatting sepanjang hari. Tidak sebaik kalau mereka berada dalam satu ruangan yang sama, tetapi cukup bagus lah secara umum. Kami pernah mengimplementasikan konsep bahwa hari rabu digunakan sebagai hari fokus. Artinya kalau anggota tim mau bekerja dari rumah, boleh-boleh saja, tetapi lakukan pada hari rabu. Kalau terpaksa bekerja dari rumah di hari lain ngomong dulu ke anggota tim lain. Cara ini bekerja cukup baik di tim-tim yang kami coba. Biasanya sebaguan besar anggota tim bekerja dari rumah dan bisa menyelesaikan lebih banyak pekerjaan, sekaligus tetap bisa berkolaborasi dengan baik. Karena cuma satu hari, anggota tim tidak terlalu out-of-sync dengan anggota tim lain. Untuk beberapa alasan berbeda, cara ini tidak terlalu berhasil dengan tim yang lain.
BAGAIMANA KAMI MENGELOLA TIM YANG TERPISAH SECARA GEOGRAFIS | 151
Jadi kalau ada satu tim dimana semua anggotanya bekerja dari rumah, ternyata bukan masalah yang berarti buat kami.
17
Checklist scrum master
Ini adalah bab terakhir dimana saya akan memberikan kepada anda checklist scrum master, daftar semua rutinitas administratif yang harus dilakukan oleh scrum master dalam tim kami. Hal-hal yang biasanya gampang kelupaan. Saya akan melewatkan beberapa hal yang sudah sangat jelas semisal menyingkirkan rintangan yang dihadapi oleh tim
Awal sprint
Setelah rapat perencanaan sprint, buat halaman informasi. o Tambahkan tautan halaman informasi ke halaman muka dari wiki perusahaan. o Cetak halaman informasi dan letakkan di dinding dekat tim duduk yang bisa dilihat orang yang lalu-lalang. Kirimkan email ke semua orang mengumumkan bahwa sprint baru sudah dimulai. Sertakan tujuan sprint dan tautan ke halaman informasi sprint. Perbaharui dokumen statistik dari sprint. Tambahkan perkiraan kecepatan, ukuran tim, panjang sprint, dst.
Setiap Hari
Pastikan rapat harian scrum dimulai dan diakhiri tepat waktu. Pastikan story ditambahkan / dikurangi dari sprint backlog kalau diperlukan agar sprint selalu berada dalam jadwal yang bisa ditepati. o Pastikan product owner mengetahui perubahan ini. Pastikan bahwa sprint backlog dan grafik burndown dipertahankan dalam keadaan uptodate oleh tim.
HOW WE HANDLE GEOGRAPHICALLY SCRUM TEAMS | 153
Pastikan bahwa masalah / halangan yang dihadapi oleh tim dipecahkan atau dilaporkan ke product owner dan/atau jajaran manager di atasnya.
Akhir Sprint
Lakukan demo sprint secara terbuka. Semua orang harus diberitahu tentang demo sehari atau dua hari sebelum demo berlangsung. Lakukan sprint retrospectives dengan seluruh tim dan product owner. Undang manager di atasnya juga, sehingga manager ini bisa menyebarkan ke tim lain tentang hal-hal yang dipelajari sepanjang sprint. Perbaharui dokumen statistik sprint. Tambahkan kecepatan sprint sebenarnya dan poin-point penting dari retrospectives.
18
Kata perpisahan
Whew! Tak pernah terpikir bahwa paper ini akan menjadi sepanjang ini. Saya harap paper ini bisa memberikan anda ide-ide yang bermanfaat, tidak peduli apakah anda masih baru mempelajari Scrum atau sudah sangat berpengalaman. Karena scrum harus diimplementasikan secara spesifik untuk setiap lingkungan berbeda, sangat susah untuk membuat best practice yang bisa bekerja dengan baik di level yang sangat umum. Namun begitu, saya sangat tertarik untuk mendengar umpan balik dari anda. Ceritakan kepada saya bagaimana pendekatan anda berbeda dengan pendekatan saya. Beri saya ide bagaimana meningkatkan praktek scrum saya! Jangan sungkan-sungkan menghubungi saya di henrik.kniberg@crisp.se Saya juga mengikuti milis scrumdevelopment@yahoogroups.com Kalau anda suka buku ini, mungkin anda ingin juga sering mampir ke blog saya. Saya harap bisa menambahkan beberapa artikel tentang Java dan pengembangan perangkat lunak lincah. http://blog.crisp.se/henrikkniberg/ Oh, dan jangan lupa.... Ini cuma profesi saja kan?
Rekomendasi bacaan
Ini ada beberapa buku yang memberikan saya banyak ide dan inspirasi. Sangat recommended banget deh!
Tentang penulis
Henrik Kniberg (henrik.kniberg@crisp.se) adalah seorang konsultan di Crisp yang berlokasi di Stockholm (www.crisp.se), sepesialisasinya adalah pengembangan perangkat lunak lincah dan Java. Semenjak pertama kali buku tentang XP dan agile manifesto muncul, Henrik telah menancapkan prinsip-prinsip agile dan berusaha belajar bagaimana mengimplementasikanya secara efektif dan efisien di berbagai macam organisasi. Sebagai co-founder dan CTO dari Goyada 1998-2003 beliau mempunyai buaanyak sekali kesempatan untuk bereksperimen dengan test-driven development dan praktek-praktek agile ketika beliau membangun dan mengelola platform teknis dan 30 orang tim pengembang. Pada akhir tahun 2005 Henrik dikontrak sebagai kepala bagian pengembangan pada sebuah perusahaan game di Swedia. Perusahaan ini sedang dalam situasi krisis dari sisi organisasi dan masalah-masalah teknis. Menggunakan scrum dan XP sebagai perkakas, Henrik membantu perusahaan keluar dari krisis dengan mengimplementasikan agile dan prinsip-prinsip langsing di semua level dalam perusahaan tersebut. Pada suatu hari jumat di bulan November 2006 Henrik tidak masuk kerja dan harus istirahat di ranjang karena demam, kemudian beliau memutuskan untuk menulis beberapa catatan untuk dirinya sendiri tentang apa yang sudah beliau pelajari beberapa tahun belakangan. Sekali mulai menulis, beliau tidak bisa berhenti, dan setelah tiga hari nonstop mengetik dan menggambar, catatan kecil itu sudah berkembang menjadi artikel sepanjang 80 halaman berjudul Scrum dan XP secara praktis, yang tentu saja berkembang menjadi buku ini. Henrik mengambil pendekatan yang holistik dan senang sekali mengambil peran berbeda sebagai manager, developer, scrum master, guru dan pelatih. Beliau sangat passionate tentang bagaimana membantu perusahaan membangun perangkat lunak yang hebat dan tim yang hebat pula, dengan cara menjalankan apapun peran yang diperlukan agar tujuan tersebut tercapai. Henrik lahir dan besar di Tokyo dan sekarang tinggal di Stockholm dengan istrinya Sophia dan dua orang anaknya. Beliau adalah musisi yang aktif di waktu senggangnya, menulis musik dan bermain bass serta keyboard bersama band lokal.
Untuk informasi lebih lanjut, silahkan kunjungi situs berikut ini : http://www.crisp.se/henrik.kniberg
Menu Footer
Kembali Ke Atas
Tentang
Tentang Scribd
Tekan
Blog kami
Bergabunglah dengan tim kami!
Hubungi Kami
Bergabunglah hari ini
Undang Teman
Hadiah
Scribd untuk Perusahaan
Dukungan
Bantuan/Tanya Jawab
Aksesibilitas
Bantuan pembelian
AdChoices
Penerbit
Legal
Ketentuan
Privasi
Hak Cipta
Media Sosial
Hak cipta © 2020 Scribd Inc.
Telusuri Buku
Direktori Situs
Bahasa Situs:
Bahasa IndonesiaChange LanguageUbah Bahasa
Bahasa IndonesiaChange LanguageUbah Bahasa
Navigasi cepat
Beranda
Buku
Buku audio
Dokumen
, aktif
Ciutkan bagian
Beri Nilai
Bermanfaat0%0% menganggap dokumen ini bermanfaat, Tandai dokumen ini sebagai bermanfaat
Tidak bermanfaat0%0% menganggap dokumen ini tidak bermanfaat, Tandai dokumen ini sebagai tidak bermanfaat

annotation: short_sentences header footer

label: es

label: en

label: ms