Sementara itu relatif, mungkin bagi para pengembang yang berpengalaman untuk memperkirakan berapa lama waktu yang dibutuhkan untuk melaksanakan kode ketika pola dan masalah kode ini memecahkan dipahami dengan baik, bagaimana anda dapat membuat perkiraan yang baik ketika, sedangkan tujuan akhirnya adalah dipahami dengan baik, implementasi adalah 95% teoretis/pemecahan masalah dan memiliki jumlah yang sangat kecil dari implementasi?
Pekerjaan saya sering terdiri dari tugas-tugas untuk mencapai tujuan didefinisikan dengan baik, namun saya harus menemukan cara untuk mencapai tujuan itu, dan sampai saya mengerti solusi, i6sn't jelas apa hambatan tambahan mungkin ada. Lebih khusus, saya'm sering bekerja pada generasi kode atau kode otomatis alat manipulasi. Setelah solusi sepenuhnya diselesaikan dan alat disempurnakan, itu akan langsung melakukan 95% dari yang sebenarnya perubahan yang sangat cepat. Saya don't, namun, ada cara untuk memperkirakan berapa banyak masalah tambahan yang mungkin harus diselesaikan untuk membuat generasi atau alat analisis yang menangani terduga kasus tepi.
Untuk tujuan perencanaan, perusahaan saya ingin ide yang lebih baik tentang berapa lama itu akan mengambil, tapi karena aku don't tahu berapa banyak masalah tambahan yang mungkin datang saat bekerja melalui pemecahan setiap langkah solusi. I'm tidak yakin bagaimana saya dapat memberikan perkiraan yang lebih baik.
Sebelum aku terlalu jauh, izinkan saya mengatakan bahwa perangkat Lunak Estimasi: Menghilangkan Hitam Art adalah sumber yang bagus untuk orang-orang melihat dan berpikir tentang estimasi. Kedua gambar di bawah ini adalah dari buku itu seperti inti jika ide-ide yang disajikan berikut ini.
Seperti yang anda've mencatat, estimasi merupakan bagian penting dalam mampu memprediksi secara akurat dan rencana kerja. Tidak memiliki estimasi membuat bisnis buta tentang berapa lama sesuatu akan mengambil. Hal ini tidak biasa bagi bisnis untuk memiliki benar-benar keliru ide tentang bagaimana hal-hal yang lama akan mengambil apa yang mereka pikir lebih mudah memakan waktu enam sampai delapan minggu dan apa yang dianggap sulit adalah hari jumat sore hack.
Hal pertama adalah untuk memberikan perkiraan. Perkiraan itu sendiri tidak tunggal nomor - thats komitmen. "Berapa lama akan ABC mengambil" --> "Sekitar 5 hari" berarti bahwa sekitar 5 hari. Namun, perkiraan yang baik adalah rentang di mana anda adalah 90% yakin bahwa anda akan memiliki itu di kisaran tersebut. Jika anda bermaksud untuk mengatakan "saya 90% yakin bahwa itu akan mengambil betwene 1 dan 5 hari" kemudian mengatakan bahwa. Don't bekerja dari "saya pikir itu akan memakan waktu antara 1 dan 10 hari, jadi 5 hari mungkin adalah tentang rata-rata" - thats bukan perkiraan dan anda'll menjadi salah 50% dari waktu.
Nah, 50% atau lebih dari waktu, programmer yang terkenal underestimators untuk tugas kali.
Mempertimbangkan Kerucut Ketidakpastian:
Gambar dari http://www.construx.com - artikel lengkap di http://www.construx.com/Thought_Leadership/Books/The_Cone_of_Uncertainty/
Menyadari bahwa estimasi pertama dalam kisaran yang lebih 16x. Hal ini mirip dengan mengatakan "saya pikir itu akan memakan waktu antara sore dan dua minggu" kamu't know yet. Saat anda pergi ke depan dengan desain yang sedikit, berbagai menyempit ke bawah ke 4x. Ini tidak tidak berarti bahwa itu akan memakan waktu satu minggu, itu berarti bahwa anda akan malah akan mengatakan "setelah melihat ini sedikit, itu akan memakan waktu antara tiga minggu" ya, perkiraan naik, tapi juga berbagai perkiraan turun.
Dengan masing-masing perkiraan yang anda berikan, anda harus 90% yakin bahwa perkiraan ini dalam kisaran tersebut. Anda dapat menjadi salah - 10% dari waktu itu akan jatuh keluar dari kisaran tersebut.
Ada banyak cara untuk memperkirakan ukuran proyek. Membandingkannya dengan proyek-proyek masa lalu, menggunakan proxy (saya pikir itu akan mengambil 1000 baris kode yang akan mengambil waktu lama untuk menulis), dengan menggunakan fungsi poin (untuk mengkonversi ke LOC...), mendapatkan perkiraan dari jumlah orang-orang dan kemudian penyulingan itu iteratif... beberapa pekerjaan untuk beberapa proyek, beberapa pekerjaan untuk proyek-proyek lainnya.
Sangat bab penting dalam buku ini yang saya sebutkan di atas adalah #23 yang berhubungan dengan politik estimasi dan berurusan dengan manajer dan eksekutif.
Kunci untuk estimasi adalah iteratif proses penyulingan setelah bekerja di atasnya sedikit.
Memberikan terlalu tepat dari perkiraan yang terlalu dini dalam proses dapat sangat rawan kesalahan. Jika anda tidak't yakin tentang hal itu, memberikan berbagai perkiraan dan kemudian datang kembali dengan perkiraan lain setelah beberapa periode waktu untuk lebih banyak introspeksi ke dalam masalah dan mungkin membuat sketsa tahu bagaimana anda akan melakukannya, melihat berapa banyak kode yang anda tulis itu untuk terakhir masalah yang sama dan faktor-faktor lain yang akan berdampak pada estimasi.
Perkiraan memerlukan beberapa pemikiran - don't memberikan off the cuff perkiraan. Ini sering memiliki besar kesalahan yang terkait dengan mereka dibandingkan dengan apa yang dibutuhkan ketika anda berpikir tentang hal itu sedikit.
Apa yang harus Dikatakan Ketika Ditanya Perkiraan
Anda mengatakan "aku'll mendapatkan kembali kepada anda."
Anda hampir selalu mendapatkan hasil yang lebih baik jika anda memperlambat proses turun dan menghabiskan beberapa waktu untuk pergi melalui langkah-langkah yang kami jelaskan di bagian ini. Perkiraan yang diberikan pada kopi, mesin (seperti kopi) datang kembali untuk menghantui anda.
Dari Bab 4 perangkat Lunak Estimasi:
Perhatikan bahwa dalam hal ini, perkiraan setelah sedikit review yang sistematis kurang liar dan rawan kesalahan dari off manset perkiraan. Don't melakukan off the cuff perkiraan. Duduk dan berpikir tentang tugas dan memperkirakan setelah sedikit berpikir tentang hal itu.
Bos: AJ, Kami memiliki 3 anjing, 2 kelinci, ketapel, dan seorang biarawati. Kita perlu menemukan cara untuk mendapatkan semua 7 (ya, ketapel juga) lebih dari 20 kaki dinding dan ke danau di sisi lain tanpa anjing makan kelinci, dan tanpa tenggelam biarawati. Berapa lama itu akan membawa anda untuk datang dengan solusi?
Lihat, masalah memperkirakan berapa lama waktu yang dibutuhkan untuk memecahkan masalah adalah bahwa dibutuhkan orang yang berbeda di waktu yang berbeda. Jika anda memiliki riwayat memecahkan masalah yang sama, anda dapat memperkirakan berdasarkan berapa lama itu telah mengambil anda pada waktu-waktu sebelumnya. Jika anda don't, kemudian anda're tidak memperkirakan, anda're hanya menebak-nebak.
Selain itu, masalah bahkan mungkin tidak memiliki solusi yang dapat diterima. Atau mungkin solusi ini akan memerlukan otorisasi yang dapat membuang seluruh proyek. Atau mungkin solusi perubahan seluruh dirasakan sifat dari masalah tersebut sehingga larutan menjadi sama sekali tidak perlu.
Moral dari cerita ini adalah, jika anda don't memiliki cukup informasi untuk membuat estimasi yang wajar, maka don't. Belum. Mendapatkan informasi lebih lanjut. Penelitian lebih lanjut. Biasanya itu's benar-benar baik untuk mengatakan, "aku'll mendapatkan kembali kepada anda dalam waktu 2 hari dengan beberapa lebih solid."
Ketika merancang sebuah solusi untuk klien saya, saya tidak't menandatangani kontrak sampai aku memiliki cukup umum desain lengkap yang saya tahu solusi apa yang akan terlihat seperti dan berapa lama proyek akan mengambil. Ini berarti bahwa I'm pada risiko setelah dilakukan desain awal pekerjaan yang saya don't mendapatkan dibayar (jika proyek doesn't pergi melalui), tapi yang's lebih baik daripada berada pada risiko secara signifikan di bawah penagihan untuk pekerjaan yang sedang dilakukan.
Saya akan menyarankan anda untuk mencoba sesuatu di tengah-tengah antara jawaban dari tylerl dan MichaelT sebagai berikut:
Alasan di balik ini adalah bahwa anda tahu melalui pengalaman yang anda butuhkan dalam X hari untuk menganalisis mengingat basis kode (mungkin tergantung pada ukuran) dan telah sesuai dengan dasar alat-alat atau script yang menjalankan (dan mungkin gagal). Maka, jumlah kesalahan yang harus memberikan anda beberapa informasi tentang kesulitan yang sebenarnya dari tugas di tangan.
Ini mungkin tidak persis apa yang manajemen inginkan, tapi saya percaya itu's selalu lebih baik untuk datang dengan memperkirakan bahwa anda akan benar-benar bertemu.
Sebagai pertanyaan ini terutama tentang penelitian jenis pekerjaan, meminta pengembang perangkat lunak adalah berani mendekati, metrik umum adalah bahwa pengembang perangkat lunak yang memakan waktu dua kali lebih lama dari perkiraan mereka mungkin adalah seorang pengembang yang baik. Namun, yang mengatakan, penelitian (dan arsitektur desain) tugas-tugas yang sangat banyak bagian dari pemrograman, dan sering dilewati / diminimalkan. Mereka juga sering sulit untuk memperkirakan.
Pertanyaan pertama saya akan bertanya pada diri sendiri, ini adalah masalah yang dapat diselesaikan? Ini bukan intelek atau daya otak masalah, tapi satu kenyataan praktis. Kecuali anda berada di dunia Google moon tembakan, di mana kegagalan adalah hasil yang diharapkan, hard kenyataannya adalah bahwa saya akan diharapkan untuk memberikan * ini, apapun ini* ternyata. Aturan praktis kasar tampaknya kita sudah tahu apa yang 90% dari kebutuhan solusi untuk menjadi?
Pertanyaan kedua saya mau bertanya, apa lagi yang akan berguna untuk mengetahui pemikiran tentang solusi? Ini adalah benar-benar cara double memeriksa apakah kita benar-benar tahu cukup untuk datang dengan solusi yang akan diterima. Hal ini dapat menghasilkan serangkaian fakta tugas-tugas yang membantu untuk lebih menentukan solusi apa yang perlu, masing-masing yang biasanya cukup mudah untuk menentukan dan memperkirakan.
Pertanyaan ketiga adalah, yang paling cocok di tim untuk masalah seperti ini? Siapa pun yang mendapat tugas ini akan rasa hasil dengan gaya mereka sendiri. Memberikan masalah semacam ini untuk seorang programmer yang memiliki 10 juta pertanyaan-pertanyaan di mulai dari tugas, dan kemudian pergi dan memberikan sesuatu yang pertama kali (meskipun lambat) mungkin menjadi pilihan yang lebih baik daripada memberikan programmer poni yang keluar pelaksanaan dengan cepat, tapi ketika ada's masalah, yang hanya ditemukan pada akhir proses.
Kemudian, sebenarnya tugas akan berpikir tentang solusi yang mungkin, implementasi dan pendekatan, dan memiliki waktu yang tetap skala di mana mereka perlu untuk melaporkan kembali.
Ketika mereka melaporkan kembali, maka anda memiliki pilihan tentang mendapatkan satu set yang lebih luas dari solusi yang mungkin, memberikan pergi ke depan pada implementasi solusi, atau mencerminkan, sebagai solusi masih tidak didefinisikan dengan cukup jelas
Dengan researchy pertanyaan di mana itu's jelas bahwa ada jawaban sama sekali, apalagi ide yang jelas tentang apa yang perlu dilakukan, biasanya saya mengusulkan untuk menghabiskan jumlah x pada waktu itu sebagai awal.
"saya tidak tahu jika ini bahkan mungkin, tapi aku bisa menghabiskan dua hari untuk meneliti itu. Yang mungkin tidak't memberikan kita solusi, tapi mungkin aku'akan dapat mengesampingkan beberapa hal dan saya'll mungkin memiliki gagasan apa yang beberapa beton langkah-langkah berikutnya bisa dan apa jenis investasi waktu mereka akan berarti. Maka kita dapat memutuskan apakah itu masuk akal untuk mengambil langkah lain."
Jadi menempatkan ketidakpastian dalam arah lain -- estimasi yang lebih baik tepat (I'akan menghabiskan dua hari),'s hanya sangat tidak ditentukan apa yang akan dicapai oleh kemudian.
Timeboxing, pada dasarnya.