Saya suka dan meningkatkan jawaban mcottle, tetapi saya ingin membahas beberapa dinamika dan argumen lain yang belum dijawab oleh jawaban lain.
Pertama, tersirat dalam jawaban mcottle adalah kenyataan bahwa di bawah tingkat keterampilan tertentu, beberapa masalah tidak mungkin terjadi. Sayangnya, cara Anda mengetahuinya adalah dengan tim Anda yang mencoba dan gagal, itu sangatmahal. Setelah gagal, ada dua pelajaran yang mungkin untuk dipelajari dari ini. Satu pilihan adalah Anda belajar bahwa Anda membutuhkan lebih banyak pengembang yang kompeten dan karenanya Anda merekrut mereka dan Anda menyelesaikan proyek secara signifikan melebihi anggaran dan jadwal, tetapi setidaknya Anda siap di masa depan. Pilihan lainnya adalah bahwa proyek seperti itu "terlalu sulit" untuk tim Anda dan hal-hal seperti itu tidak boleh dicoba di masa depan, yaitu Anda menyerah pada proyek dan secara efektif melakukan hal serupa. Tentu saja, ini jarang akan disebut sebagai "kami terlalu bodoh untuk melakukan ini", tetapi sebaliknya akan dirasionalisasi sebagai "sistem kami sangat kompleks" atau "kami memiliki banyak kode warisan" atau beberapa lainnya. Pandangan yang terakhir ini dapat secara signifikan membelokkan perspektif perusahaan tentang apa yang mungkin dan berapa lama / mahal pembangunan seharusnya. "
Satu pertanyaan adalah, apa sebenarnya rencana perusahaan Anda? Oke, mereka akan menyewa programmer junior yang murah. Tiga tahun berlalu, sekarang bagaimana? Apa yang mereka lakukan dengan pengembang yang telah bersama mereka selama tiga tahun itu? Apakah mereka tidak pernah memberinya kenaikan gaji? Opsi di sini adalah sebagai berikut:
- Mereka memberikan kenaikan gaji secara kompetitif untuk mempertahankan karyawan, dalam hal ini mengapa mereka memiliki masalah dalam membayar tarif pengembang senior sekarang? Saya akan kembali ke sini.
- Mereka memiliki tingkat stagnan yang berarti mereka pada akhirnya akan "menurunkan" karyawan yang tidak memiliki dorongan dan / atau keterampilan.
- Mereka lebih aktif menghapus lebih banyak karyawan senior.
Dua kasus kedua menyiratkan banyak turn-over karyawan yang berarti hilangnya pengetahuan perusahaan dan membayar untuk meningkatkan karyawan secara terus menerus. Dalam kasus kedua, Anda pada dasarnya memilih pengembang yang buruk sehingga biaya akan meningkat dalam bentuk jadwal yang meningkat. Cara ini akan bermain adalah semuanya baik-baik saja di proyek X sampai tiba-tiba Jim pergi, yang merupakan salah satu pengembang yang lebih baik, karena dia belum mendapatkan kenaikan dalam dua tahun, sekarang proyek "dimengerti" akan memakan waktu lebih lama karena Anda perlu merekrut dan melatih pengembang junior baru yang (mungkin) tidak akan sebaik Jim. Ini adalah bagaimana Anda mengkalibrasi ulang harapan.
Bahkan dalam kasus kenaikan gaji sedang disediakan, jika semua yang Anda miliki adalah pengembang junior di mana dan bagaimana mereka seharusnya belajar? Anda pada dasarnya berharap bahwa salah satu dari mereka akan mempelajari praktik-praktik yang baik dengan sendirinya terlepas dari lingkungan kerja mereka, dan pada akhirnya membimbing orang lain (sebagai lawan pergi ke padang rumput yang lebih hijau). Akan lebih masuk akal untuk "mengunggulkan pompa" dengan beberapa pengembang yang baik. Kemungkinan besar Anda akan mengembangkan budaya Pakar Pemula . Hasilnya adalah Anda akan membayar tingkat pengembang senior kepada orang-orang yang hanya sedikit lebih baik daripada pengembang junior dan beracun secara budaya.
Satu manfaat, khususnya, pengembang yang sangat baik, yang saya kaget tidak ada orang lain sebutkan adalah mereka dapat dengan mudah menjadi faktor multiplikasi . Ini mungkin terjadi bahwa pengembang junior dan pengembang senior mengambil jumlah waktu yang sama untuk membuat tabel. Namun, pengembang yang baik tidak akan melakukan itu. Mereka akan membuat generator tabel yang mengurangi waktu bagi semua orang untuk membuat tabel. Sebagai alternatif / tambahan, mereka akan menaikkan plafon apa yang mungkin bagi semua orang . Misalnya, pengembang yang menerapkan kerangka kerja Google MapReduce kemungkinan sangat berkualitas, tetapi bahkan jika penggunaMapReduce benar-benar tidak dapat membuat versi terdistribusi secara besar-besaran dari algoritma mereka sendiri, mereka sekarang dapat dengan mudah dengan MapReduce. Seringkali dinamika ini tidak terlalu mencolok. Misalnya, kontrol sumber, pengujian, dan praktik penyebaran yang lebih baik membuat semua orang lebih baik, tetapi bisa lebih sulit untuk dilacak ke orang tertentu.
Untuk berdebat dengan pihak lain sebentar, mungkin atasannya benar. Mungkin pengembang yang lebih berpengalaman tidak diperlukan. Namun, jika itu masalahnya, tampaknya pengembangan bukanlah bagian penting dari perusahaan. Dalam hal ini, saya hanya akan menghilangkan pengembang sepenuhnya dan menggunakan perangkat lunak di luar rak atau menyewa kontraktor sesuai permintaan. Mungkin perlu ditelusuri mengapa mereka tidak hanya menggunakan kontraktor daripada tim internal. Jika Anda akan memiliki banyak churn karyawan, maka kontraktor peningkatan seharusnya tidak menjadi masalah.