Saya seorang pengembang junior dan saya merasa sulit untuk memperkirakan berapa banyak waktu yang dibutuhkan untuk menyelesaikan proyek perangkat lunak yang lebih besar. Saya tahu cara menyusun arsitektur secara umum, tetapi sulit bagi saya untuk mengetahui detail apa yang harus saya lakukan dan masalah apa yang harus saya pecahkan. Jadi sulit untuk memperkirakan berapa banyak waktu yang dibutuhkan untuk menyelesaikan proyek yang lebih besar, karena saya tidak tahu masalah apa yang harus saya selesaikan dan berapa lama untuk menyelesaikannya.
Bagaimana saya menjelaskan hal ini kepada orang yang bukan pengembang perangkat lunak ?
Jawaban:
Anda bisa memintanya untuk memperkirakan berapa lama yang dibutuhkan untuk mengakses beberapa lokasi yang jauh di sudut dunia yang tidak berpenghuni. Sebagai contoh ekstrem, mari kita pilih beberapa puncak yang kurang diketahui di Himalaya, di mana sangat sedikit (jika ada) orang yang pernah naik. Dia akan membutuhkan banyak persiapan dan latihan sebelum memulai perjalanan, ditambah banyak izin, yang masing-masing dapat menunda perjalanan selama berbulan-bulan hingga bertahun-tahun ... dan tim pendukung yang baik ... kemudian sekali di atas bukit Kemiringan, dia perlu menunggu dan berdoa untuk cuaca yang baik untuk mulai mendaki ke puncak ... dll. Sebagian besar dari ini sulit untuk diperkirakan, bahkan dengan pengalaman sebelumnya.
Dan intinya adalah: setiap proyek perangkat lunak sedikit seperti mendaki gunung baru, di mana tidak ada yang pernah ada sebelumnya, jadi tidak ada yang memiliki pengalaman langsung sebelumnya. Pengembang berpengalaman mungkin telah mengumpulkan pengalaman pada proyek yang kurang lebih serupa , tetapi akan selalu ada elemen dan kejutan baru - jika tidak, jika proyek perangkat lunak persis seperti beberapa proyek sebelumnya, sama sekali tidak ada gunanya melakukannya .
sumber
Sudahkah Anda menjelaskan hal itu kepada orang tersebut? Anda adalah insinyur perangkat lunak profesional, sehingga orang yang Anda bangun perangkat lunak harus mempertimbangkan pengetahuan dan umpan balik Anda ketika datang ke desain dan implementasi sistem perangkat lunak.
The Cone Ketidakpastian mungkin titik yang baik mulai. Proyek perangkat lunak sulit untuk diperkirakan sampai lebih banyak rincian diketahui, yang terjadi kemudian dalam proyek. Selain itu, perubahan persyaratan juga akan mengubah perkiraan. Perkiraan awal Anda di awal proyek akan memiliki sejumlah besar variabilitas.
Anda mungkin tertarik pada teknik estimasi lain juga. Anda menyebutkan bahwa Anda hanya pengembang junior. Secara umum, pengembang yang lebih berpengalaman memiliki kemampuan yang lebih baik untuk memperkirakan karena mereka telah melihat lebih banyak masalah, menyelesaikannya, dan (mudah-mudahan) melacak perkiraan terhadap waktu aktual. Anda bisa memanfaatkan ini menggunakan teknik estimasi seperti wideband delphi atau perencanaan poker .
Sebagai pengembang junior, mulailah melacak perkiraan dan waktu aktual sekarang. Anda mungkin tertarik membaca tentang Proses Perangkat Lunak Pribadi yang dikembangkan di Institut Rekayasa Perangkat Lunak. Buku-buku PSP inti adalah A Disiplin untuk Rekayasa Perangkat Lunak , PSP: Proses Peningkatan Diri untuk Insinyur Perangkat Lunak , dan Pengantar Proses Perangkat Lunak Pribadi . Saya percaya bahwa Pengantar Proses Perangkat Lunak Pribadi akan mencakup topik yang menurut Anda paling bermanfaat. Saya pikir itu umumnya berlebihan bagi sebagian besar pengembang, tetapi memiliki beberapa ide bagus dan praktik baik yang dapat ditarik dan digunakan untuk meningkatkan produktivitas pribadi dan mengasah berbagai keterampilan (termasuk estimasi) yang akan terus Anda gunakan selama karier Anda.
Jika Anda akan melakukan lebih banyak pekerjaan dalam estimasi, saya akan sangat merekomendasikan dua buku Steve McConnell: Estimasi Perangkat Lunak: Demistifying the Black Art (berfokus pada estimasi sebagai seni dan sains) dan Pengembangan Cepat: Taming Wild Software Schedule (perangkat lunak umum proses rekayasa dan topik manajemen proyek).
sumber
Lihat literatur. Ada tumpukan material yang kompleks dan sering kali saling bertentangan, yang, sebagaimana dibuktikan oleh praktik (percobaan), tidak berfungsi seperti yang diharapkan. Setidaknya para akademisi terombang-ambing oleh tumpukan buku.
Harus dibaca: http://en.wikipedia.org/wiki/The_Mythical_Man-Month
sumber
Cari tahu apa yang mereka rencanakan untuk lakukan dengan perkiraan ini. Dalam pikiran mereka, mereka ingin tahu apakah itu akan memakan waktu berbulan-bulan atau bertahun-tahun dan Anda mencoba untuk mendapatkan jam yang tepat (Typical Engineer).
Lihat apakah Anda dapat mengerjakan sepotong proyek dan kemudian mengumpulkan perkiraan yang lebih baik jika diperlukan.
Jika mereka terus mendorong, Anda akan dipaksa untuk merinci sebanyak mungkin tugas yang Anda bisa dan menerapkan kerangka waktu. Beri tahu mereka bahwa Anda akan memberi tahu mereka segera setelah Anda melihat sesuatu yang dapat memengaruhi estimasi dan melakukan penyesuaian. Orang biasanya berusaha menghindari kejutan.
sumber
Saya telah bertemu orang-orang yang mengklaim mereka dapat memperkirakan perangkat lunak, tetapi saya tidak tahu bagaimana mereka melakukannya. Tak satu pun dari mereka yang bisa menjelaskan bagaimana mereka melakukannya.
Sebagai konsultan, klien saya sering meminta saya untuk bekerja berdasarkan penawaran tetap. Karenanya saya perlu memperkirakan sehingga saya dapat menyiapkan tawaran yang realistis. Saya tidak pernah berhasil dalam hal ini. Orang akan berpikir saya akan menawar sesering yang saya underbid, tapi itu tidak pernah terjadi. Hasilnya adalah saya sering kehilangan banyak uang pada kontrak saya, dan akhirnya mendapatkan penghasilan jauh lebih sedikit daripada yang saya lakukan jika saya bekerja untuk sebuah perusahaan sebagai karyawan tetap.
Saya telah mencari buku yang akan mengajarkan saya cara memperkirakan perangkat lunak selama bertahun-tahun, tetapi saya belum menemukannya.
Adapun menjelaskan hal ini kepada seseorang yang bukan pembuat kode. Anda dapat menunjukkan bahwa tidak ada seorang pun di industri ini yang secara konsisten dapat memenuhi perkiraan mereka. Itu terjadi setiap saat bahwa produk perangkat lunak baru diumumkan sebelumnya, hanya untuk mengirim berbulan-bulan atau bertahun-tahun setelah tanggal yang awalnya diumumkan.
Jika perusahaan besar seperti Microsoft tidak dapat memperkirakan bagaimana memperkirakan waktu yang dibutuhkan untuk memproduksi produknya sendiri, bagaimana saya bisa?
Apakah saya dibayar per jam atau berdasarkan pekerjaan, klien saya selalu mengharapkan saya untuk memberikan perkiraan ini. Saya tidak tahu bagaimana mereka mengharapkan saya untuk memproduksinya ketika estimasi seperti itu tidak diajarkan di mana pun, dan saya tidak punya dasar rasional untuk estimasi saya.
sumber
Perkiraan waktu keseluruhan proyek biasanya dilakukan oleh manajer proyek, bukan programmer.
Anda dapat membangun argumen berdasarkan fakta bahwa manajer proyek memiliki daftar lengkap tugas yang diperlukan. Tanpa daftar ini, estimasi apa pun akan menjadi tebakan 'buruk'.
Juga, waktu tergantung pada banyak faktor seperti berapa banyak orang yang tersedia dan ruang lingkup persyaratan, yang Anda tidak katakan Anda miliki. Arsitektur saja tidak cukup.
sumber
Poin lain yang bisa Anda sampaikan adalah bahwa rekayasa perangkat lunak masih dalam masa pertumbuhan dibandingkan dengan bidang teknik lainnya, dan belum cukup matang untuk muncul teknik pengembangan yang dapat diperkirakan.
Rekayasa perangkat lunak juga terus menerus berubah. Pada saat suatu teknologi telah cukup sekitar untuk dianggap matang, sering ditinggalkan demi beberapa teknologi baru. Itu mencegah siapa pun mendapatkan pengalaman yang cukup dengan teknologi apa pun untuk dapat menghasilkan perkiraan yang andal.
Bandingkan ini dengan estimasi konstruksi. Itu masalah yang sangat dipahami, bukan hanya karena kontrak diberikan berdasarkan tawaran, tetapi karena manusia telah membangun sesuatu sejak awal peradaban.
sumber