Persentase kesetimbangan dari total kapasitas yang dialokasikan untuk pemasangan cacat sama dengan laju injeksi cacat .
Banyak faktor yang dapat memengaruhi laju ini, di antaranya, tentu saja: jenis produk apa yang dikembangkan tim, teknologi dan praktik teknis apa yang mereka gunakan, tingkat keterampilan tim, budaya perusahaan, dll.
Mempertimbangkan Tim B, jika mereka membuat rata-rata 8 unit pengerjaan ulang untuk setiap 10 unit pekerjaan yang mereka selesaikan, maka mengerjakan 8 unit itu akan menciptakan 6,4 unit pengerjaan ulang baru. Kita dapat memperkirakan upaya total yang pada akhirnya harus mereka keluarkan sebagai jumlah dari perkembangan geometrik:
10 + 8 + 6.4 + 5.12 + ...
Jumlah bug akan berkurang secara eksponensial dengan waktu, tetapi Tim B memiliki koefisien sedemikian dalam eksponen mereka sehingga akan menjadi nol dengan sangat lambat. Sebenarnya, jumlah dari tiga istilah pertama dalam seri di atas hanya 24,4; dari lima yang pertama, 33,6; dari 10, 45 pertama; dari seluruh seri, 50. Jadi, ringkasan Tim B: tingkat injeksi cacat, 0,8; pengembangan fitur, 10/50 = 20%; memperbaiki cacat, 80%. 20/80 adalah alokasi kapasitas berkelanjutan mereka.
Sebaliknya, Tim A berada dalam kondisi yang jauh lebih baik. Kemajuan mereka terlihat seperti ini:
40 + 10 + 2.5 + 0,625 + ...
Jumlah seri ini adalah 53 1/3, jadi alokasi pengembangan fitur Tim A adalah 40 / (53 1/3) = 75% dan alokasi perbaikan cacat adalah 25%, yang cocok dengan laju injeksi cacat mereka 10/40 = 0,25 .
Sebenarnya, semua istilah dalam seri Tim A setelah tiga yang pertama sangat kecil. Apa artinya ini secara praktis adalah bahwa Tim A mungkin dapat mengatasi semua bug mereka dengan beberapa rilis pemeliharaan, rilis kedua memiliki cakupan yang cukup kecil. Ini juga menciptakan ilusi bahwa tim mana pun dapat melakukannya. Tapi bukan Tim B.
Saya memikirkan kesetaraan ini ketika membaca buku baru David Anderson, "Kanban" . (Buku ini membahas topik yang berbeda, tetapi juga membahas masalah kualitas.) Ketika membahas kualitas perangkat lunak, Anderson mengutip buku ini, oleh Capers Jones, "Penilaian Perangkat Lunak, Tingkatan, dan Praktik Terbaik" :
"... pada tahun 2000 ... kualitas perangkat lunak yang diukur untuk tim Amerika Utara ... berkisar dari 6 cacat per titik fungsi hingga kurang dari 3 per 100 titik fungsi, kisaran 200 hingga 1. Titik tengahnya sekitar 1 cacat per 0,6 hingga 1,0 poin fungsi. Ini menyiratkan bahwa itu adalah hal biasa bagi tim untuk menghabiskan lebih dari 90 persen dari upaya mereka memperbaiki cacat. "Dia mengutip contoh yang diberikan oleh salah satu rekannya dari sebuah perusahaan yang menghabiskan 90% waktu untuk memperbaiki bug mereka. .
Kefasihan yang digunakan Anderson beralih dari tingkat injeksi cacat ke alokasi kapasitas memperbaiki cacat ( permintaan kegagalan adalah istilah untuk itu) menunjukkan bahwa kesetaraan dua hal diketahui oleh peneliti kualitas perangkat lunak dan mungkin telah dikenal selama beberapa waktu. .
Kata-kata kunci dalam garis penalaran yang saya coba tampilkan di sini adalah "equlibrium" dan "berkelanjutan". Jika kami menghilangkan keberlanjutan, maka ada cara yang jelas untuk menipu angka-angka ini: Anda melakukan pengkodean awal, kemudian beralih ke kode di tempat lain, dan menyerahkan pemeliharaan kepada orang lain. Atau Anda menjalankan hutang teknis dan membongkar itu pada pemilik baru.
Jelas, tidak ada alokasi khusus yang cocok untuk semua tim. Jika kami memutuskan bahwa 20% harus dihabiskan untuk bug, maka, jika tim memiliki tingkat injeksi cacat sangat rendah, mereka tidak akan memiliki cukup bug untuk mengisi waktu, dan jika tim memiliki tingkat yang sangat tinggi, bug mereka akan terus menumpuk.
Matematika yang saya gunakan di sini disederhanakan. Saya mengabaikan hal-hal seperti biaya transaksi (perencanaan dan estimasi estimasi, post-mortem, dll.), Yang akan sedikit mempengaruhi persentase. Saya juga menghilangkan persamaan yang mensimulasikan mempertahankan satu produk dan mengembangkan yang lain secara bersamaan. Tapi kesimpulannya masih berlaku. Lakukan apa yang Anda bisa, dalam hal praktik teknis, seperti pengujian unit, integrasi berkesinambungan, tinjauan kode, dll., Untuk mengurangi tingkat injeksi cacat Anda dan, akibatnya, permintaan kegagalan Anda. Jika Anda hanya dapat membuat satu bug untuk setiap 10 fitur, Anda akan memiliki banyak waktu luang untuk mengembangkan fitur-fitur baru dan memuaskan pelanggan Anda.