Ini adalah pepatah yang cukup umum bahwa menambahkan lebih banyak programmer ke proyek akhir akan memperburuk keadaan. Kenapa ini?
Ini adalah pepatah yang cukup umum bahwa menambahkan lebih banyak programmer ke proyek akhir akan memperburuk keadaan. Kenapa ini?
Jawaban:
Setiap pengembang baru harus diperkenalkan dengan basis kode dan proses pengembangan yang tidak hanya memakan waktu orang baru tetapi juga membutuhkan bantuan dari [a] pengembang senior [s] (membimbing mereka melalui proses pembangunan, menjelaskan proses pengujian, membantu mereka dengan jebakan di basis kode, ulasan kode yang lebih rinci, dll) .
Oleh karena itu, semakin banyak pengembang baru yang Anda tambahkan ke proyek, semakin banyak waktu yang dihabiskan untuk membawa mereka ke titik di mana mereka benar-benar dapat berkontribusi pada proyek.
Selain jawaban lain: Faktor lain yang perlu dipertimbangkan adalah komunikasi.
Kasus terburuk untuk jumlah saluran komunikasi di tim (yang tidak biasa), adalah grafik lengkap . Seperti yang dapat Anda bayangkan, menambahkan hanya dalam 1 pengembang dapat meningkatkan banyak saluran komunikasi. Dengan metode komunikasi yang lebih ramping, dampaknya kurang ... tetapi masih bertambah.
Masalah yang dikutip dalam buku yang awalnya disahkan undang-undang ini, The Mythical Man-Month , adalah komunikasi. Dia memulai dengan mengatakan:
Pria dan bulan adalah komoditas yang dapat dipertukarkan hanya ketika sebuah tugas dapat dipartisi di antara banyak pekerja tanpa komunikasi di antara mereka. Ini berlaku untuk menuai gandum atau memetik kapas; bahkan tidak kira-kira benar pemrograman sistem.
Dia menyebutkan pelatihan sebagai bagian dari masalah:
Beban komunikasi tambahan terdiri dari dua bagian: pelatihan dan komunikasi antar. Setiap pekerja harus dilatih dalam teknologi, tujuan dari upaya, strategi keseluruhan, dan rencana kerja. Pelatihan ini tidak dapat dipartisi, jadi bagian pekerjaan ini bervariasi secara linier dengan jumlah pekerja.
... tetapi perhatikan bahwa komunikasi jauh merupakan faktor yang lebih besar :
Karena pembangunan perangkat lunak secara inheren merupakan upaya sistem - latihan dalam hubungan timbal balik yang kompleks - upaya komunikasi sangat baik, dan dengan cepat mendominasi penurunan waktu tugas individu yang disebabkan oleh partisi. Menambahkan lebih banyak pria memperpanjang, bukan mempersingkat, jadwal.
Perlu juga dicatat bahwa Fred Brooks (penulis) memang memiliki latar belakang untuk mengetahui apa yang dia bicarakan. Sebagian besar buku ini didasarkan pada pengalamannya mengelola proyek OS / 360 IBM. Meskipun berpuluh-puluh tahun penganutnya mengabarkan segala macam metode manajemen yang "ditingkatkan", dan beberapa bahkan muncul dengan nama-nama keren (eXtreme, Agile, Scrum, dll.) Ketika Anda membahasnya, sedikit esensi 1 tampaknya telah berubah sejak itu.
1 Untuk definisi "esensi", lihat penulis yang sama "No Silver Bullet: Essence and Accident in Software Engineering", yang disertakan dalam Edisi Ulang Tahun ke - 20 The Mythical Man-Month .
Ini bukan hanya pepatah; itu bisa diverifikasi. Lihatlah Brooks ' The Mythical Man-Month .
Berikut adalah beberapa pemikiran tentang masalah ini ...
sekarang, menambahkan sumber daya baru untuk pengujian mungkin bukan ide yang buruk ... itu mungkin mempercepat proses pengujian (jika kasus pengujian Anda ditulis dengan baik), dan ya menggunakan alat pengujian akan membantu juga.
Karena pemrograman bukanlah pekerjaan lini produksi dasar. Memperoleh kecepatan pada proyek perangkat lunak membutuhkan waktu. Orang-orang baru perlu mengajukan banyak pertanyaan yang mengarah pada produktivitas negatif (yaitu orang baru belajar, orang tua mengajar mereka -> tidak ada pekerjaan aktual yang dilakukan).
Untuk menyederhanakannya, bayangkan proyek satu orang yang relatif sederhana yang dijadwalkan berlangsung selama 1 minggu: pada hari Kamis, Anda menyadari bahwa itu tidak akan selesai tepat waktu, bahwa itu akan membutuhkan satu programmer lebih seperti 6-7 hari sebagai gantinya dari 5. Jika Anda menambahkan programmer lain pada saat itu, mereka harus bekerja dengan programmer1 setidaknya selama beberapa jam atau sekitar satu hari, ajukan banyak pertanyaan untuk mempercepat, dll. Anda mungkin tidak akan mendapatkan setiap produktivitas positif bersih untuk sisa minggu ini. Programmer baru kemungkinan akan memperkenalkan beberapa bug tambahan juga (karena mereka tidak akan tahu kode yang ada serta programmer1), sehingga akan meledakkan siklus implementasi dan pengujian satu atau dua hari lagi. Proyek ini akan dengan mudah berlangsung dua minggu penuh, bukan yang asli!
Fred Brooks menulis seluruh buku "The Mythical Man-Month" yang menjawab pertanyaan ini.
Ini versi quick-n-dirty:
1) Ada batasan seberapa banyak Anda dapat memecah proyek menjadi bagian-bagian yang berbeda untuk ditugaskan ke lebih banyak programmer.
2) Memisahkan proyek ke lebih banyak orang meningkatkan jumlah komunikasi yang diperlukan untuk mengoordinasikan semua bagian aplikasi. Lebih banyak komunikasi = Lebih Banyak Pekerjaan.
3) Untuk setiap orang yang Anda tambahkan ke proyek Anda menambahkan lebih dari satu saluran komunikasi yang harus dinavigasi ke tim. Jumlah ini tumbuh secara geometris dan meningkatkan jumlah komunikasi yang harus terjadi. Lebih banyak komunikasi = Lebih banyak pekerjaan.
4) Ada "J-Curve" ketika Anda menambahkan setiap anggota tim. Artinya, sumber daya produktif yang ada harus menghabiskan waktu untuk mempercepat orang-orang baru yang seharusnya mereka habiskan bekerja di proyek. Pada akhirnya Anda dapat meningkatkan kapasitas, tetapi untuk sementara memperlambat proyek. Semakin dalam proyek semakin banyak yang harus dipelajari, sehingga semakin jelas pengaruhnya.
Faktor lain yang belum saya lihat disebutkan adalah bahwa beberapa tugas perlu dilakukan dalam urutan tertentu. Anda tidak dapat melakukan tugas 4 sampai tugas 3 selesai karena tergantung pada 3. Tidak ada gunanya mempekerjakan seseorang untuk melakukan tugas 4 pada saat yang sama seseorang melakukan tugas 3. Seringkali pada akhir proyek , tugas-tugas yang perlu diselesaikan terlebih dahulu adalah tugas yang tersisa.
Mereka juga sering merupakan beberapa tugas paling kompleks yang perlu dilakukan, tugas yang membutuhkan pemahaman terbaik dari seluruh desain untuk menghindari melanggar apa yang telah diselesaikan. Mereka juga biasanya membutuhkan pengetahuan domain bisnis yang paling luas. Saya mungkin setelah mengerjakan proyek selama berbulan-bulan dapat melakukan tugas dalam seminggu atau kurang. Seseorang yang baru akan menghabiskan lebih dari seminggu untuk mempercepat (dan menarik saya dari tugas-tugas saya untuk mendapatkan kesempatan yang baik untuk menjawab pertanyaan-pertanyaan) dan kemungkinan bahkan jika sangat terampil membutuhkan waktu lebih lama untuk melakukan tugas itu. Bukan karena dia tidak kompeten tetapi karena tidak terbiasa dengan struktur sebenarnya dari proyek atau database backend.
Pepatah yang selalu berhasil bagi saya adalah Anda tidak bisa mendapatkan sembilan wanita untuk menghasilkan bayi dalam satu bulan.
Saya juga menyarankan "Peopleware" oleh DeMarco dan Lister.
Dan "The Deadline" oleh DeMarco menyajikan ini, dan sejumlah penyakit manajemen proyek perangkat lunak lainnya dan kekeliruan dengan cara yang ringan dan sangat mudah dibaca.
Ini juga menggali dinamika orang yang melakukan pekerjaan proyek / tim, dan masuk ke beberapa detail tentang hanya BAGAIMANA hal-hal seperti komunikasi dan pengantar menghabiskan waktu kerja tim yang tersedia.
Buku-buku ini cukup murah, saya sarankan Anda mendapatkannya (Amazon atau The Book Depository memilikinya) dan baca. Jawaban singkat di sini tidak bisa benar-benar adil untuk pertanyaan yang diajukan.
Karena tidak ada yang meluangkan waktu untuk memiliki proses yang dipikirkan dengan matang, terencana, teruji untuk: merekrut, melatih, mengembangkan dan mengawasi programmer, apalagi menyatukan mereka dengan cepat pada proyek tertentu.
Jika Anda mengelola tim pengembang, Anda harus memiliki beberapa kontak saat ini dari orang-orang yang ingin Anda pekerjakan jika Anda memiliki pembukaan. Bergabunglah dengan grup pengembang.
Seberapa cepat Anda bisa mendapatkan setup mesin pengembangan baru dan siap untuk pergi?
Pernahkah Anda menguji dokumentasi dan spesifikasi proyek Anda dengan menunjukkannya kepada pengembang di proyek lain? Apakah mereka melihatnya dan menentukan bahwa mereka dapat mulai mengerjakan proyek jika perlu?
Seberapa up to date jadwal proyek?
Menabung untuk hari hujan karena ketika sebuah proyek jatuh di belakangnya lebih seperti badai.
Selain masalah komunikasi (yang saya pikir semua jawaban lain bicarakan), juga sangat mungkin bagi seseorang yang ditambahkan ke proyek untuk membuat bug, karena mereka belum mengetahui kodenya dengan baik.
Setiap kali saya ditambahkan ke proyek, saya selalu berusaha sangat keras untuk tidak merusak barang-barang. Ini berarti saya lebih lambat memperbaiki hal-hal pada awalnya.
Saya ingin menunjukkan sesuatu yang sama sekali diabaikan sejauh ini oleh jawaban yang lain.
Pada saat orang ditambahkan ke proyek yang terlambat, biasanya banyak yang salah di seluruh organisasi. Manajemen dan klien tidak senang. Orang-orang telah ditekan untuk melanjutkannya. Semuanya cukup tegang.
Sekarang bayangkan Anda berada di tim itu. Jelas ini bukan salahmu. Perencanaan (tidak ada yang menjadi milik Anda) terlalu optimis. Semua keputusan yang salah dibuat tanpa berkonsultasi dengan Anda. Anda mencoba untuk melakukan yang terbaik dan tiba-tiba sekelompok orang baru sedang didorong. Pesan apa yang disampaikannya?
Orang-orang di lantai atas jelas kehilangan kepercayaan pada Anda. Mereka memanggil bocah-bocah besar untuk menebus apa yang Anda buat kacau.
Apakah Anda masih termotivasi untuk membuat ini sukses? Atau ... apakah Anda akan semakin frustrasi dan apakah Anda lebih suka melihat semuanya hancur?
Gunakan waktumu :-).