Bagaimana cara belajar membuat perkiraan yang lebih baik? [Tutup]


42

Saya payah dengan perkiraan. Ketika seseorang bertanya kepada saya berapa lama sesuatu akan terjadi, saya bahkan tidak berani menebak karena saya akan sepenuhnya melenceng. Biasanya saya terlalu optimis, dan mungkin harus melipatgandakan tebakan saya dengan beberapa faktor X besar ...

Bagaimana saya bisa belajar membuat perkiraan yang lebih baik? Itu tidak diajarkan di uni saya, dan meskipun kami memiliki tenggat waktu untuk semua pekerjaan, saya tidak pernah memikirkan berapa lama sesuatu akan terjadi. Yang harus saya lakukan. Demi semua orang (terutama milikku).



Jawaban:


28

Saya masih tidak hebat dalam hal itu, tetapi saya telah menemukan bahwa melacak berapa lama Anda memperkirakan untuk tugas dan berapa lama Anda benar-benar dapat membantu. Dengan begitu Anda bisa mendapatkan ide yang kuat tentang seberapa jauh Anda biasanya. Perangkat lunak manajemen masalah dengan pelacakan waktu (Jira dalam kasus saya) atau spread sheet dapat sangat membantu dalam hal ini.

Saya pikir lebih dari apa pun itu adalah pengalaman.


1
Ini. Ini cara paling berguna untuk memperkirakan. Untuk menjadi lebih baik, seseorang dapat melacak waktu untuk tugas ketika benar-benar melakukannya, jadi lain kali estimasi yang lebih baik dapat diberikan. Struktur rincian kerja adalah konsep yang berguna untuk ini.
Tamás Szelei

3
Ini jawaban yang bagus. Saya ingin menambahkan bahwa, selain mencatat estimasi Anda, akan sangat membantu untuk menulis semacam "daylog," di mana Anda mencatat keputusan penting, masalah yang Anda temui dan selesaikan, dll. Jika perkiraan ternyata untuk dimatikan sebesar 50% atau lebih, maka bisa berguna untuk menyelidiki alasannya, dan "daylog" ini akan sangat membantu (lihat halaman 64-69 dalam "The Pragmatic Programmer" untuk perincian lebih lanjut tentang ini). Juga, berhati-hatilah dengan siapa Anda menunjukkan nomor Anda; orang yang tidak mengerti apa yang Anda lakukan mungkin mencoba menggunakannya untuk melawan Anda.
Leif

Saya melakukan apa yang Anda lakukan - secara manual. Ini pada dasarnya Penjadwalan Berbasis Bukti ( en.wikipedia.org/wiki/Evidence-based_Scheduling ), seperti yang dipelopori oleh Joel & diimplementasikan di fogcreek.com/fogbugz
Mawg

18

Hukum Murphy Manajemen Waktu: Untuk mencari tahu berapa lama sesuatu akan mengambil, mencari tahu berapa lama harus mengambil dan ganda itu.

Kemudian, naik ke unit waktu berikutnya yang lebih tinggi. Jadi, kami mengalokasikan dua minggu untuk proyek satu hari.


2
Saya benci mengatakannya, tapi ini mungkin metrik paling sederhana dan paling efektif yang pernah saya lihat di sini.
glenatron

3
Saya diajari menambahkan satu dan menguasainya. Jika saya pikir itu akan memakan waktu sehari, tambahkan satu membuatnya dua hari, persegi yang membuatnya 4 hari. Saya tahu orang lain yang menggunakan besarnya bergerak tetapi tanpa penggandaan. jadi suatu hari menjadi seminggu. Dua setengah minggu menjadi dua setengah bulan, dll. Tidak peduli seberapa bagus Anda dalam hal ini, Anda harus menambahkan bantalan untuk hal-hal yang tidak diketahui yang akan terjadi.
old_timer

9

Anda dapat belajar dengan melakukannya secara kolektif .

Saya menggunakan Poker Perencanaan . Ini teknik berbasis konsensus untuk memperkirakan.

Estimasi Anda harus dilacak dan dibandingkan dengan apa yang telah Anda lakukan secara efektif. Anda akan mendapatkan Velocity .

Setiap kali Anda memperkirakan sesuatu, gandakan dengan kecepatan Anda saat ini untuk mendapatkan estimasi yang akurat .


Hal poker terdengar sangat menarik, apakah Anda benar-benar melakukan IRL ini seperti yang dijelaskan dalam tautan Anda? Apakah itu membantu Anda membuat perkiraan yang lebih tepat?
dr Hannibal Lecter

Iya nih. Hal ini membuat estimasi menjadi menyenangkan! Dan sangat akurat. Tentu saja, Anda harus berlatih sedikit, tetapi begitu Anda "mengerti", Anda tidak dapat memperkirakan dengan metode lain lagi.

Ini benar-benar terdengar menyenangkan! :) Buruknya saya tidak akan pernah bisa menjual ini di perusahaan saya: - /
dr Hannibal Lecter

@dr Hannibal Lecter: gunakan trik toko hewan peliharaan. Katakan kepada mereka itu tidak pasti, bahwa Anda akan menggunakannya hanya untuk mengujinya. Percayalah, ini pasti definitif;)

9

Estimasi Perangkat Lunak oleh Steve McConnell (MS Press) adalah bacaan yang bagus.

Hal utama dengan perkiraan perangkat lunak dirangkum sebagai berikut

Tanpa informasi historis, perkiraan Anda tidak berguna.

Ini adalah salah satu alasan saya berpikir mengapa proyek berulang lebih sukses daripada proyek air terjun bertahap besar. Mereka tidak berusaha menyusun rencana selama setahun dengan sedikit informasi selain voodoo kotak hitam tentang apa yang mereka pikir seharusnya. Setiap iterasi, mereka mengestimasi ulang / merencanakan ulang dan memiliki beberapa iterasi terakhir untuk mendasarkan estimasi mereka.

Beberapa hal lain yang perlu diingat:

  1. Itu hanya akan lebih lambat . Menerapkan aturan 80/20 berarti pekerjaan yang lebih sulit akan datang nanti kecuali manajemen proyek Anda sangat disiplin.
  2. Estimasi! = Perencanaan. Estimasi adalah proses mencari tahu upaya yang diperlukan untuk menyelesaikan sesuatu. Perencanaan adalah proses memasukkannya ke dalam jadwal.
  3. Efisiensi 60% adalah segalanya yang dapat Anda harapkan. 70% adalah utopia. Jika Anda memperkirakan dalam beberapa hari, masukkan ini. Jika Anda memperkirakan dalam beberapa jam, jangan lupa untuk menerapkannya nanti.
  4. Ingat ekor panjangnya . Perkiraan adalah perkiraan kasar tentang berapa lama "mungkin" akan disesuaikan untuk beberapa tingkat risiko dan tidak diketahui. Ekor panjang berperan karena jumlah aktual pekerjaan yang dibutuhkan tidak akan pernah kurang dari 0. OTOH, jumlah waktu maksimum yang dibutuhkan hanya dibatasi oleh berapa lama Anda bersedia menghabiskan untuk itu sebelum menyerah. Seperti yang dikatakan mantan bos saya, "semua perkiraan adalah +/- x% dan tidak pernah minus".

Bisakah Anda menjelaskan dari mana indikator 60% ini berasal (dan 70% -opia)? Apakah ada artikel tentang topik ini yang tersedia di suatu tempat?
krokodilko

7

Saya terkejut bahwa tidak ada yang menyebutkan teknik estimasi gaya PERT yang dijelaskan dalam The Clean Coder karya Robert Martin . Dalam metode itu, Anda memperkirakan berapa lama untuk 3 skenario: optimis ( O), nominal ( N), dan pesimistis ( P). Maka durasi yang diharapkan = (O+4N+P)/6dan Anda mendapatkan standar deviasi (P-O)/6.

Ini sepertinya bekerja dengan cukup baik, dan saya telah menggunakannya beberapa kali ketika manajemen benar-benar peduli tentang berapa lama sesuatu akan terjadi.

Seperti yang telah dikomentari orang lain, saya juga membuat perkiraan dengan memeriksa data historis ("Berapa lama waktu yang diperlukan untuk melakukan hal serupa ini?").

Tetapi metode favorit saya adalah tidak melakukan estimasi waktu sama sekali, dan hanya melakukan estimasi titik dan mendapatkan kecepatan lebih dari iterasi. Jika sebuah tim cukup konsisten dalam mengukur dan menyelesaikan pekerjaan (cerita pengguna), maka Anda menghemat banyak waktu dengan tidak bertanya berapa lama setiap hal akan memakan waktu.

Perkiraan jam sangat sulit untuk mendapatkan yang benar, dan mereka membutuhkan banyak pekerjaan untuk memecah hal-hal menjadi potongan cukup kecil untuk secara efektif mengukur. Dan meskipun itu jarang benar karena ada terlalu banyak variabel dan kita lupa untuk memperhitungkan hal-hal seperti penyakit, liburan, atau bahkan gangguan.

Jika saya harus melakukan estimasi jam, saya mencoba hanya melakukannya untuk tugas-tugas kecil dalam iterasi. Saya mengukur semuanya dalam taksiran setengah hari (4, 8, 12 jam) kecuali saya tahu itu bisa kurang. Tapi saya jarang memperkirakan apapun kurang dari 1 jam.


Sejak menjawab pertanyaan ini, saya juga pindah lebih banyak ke kamp "tanpa perkiraan". Beberapa ide besar keluar dari sana.
Allan

5

Pertama dan paling penting, Anda harus mendefinisikan suatu proses dan menaatinya. Termasuk merevisi rencana di akhir setiap fase proses. Anda juga bisa merevisi prosesnya, tetapi secara tertib.

Kedua, lakukan semacam desain. Desain adalah langkah pertama untuk perencanaan, Anda tidak membangun rumah tanpa gambar.

Ketiga, lacak waktu (upaya). Anda setidaknya harus membedakan:

  • Analisis
  • Desain
  • Kode
  • Pengujian unit (termasuk cacat pemasangan)
  • Pengujian integrasi (termasuk memperbaiki cacat)
  • Pengujian penerimaan, dengan pengguna (termasuk memperbaiki cacat)

    Akan bagus jika Anda mengukur upaya perbaikan cacat untuk setiap jenis pengujian, tetapi menambah kompleksitas, sehingga Anda dapat melakukannya nanti.

Keempat, identifikasi item basis utama untuk estimasi. Sebagai contoh:

  • Jumlah proses yang akan diotomatisasi (Analisis)
  • Jumlah entitas model domain (Desain)
  • Jumlah formulir dan laporan (Kode)

Kelima, berkorelasi item dasar dan upaya. Sebagai contoh:

  • Upaya analisis = X jam kerja / proses yang akan diotomatisasi
  • Upaya desain = Y man-hour / entitas model domain
  • Upaya kode = Z jam kerja / formulir (atau laporan); jumlah bentuk = A * entitas model domain
  • Upaya pengujian unit = M% * Upaya kode
  • Upaya pengujian integrasi = N% * Upaya kode
  • Upaya pengujian penerimaan = P% * Upaya kode

Keenam, melacak kinerja dan penyimpangan dari perkiraan untuk setiap proyek. Jadi, Anda dapat menyempurnakan faktor korelasi Anda.

Ketujuh, ulangi dan tingkatkan. Anda akan mendapatkan banyak wawasan hanya pada akhir proyek pertama, pada ketiga Anda akan merasa nyaman merencanakan dan memperkirakan.

Lihatlah http://en.wikipedia.org/wiki/Personal_Software_Process , ini benar-benar berfungsi.


3

Setiap kali Anda menemukan masalah estimasi, cobalah untuk membaginya menjadi potongan-potongan kecil. Kemudian lihat apakah Anda sudah melakukan hal-hal yang mirip dengan potongan. Jika sudah, Anda harus sudah memiliki gagasan yang adil tentang berapa lama setiap potongnya. Jika tidak, Anda harus mulai secara aktif melacak waktu yang diambil untuk berbagai jenis tugas. Ini akan membantu Anda dalam estimasi di masa mendatang.

Total waktu yang dibutuhkan akan lebih dari jumlah masing-masing bagian, karena Anda memerlukan waktu untuk integrasi dan pengujian.

Jika Anda belum melakukan hal serupa, Anda mungkin bisa mengandalkan pengalaman orang lain dan mendapatkan perkiraan dari mereka. Jangan anggap ini nilai nominal. Tidak ada yang mengajarkan Anda pengalaman.

Ini seperti menembak target. Tembakan sebelumnya pada perkiraan harus memberi tahu Anda seberapa melencengnya Anda, sehingga Anda dapat memperbaikinya.


3

Saya merasa paling mudah untuk melakukan proses pembagian ke tugas-tugas minimal seperti yang disebutkan di atas masing-masing bekerja dan kemudian gandakan perkiraan itu. Lalu saya tambahkan mereka bersama dan tambahkan lima puluh persen. Itu memberi saya perkiraan waktu proyek dalam kondisi ideal. Jika pekerjaan itu praktis akan terjadi secara paralel dengan yang lain itu akan membutuhkan lebih lama. Jika Anda harus menunggu orang lain, perkirakan mereka akan memakan waktu dua kali lebih lama dari yang Anda pikirkan. Menunggu konten, umpan balik, atau informasi lain sering kali jauh lebih lama daripada yang tampak mungkin.

Di mana saya bekerja, kami membuat estimasi kasus / perkiraan kasus / kasus terburuk terbaik untuk setiap langkah proses, yang berguna sebagai panduan dan juga untuk mengevaluasi bagaimana perkiraan Anda bekerja.

Teknik ini tidak pernah begitu penting kecuali bahwa Anda harus mampu melawan godaan programmer untuk meremehkan tugas, tetapi yang penting adalah bersikap konservatif ketika Anda dapat memberikan sesuatu. Jika Anda butuh tujuh minggu untuk membangun sesuatu dan Anda berjanji delapan minggu, Anda bisa datang sedikit lebih awal dan terlihat baik untuk itu atau melakukan beberapa tes tambahan dan yakin akan keandalannya. Jika Anda berjanji enam minggu Anda dapat terlihat buruk bahkan jika itu sama sekali bukan kesalahan Anda. Jika ragu, tebak secara konservatif.


1

Anda dapat mencoba untuk membangun rekam jejak dari apa yang merupakan taksiran dan apa yang sebenarnya untuk berbagai tugas untuk membangun cukup dari suatu catatan untuk kemudian mengetahui pengali apa yang dimiliki untuk hal-hal tertentu yang dapat diulang dalam daftar Anda. Memang ini adalah latihan coba-coba tetapi tampaknya berhasil dengan baik bagi saya. Ada juga sesuatu yang bisa dikatakan untuk banyak percobaan sebelum polanya muncul. Ini mungkin mirip dengan banyak jawaban lain yang akan mengatakan bahwa seseorang dapat berkata, "Lakukan saja!" karena itulah bagaimana sebagian besar dari kita mengembangkan keterampilan. Apakah menyakitkan untuk melihat betapa salahnya seseorang ketika membuat perkiraan? Ya, tetapi jika perkiraannya membaik maka semua orang pada akhirnya bisa bahagia.


1

Jika Anda dapat menguraikan proyek menjadi tugas-tugas yang lebih kecil dan melakukan perkiraan untuk itu, Anda akan lebih akurat secara keseluruhan. Tugas apa pun yang lebih besar dari beberapa hari harus dirinci lebih lanjut. Jika Anda tidak dapat memecahnya lebih jauh daripada Anda mungkin memiliki kesenjangan persyaratan. Jika Anda harus melakukan estimasi back-of-the-serbet untuk persyaratan satu baris dengan baik ... tidak ada yang bisa sangat membantu Anda. Sayangnya banyak toko bekerja dengan cara ini hampir sepanjang waktu.


1

Daripada menulis buku tentang itu, saya hanya akan menawarkan sedikit saran tentang cara menggunakan metode estimasi "mogok":

  • Hancurkan tugas Anda menjadi tugas-tugas komponen yang lebih kecil. Perkirakan setiap tugas sebaik mungkin.

  • Tambahkan tugas untuk perencanaan dan desain (yang mencakup apa yang Anda lakukan sekarang.) Perkirakan.

  • Jika Anda belum memilikinya, tambahkan tugas untuk "menyatukan tugas." Tugas ini mungkin tampaknya tidak bermanfaat pada awalnya. Namun, ketika Anda menggunakan metode estimasi "jebol" ini, selalu ada hal-hal yang memakan waktu untuk melakukan itu "jatuh di antara tugas" dan bahwa "menyatukan tugas-tugas." Yang ini bisa sulit untuk diperkirakan. Mencoba yang terbaik.

  • Tambahkan tugas untuk pengujian dan dokumentasi. Tugas Anda mungkin tidak memerlukan banyak pengujian dan dokumentasi, tetapi Anda setidaknya harus meluangkan sedikit waktu untuk memikirkannya.

  • Jumlahkan taksiran tugas untuk mendapatkan taksiran keseluruhan.

  • Silakan gandakan estimasi total dengan dua ††. Ini akan memberi Anda waktu pengisi untuk:

    1. Selesaikan hal-hal yang Anda abaikan dalam daftar tugas asli Anda
    2. Selesaikan hal-hal yang tidak mungkin Anda ketahui sampai sedang berlangsung
    3. Masukkan umpan balik dari orang lain, dan buat perubahan
    4. Terganggu oleh hal-hal lain yang terjadi di sekitar Anda, seperti rapat
    5. Selesaikan lebih awal dari perkiraan lebih sering daripada di belakangnya

Dan yang terakhir, tetapi tidak kalah pentingnya, jangan takut untuk membuat sketsa perkiraan untuk diri Anda yang mungkin benar-benar salah. Kadang-kadang hanya membuat sketsa semuanya, tidak peduli seberapa berpotensi sangat tidak akurat, dapat membantu Anda memulai di jalur untuk mendapatkan pengertian yang lebih baik untuk apa yang terlibat.

†† Ketika Anda mendapatkan pengalaman yang semakin banyak, "faktor fudge" ini dapat disesuaikan dengan gaya pribadi Anda, dan lingkungan kerja Anda.


1

Formula yang berfungsi saat bekerja untuk diri saya sendiri:

  1. lakukan penguraian todo's ke 1 - 4 jam granularity. Saya menemukan bahwa saya biasanya akurat dengan ini

  2. the 'unknowns factor': Kalikan dengan faktor 2 yang dinaikkan ke jumlah yang tidak diketahui. Yaitu jika Anda ingin mengembangkan aplikasi couchdb, tetapi sekarang tahu apa-apa tentang javascript dan http .. tambahkan 2 ^ 2 sebagai faktor mult.

  3. context-switch-factor: kelipatan 1,5 jika Anda akan bekerja di lingkungan yang sempurna (di rumah di sudut studi dll), atau 2,5 jika Anda akan bekerja di lingkungan yang tidak sempurna (kantor / tempat ramai dll)

Saya menemukan ini berada dalam +/- 20% dari waktu yang sebenarnya diambil !!


0

Pelajari bias Anda sendiri. Jika taksiran terakhir Anda terlalu rendah dengan faktor dua, lain kali, gandakan taksiran awal Anda. (Tentu saja, hukum Hofstadter membuatnya sulit untuk melakukan itu dengan benar ...)

Itu juga selalu merupakan ide yang baik untuk mengingat berapa banyak pekerjaan yang dibutuhkan setelah rilis awal dari pekerjaan sebelumnya, dan menambahkannya ke perkiraan berikutnya. Misalnya, tugas terakhir Anda membutuhkan waktu 2 bulan untuk diselesaikan, tetapi setelah ditayangkan, dukungan, perbaikan terbaru, dan perubahan tambahan dikenakan biaya satu bulan lagi, jadi, perkirakan waktu berikutnya 3 bulan untuk tugas yang sama.


0

Untuk pembuka, baca "Ekonomi Rekayasa Perangkat Lunak", oleh Barry Boehm, dan "Proyek Perangkat Lunak Pengendali", oleh Tom DeMarco. Setelah Anda membaca dan mencerna keduanya, baca "Perkiraan Biaya Perangkat Lunak Dengan COCOMO 2", oleh Barry Boehm.

Untuk apa yang harus saya katakan selanjutnya, itu akan membantu Anda BANYAK untuk mengambil kelas probabilitas dan statistik, bahkan buku resep dasar.

Tidak ada perkiraan yang sempurna. Ada beberapa kemungkinan datang lebih awal, dan beberapa kemungkinan datang terlambat. Model COCOMO rinci asli Boehm memberikan prediksi yang ternyata berada dalam 30% dari hasil aktual, lebih baik dari 60% dari waktu. Itu jauh lebih baik daripada yang biasa ketika dia menulis dan menerbitkan buku itu.

Ketika Anda mengambil tebakan terbaik Anda (dan hanya itu perkiraannya), Anda menyertakan probabilitas tersebut. Jika Anda menarik perkiraan, Anda meningkatkan kemungkinan bahwa Anda akan datang terlambat. Jika Anda meningkatkan taksiran, Anda meningkatkan kemungkinan bahwa Anda akan datang lebih awal atau selesai tepat waktu. Berapa banyak Anda menariknya atau membiarkannya mengontrol bagaimana probabilitas berubah, dan harus selalu bergantung pada hukuman karena awal atau terlambat. (Masukkan cerita horor di sini - dan sudah ada BANYAK dari mereka selama bertahun-tahun!)

DeMarco membahas hal ini sampai batas tertentu. Dia juga menunjukkan bahwa ada "wilayah mustahil": beberapa jadwal terlalu ketat untuk dibuat, tidak peduli apa pun jenis kepahlawanan yang dicoba.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.