Bagaimana Anda bisa memperkirakan waktu untuk tugas-tugas yang terutama terdiri dari mencari tahu masalah?

56

Meskipun relatif mungkin bagi pengembang yang berpengalaman untuk memperkirakan berapa lama waktu yang diperlukan untuk mengimplementasikan kode ketika pola dan masalah yang dipecahkan oleh kode dipahami dengan baik, bagaimana Anda bisa membuat estimasi yang baik ketika, sementara tujuan akhir dipahami dengan baik, Implementasi adalah 95% teoretis / pemecahan masalah dan memiliki jumlah implementasi yang sangat kecil?

Pekerjaan saya sering kali terdiri dari tugas untuk mencapai tujuan yang terdefinisi dengan baik, namun saya harus menemukan cara untuk mencapai tujuan itu dan sampai saya memahami solusinya, tidak jelas apa hambatan tambahan yang mungkin ada. Lebih khusus, saya sering bekerja pada pembuatan kode atau alat manipulasi kode otomatis. Setelah solusi sepenuhnya dipecahkan dan alat disempurnakan, itu akan langsung melakukan 95% dari perubahan aktual dengan sangat cepat. Namun, saya tidak punya cara untuk memperkirakan berapa banyak masalah tambahan yang harus diselesaikan untuk membuat generasi atau alat analisis menangani kasus tepi yang tidak terduga.

Untuk tujuan perencanaan, perusahaan saya menginginkan gagasan yang lebih baik tentang berapa lama waktu yang dibutuhkan, tetapi karena saya tidak tahu berapa banyak masalah tambahan yang muncul ketika bekerja melalui penyelesaian setiap langkah solusi. Saya tidak yakin bagaimana saya bisa mendekati memberikan perkiraan yang lebih baik.

AJ Henderson
sumber
Jenis perkiraan apa yang Anda berikan? Jika saya bertanya kepada Anda, "Saya ingin fitur yang berfungsi XYZ untuk klien ABC", jenis jawaban apa yang Anda berikan? Perhatikan bahwa setiap jawaban yang saya berikan sangat dipengaruhi oleh Perkiraan Perangkat Lunak: Demistifying the Black Art
Saya secara khusus mencoba memperkirakan jumlah waktu yang dibutuhkan untuk menyelesaikan tugas. Jadi itu akan menjadi sesuatu seperti "Hapus semua jenis kode tertentu" atau "Ubah semua kode yang melakukan sesuatu seperti XYZ untuk berperilaku seperti ABC."
AJ Henderson
Ok ... jadi jika saya meminta Anda untuk "Mengubah fungsionalitas XYZ sehingga tidak ABC" ... jenis jawaban apa yang Anda berikan? Apakah Anda mengatakan "Mungkin seminggu" atau apakah Anda mengatakan "5 hari" atau apakah Anda mengatakan "antara 1 hari dan 10 hari, tergantung pada apa yang saya temukan ketika saya menggali?"
Saya biasanya mencoba memberikan perkiraan antara 4 hari dan 8 hari (jenis presisi yang diinginkan), meskipun sering kali lebih realistis untuk mengatakan sesuatu seperti 4 hari dan 3 minggu. Saya mencoba mencari cara untuk mempersempit kisaran.
AJ Henderson
1
@gnat Terima kasih atas penjelasannya, namun saya yakin pertanyaan saya sudah jelas karena jawaban lain tampaknya mengerti apa yang ditanyakan dan sejujurnya saya tidak melihat cara pertanyaan itu dapat disimpulkan sebagai dupe dari pertanyaan yang ditandai. Jadi saya merasa komentar sudah cukup dan perubahan lebih lanjut tidak akan menguntungkan pertanyaan itu.
AJ Henderson

Jawaban:

41

Sebelum saya melangkah terlalu jauh, izinkan saya mengatakan bahwa Perkiraan Perangkat Lunak: Demistifying the Black Art adalah sumber yang bagus untuk orang-orang yang melihat dan berpikir tentang perkiraan. Kedua gambar di bawah ini berasal dari buku itu sebagaimana inti jika ide-ide yang disajikan berikut.

Seperti yang telah Anda catat, estimasi adalah bagian penting untuk dapat memprediksi dan merencanakan pekerjaan secara akurat. Tidak memiliki estimasi membuat bisnis buta tentang berapa lama sesuatu akan terjadi. Bukan hal yang aneh bagi bisnis untuk memiliki gagasan yang sepenuhnya keliru mengenai berapa lama hal itu akan terjadi - apa yang menurut mereka mudah memakan waktu enam hingga delapan minggu dan apa yang dianggap sulit adalah hack sore hari Jumat.

Hal pertama adalah memberi perkiraan. Perkiraan itu sendiri bukan angka tunggal - itu komitmen. "Berapa lama ABC berlangsung" -> "Sekitar 5 hari" berarti sekitar 5 hari. Namun, perkiraan yang baik adalah rentang di mana Anda 90% yakin bahwa Anda akan memilikinya dalam kisaran itu. Jika Anda bermaksud mengatakan "Saya 90% yakin bahwa itu akan memakan waktu antara 1 dan 5 hari" maka katakan itu. Jangan bekerja dari "Saya pikir itu akan memakan waktu antara 1 dan 10 hari, jadi 5 hari mungkin tentang rata-rata" - itu bukan perkiraan dan Anda akan salah 50% dari waktu.

Nah, 50% atau lebih dari waktu itu, programmer terkenal sebagai underestimator yang terkenal untuk waktu tugas.

Pertimbangkan Kerucut Ketidakpastian:

Gambar dari http://www.construx.com - artikel lengkap di http://www.construx.com/Thought_Leadership/Books/The_Cone_of_Uncertainty/

Sadarilah bahwa perkiraan pertama dalam kisaran itu adalah 16x. Ini mirip dengan mengatakan "Saya pikir itu akan memakan waktu antara siang dan dua minggu" - tetapi Anda belum tahu. Saat Anda maju sedikit dengan desain, kisaran menyempit ke 4x. Ini tidak berarti bahwa itu akan memakan waktu satu minggu, itu berarti bahwa Anda malah akan mengatakan "setelah melihat ini sedikit, itu akan memakan waktu antara tiga minggu" - ya, perkiraan naik, tetapi juga kisaran perkiraan pergi turun.

Dengan setiap taksiran yang Anda berikan, Anda harus yakin 90% bahwa taksiran itu berada dalam kisaran itu. Anda bisa salah - 10% dari waktu itu akan jatuh dari kisaran itu.

Ada banyak cara untuk memperkirakan ukuran proyek. Membandingkannya dengan proyek-proyek sebelumnya, menggunakan proxy (saya pikir itu akan membutuhkan 1000 baris kode yang akan memakan waktu selama ini untuk menulis), menggunakan titik fungsi (untuk mengkonversi menjadi LOC ...), mendapatkan perkiraan dari sejumlah orang dan kemudian menyempurnakannya secara iteratif ... beberapa pekerjaan untuk beberapa proyek, beberapa pekerjaan untuk proyek lain.

Sebuah sangat bab penting dalam buku ini yang saya sebutkan di atas adalah # 23 yang berkaitan dengan politik estimasi dan berurusan dengan manajer dan eksekutif.

Kunci untuk estimasi adalah proses berulang menyempurnakannya setelah mengerjakannya sedikit.

Memberikan perkiraan yang terlalu tepat terlalu awal dalam proses bisa sangat rawan kesalahan. Jika Anda tidak yakin tentang hal itu, berikan perkiraan luas dan kemudian kembalilah dengan perkiraan lain setelah beberapa periode waktu untuk introspeksi lebih dalam masalah dan mungkin menggambarkan bagaimana Anda akan melakukannya, melihat berapa banyak kode yang Anda buat untuk itu masalah serupa yang terakhir dan faktor-faktor lain yang akan mempengaruhi estimasi.


Perkiraan membutuhkan beberapa pemikiran - jangan berikan perkiraan manset. Ini sering memiliki kesalahan besar yang terkait dengan mereka dibandingkan dengan apa yang diperlukan ketika Anda memikirkannya sedikit.

Dari Bagaimana merespons ketika Anda diminta perkiraan?

Apa yang Harus Dikatakan Ketika Diminta Perkiraan

Anda berkata, "Aku akan kembali padamu."

Anda hampir selalu mendapatkan hasil yang lebih baik jika Anda memperlambat proses dan meluangkan waktu melewati langkah-langkah yang kami jelaskan di bagian ini. Perkiraan yang diberikan di mesin kopi akan (seperti kopi) kembali menghantui Anda.

Dari Bab 4 Estimasi Perangkat Lunak:

Gambar 4-8 Kesalahan rata-rata dari perkiraan manset

Perhatikan bahwa dalam hal ini, perkiraan setelah sedikit peninjauan secara sistematis kurang liar dan rawan kesalahan daripada taksiran perkiraan. Jangan lakukan perkiraan manset. Duduk dan pikirkan tugas itu dan perkirakan setelah sedikit memikirkannya.

Glorfindel
sumber
1
Jawaban ini menarik dan memiliki banyak kelebihan, tetapi mungkin menjawab pertanyaan tentang memperkirakan lebih banyak tugas berbasis implementasi, daripada pertanyaan tentang bagaimana memperkirakan berapa lama waktu yang dibutuhkan untuk memiliki gelombang otak ....
Michael Shaw
@Ptolemy baik cara - baik itu implementasi atau konsep, ini merupakan perkiraan. Saya dapat memperkirakan berapa lama waktu yang dibutuhkan sehingga saya 90% yakin bahwa kisaran tersebut mencakup apa hasil akhirnya. Mungkin kisarannya sangat luas, tapi itu perkiraan juga - terlalu banyak orang memberikan perkiraan "6-8 minggu" dan kemudian melewatkan perkiraan itu karena terlalu sempit - mereka memberikan kepercayaan 30% daripada kepercayaan 90%. Ini berkaitan dengan keterampilan dalam memperkirakan, perbaikan berulang, dan perangkap umum dengan memperkirakan tugas apa pun karena itu adalah keterampilan pertama yang diperlukan untuk bekerja untuk menyelesaikan masalah.
15

Bos : AJ, Kami punya 3 anjing, 2 kelinci, sebuah ketapel, dan seorang biarawati. Kita perlu menemukan cara untuk mendapatkan semua 7 (ya, ketapel juga) melalui dinding 20 kaki dan ke danau di sisi lain tanpa anjing memakan kelinci, dan tanpa menenggelamkan biarawati. Berapa lama Anda akan menemukan solusinya?

Lihat, masalah yang memperkirakan berapa lama waktu yang dibutuhkan untuk menyelesaikan suatu masalah adalah bahwa dibutuhkan orang yang berbeda dalam jumlah waktu yang berbeda. Jika Anda memiliki riwayat penyelesaian masalah yang sama, Anda dapat memperkirakan berdasarkan berapa lama waktu yang Anda butuhkan sebelumnya. Jika tidak, maka Anda tidak memperkirakan, Anda hanya menebak.

Selain itu, masalahnya mungkin bahkan tidak memiliki solusi yang dapat diterima. Atau mungkin solusinya akan membutuhkan otorisasi lebih lanjut yang dapat membatalkan seluruh proyek. Atau mungkin solusi mengubah seluruh sifat masalah yang dirasakan sehingga solusi menjadi sama sekali tidak perlu.

Moral dari cerita ini adalah, jika Anda tidak memiliki informasi yang cukup untuk membuat estimasi yang masuk akal, maka jangan . Belum. Dapatkan informasi lebih lanjut. Penelitian lebih lanjut. Biasanya tidak apa-apa untuk mengatakan, "Saya akan menghubungi Anda dalam 2 hari dengan beberapa angka yang lebih solid."

Ketika merancang solusi untuk klien saya, saya tidak akan menandatangani kontrak sampai saya memiliki cukup banyak desain umum yang lengkap sehingga saya tahu seperti apa solusi itu dan berapa lama proyek akan berlangsung. Ini berarti bahwa saya beresiko telah melakukan pekerjaan desain awal yang saya tidak dibayar (jika proyek tidak melalui), tetapi itu lebih baik daripada beresiko kekurangan biaya untuk pekerjaan yang dilakukan secara signifikan .

tylerl
sumber
9
Namun dalam hal ini, desainnya tampaknya 90% dari pekerjaan. Dan mengatakan "Saya akan memberi Anda perkiraan setelah saya melakukan 90% dari pekerjaan" jarang membuat orang senang.
Móż
1
Bagaimana dengan "Desainnya adalah 90% dari pekerjaan dan saya tidak akan tahu berapa lama sampai desain selesai. Dapat memberi Anda kisaran perkiraan sekarang, mulai desain dan terus ikuti perkembangan perubahan pada estimasi karena saya belajar lebih banyak tentang solusinya? "
Rob Baillie
Mengatakan ini masalah yang kompleks, kami sedang mengerjakan beberapa ide untuk menyelesaikannya. Sebagai sebuah tim, kami akan meninjau ide-ide ini minggu depan, dan sebagai bagian dari tinjauan itu akan ada rentang waktu untuk berbagai solusi. Apakah Anda ingin menghadiri pertemuan teknis itu?
Michael Shaw
4

Saya akan menyarankan Anda untuk mencoba sesuatu di tengah-tengah antara jawaban tylerl dan MichaelT dengan yang berikut:

  • Bagi pekerjaan yang harus dilakukan dalam 3 atau 4 fase. Fase-fase tersebut harus:
    1. Analisa masalah
    2. Solusi prototyping
    3. Solusi dunia nyata
    4. Penilaian keluaran (tes)
  • berikan perkiraan hanya untuk fase 1 (analisis) berdasarkan pengalaman Anda, atau pada fase 1 + 2 (analisis + prototipe) untuk manajemen Anda. Kemudian, berikan mereka perkiraan untuk fase 3 + 4 ketika masalah fase 1 dan 2 selesai (atau setidaknya cukup maju sehingga Anda dapat memiliki kepercayaan pada perkiraan Anda).

Alasan di balik adalah bahwa Anda tahu berdasarkan pengalaman bahwa Anda perlu X hari untuk menganalisis basis kode yang diberikan (mungkin tergantung pada ukurannya) dan memiliki setelan alat dasar atau skrip yang berjalan (dan mungkin gagal). Kemudian, jumlah kesalahan harus memberi Anda beberapa informasi tentang kesulitan tugas yang sebenarnya.

Ini mungkin tidak persis seperti yang diinginkan manajemen, tetapi saya percaya selalu lebih baik untuk membuat perkiraan yang akan Anda temui.

sansuiso
sumber
+1 Anda mungkin belum tahu berapa lama sesuatu akan terjadi, tetapi Anda dapat mengatakan "Beri X jumlah waktu saya untuk memikirkannya dan saya akan membalasnya" - satu jam, sehari, seminggu, apa pun.
Rory Hunter
1

Karena pertanyaan ini terutama tentang jenis pekerjaan penelitian, meminta pengembang perangkat lunak adalah pendekatan yang berani, metrik yang umum adalah bahwa pengembang perangkat lunak yang membutuhkan waktu dua kali lebih lama dari perkiraan mereka mungkin merupakan pengembang yang baik. Namun, yang mengatakan, tugas penelitian (dan desain arsitektur) sangat banyak bagian dari pemrograman, dan sering dilewati / diminimalkan. Mereka juga sering sulit diperkirakan.

Pertanyaan pertama yang akan saya tanyakan pada diri saya, apakah ini masalah yang bisa diselesaikan? Ini bukan masalah kecerdasan atau kekuatan otak, tetapi salah satu realitas praktis. Kecuali Anda berada di dunia tembakan bulan Google, di mana kegagalan merupakan hasil yang diharapkan, realitas keras adalah bahwa saya akan diharapkan untuk memberikan ini , apa pun ini ternyata menjadi. Aturan dasar yang kasar sepertinya adalah apakah kita sudah tahu 90% dari solusi yang dibutuhkan?

Pertanyaan kedua yang akan saya tanyakan, apa lagi yang berguna untuk diketahui dalam memikirkan solusinya? Ini benar-benar cara mengecek apakah kita benar-benar cukup tahu untuk menghasilkan solusi yang dapat diterima. Ini dapat menghasilkan serangkaian tugas pencarian fakta yang membantu untuk lebih menentukan apa solusi yang dibutuhkan, yang masing-masing biasanya cukup mudah untuk didefinisikan dan diperkirakan.

Pertanyaan ketiga adalah, siapa yang paling cocok di tim untuk masalah seperti ini? Siapa pun yang mendapatkan tugas ini akan merasakan hasilnya dengan gaya mereka sendiri. Memberikan masalah seperti ini kepada seorang programmer yang memiliki 10 juta pertanyaan di awal tugas, dan kemudian pergi dan memberikan sesuatu pertama kali (meskipun lambat) mungkin merupakan pilihan yang lebih baik daripada memberikannya programmer yang memadukan implementasi dengan cepat , tetapi ketika ada masalah, itu hanya ditemukan pada akhir proses.

Kemudian, tugas sebenarnya adalah memikirkan kemungkinan solusi, implementasi dan pendekatan, dan untuk memiliki skala waktu yang tetap di mana mereka perlu melaporkan kembali.

Ketika mereka melaporkan kembali, Anda kemudian memiliki pilihan tentang mendapatkan serangkaian solusi yang lebih luas, memberikan persetujuan untuk mengimplementasikan solusi, atau mencerminkan, karena solusi tersebut masih belum didefinisikan dengan cukup jelas.

Michael Shaw
sumber
1

Dengan pertanyaan penelitian di mana tidak jelas bahwa ada jawaban sama sekali, apalagi gagasan yang jelas tentang apa yang harus dilakukan, saya biasanya mengusulkan untuk menghabiskan jumlah waktu x di atasnya sebagai permulaan.

"Aku tidak tahu apakah ini mungkin, tapi aku bisa menghabiskan dua hari untuk meneliti itu. Itu mungkin tidak akan memberi kita solusi, tapi mungkin aku akan bisa mengesampingkan beberapa hal dan aku mungkin akan punya ide apa langkah konkret selanjutnya dan investasi waktu seperti apa yang akan mereka maksud. Lalu kita dapat memutuskan apakah masuk akal untuk mengambil langkah lain. "

Jadi letakkan ketidakpastian di arah lain - perkiraannya tepat (saya akan menghabiskan dua hari), hanya saja tidak ditentukan apa yang akan dicapai saat itu.

Timeboxing, pada dasarnya.

RemcoGerlich
sumber