Bagaimana saya harus mengelola tim dengan tingkat keterampilan yang berbeda?

15

Saya akan mengerjakan proyek perangkat lunak dengan beberapa teman saya, dan saya telah ditunjuk sebagai pimpinan teknis. Tidak satu pun dari orang-orang ini adalah programmer yang buruk sama sekali, tetapi saya memiliki pengalaman yang jauh lebih banyak daripada mereka. Saya harus bisa mendistribusikan pekerjaan di antara semua orang di tim, sementara juga memastikan bahwa kami tidak menginjak kaki satu sama lain; bahwa mereka memenuhi standar kualitas dan skalabilitas yang relatif tinggi yang kita butuhkan untuk membuat proyek ini berhasil, tanpa mengharuskan saya untuk meninjau semua yang mereka lakukan.

Bagaimana saya harus menjaga standar sambil menghindari manajemen mikro? Apakah cukup untuk membuat beberapa diagram, menjadwalkan beberapa ulasan kode, dan percaya bahwa saya akan dapat memperbaiki apa pun yang mungkin mereka hancurkan, atau haruskah saya memilih rute TDD dan menulis tes eksplisit untuk memuaskan tim?

Jon Purdy
sumber
11
Apakah ada tim dengan tingkat keterampilan yang sama?
P.Brian.Mackey
@ P.Brian.Mackey: Maksud saya sangat berbeda.
Jon Purdy
@ Jon: Saya sangat berharap Anda tahu apa yang Anda hadapi. Pastikan mereka memiliki "daging babi" dalam kesepakatan sejak awal (!). Saya mendapatkan perasaan yang samar-samar bahwa Anda membutuhkan seseorang dengan banyak pengalaman di sana bersama Anda, jika, sepertinya, mereka bahkan tidak dapat menulis unit-test dan (!) Belum menemukan cara melakukannya sendiri: itu mengarah saya berpikir bahwa mungkin Anda berlebihan menyatakan keterampilan mereka. Tidak perlu dikatakan, mengasumsikan lebih banyak kompetensi daripada yang terjadi bukanlah teknik manajemen proyek yang baik.
Henrik
@ Henrik: Saya tahu apa yang saya hadapi, saya hanya tidak punya banyak pengalaman dalam mengelola pengembang lain dan ingin mendapatkan saran tentang cara memastikan semuanya berjalan lancar. Saya memiliki kepercayaan penuh pada kemampuan mereka, dan saya pikir orang-orang membaca lebih banyak hal negatif tentang pertanyaan saya daripada yang sebenarnya saya taruh di sana. Saya baru saja memasuki pemrograman selama lebih dari separuh hidup saya, jadi saya sudah melakukan banyak kesalahan yang belum dialami oleh orang-orang ini selama 2-3 tahun.
Jon Purdy
Apakah untuk perusahaan atau proyek sampingan?
Marcie

Jawaban:

10

Anda harus meninjau beberapa kode mereka dan membiarkan mereka meninjau satu sama lain. Bukannya Anda ingin menjadi Polisi Check-in, tetapi ingin memberikan umpan balik sesering mungkin. Menjadi reviewer bisa memperkuat pemahaman mereka. Biarkan mereka meninjau kode Anda juga. Jadilah modelnya.

Catatan Samping: seharusnya tidak ada kejutan selama review anual.

JeffO
sumber
2
+1 untuk "Jadilah model." Itulah manfaat terbesar yang saya lihat dalam ulasan kode: belajar dari kelicikan orang lain. Itu, dan menangkap cacat sesekali.
Peter K.
1
Alat untuk meninjau kode sambil menjadi "api penyucian" adalah [ code.google.com/p/gerrit/]
Henrik
9

Di atas segalanya : komunikasikan harapan dan desain Anda dengan berbagai cara sebanyak mungkin. Diagram baik untuk sebagian orang; antarmuka yang didefinisikan bekerja untuk orang lain; pemrograman pasangan juga berfungsi; ulasan kode formal juga dapat membantu beberapa orang.

Saya juga merekomendasikan menggunakan otomatisasi sebanyak mungkin:

  • Dapatkan tim untuk menggunakan alat seperti NDepend atau Resharper jika Anda berada di ranah .Net. Tweak aturan standar jika Anda tidak menyukainya.
  • Otomatiskan pengujian Anda sebanyak mungkin.

Sulit untuk berdebat dengan kasus pengujian yang gagal atau alat inspeksi otomatis, asalkan mereka diatur dengan baik.

Peter K.
sumber
3
Pemrogram yang salah mungkin menyiapkan kasus uji yang buruk?
JeffO
1
Alat-alat seperti Resharper adalah def. rapi, tetapi tentu saja tidak gratis. Pengujian otomatis memerlukan penulisan kode yang dapat diuji yang mungkin menetapkan persyaratan yang tidak praktis jika tingkat keterampilannya tidak setara.
P.Brian.Mackey
@ Jeff: Mereka bukan programmer yang buruk, kami hanya memiliki latar belakang yang berbeda, dan saya memiliki tahun pada mereka. Agaknya saya dan orang yang paling berpengalaman akan menulis tes, jika ada.
Jon Purdy
@ Jeff O: Kemudian keluarkan mereka dari tim.
Peter K.
@ P.Brian.Mackey: Tidak ada spesifikasi alat gratis dalam pertanyaan. Jika kode tidak dapat diuji, keluarkan dari tim. Coba tunjukkan kepada mereka cara menulis kode yang dapat diuji, dan jika mereka tidak membuat perbaikan, keluarkan mereka dari tim.
Peter K.
5

Jika Anda benar-benar bekerja dengan beragam tingkat keterampilan pada proyek yang sama, akan ada beberapa masalah. Pertanyaannya adalah kapan Anda berurusan dengan mereka? Apakah mereka akan menulis kode buruk sehingga Anda mungkin lebih baik tidak mendapatkan bantuan mereka? Apakah ini akan menciptakan ketegangan pribadi? Apakah Anda akan mengakhiri pertemanan? Pertanyaan-pertanyaan ini tidak ada yang bisa menjawab kecuali Anda.

Dengan asumsi semua orang akan tetap berada di tim, saya sarankan memecah tugas menjadi potongan-potongan kecil (yang lebih besar pergi ke dudes lebih terampil) dan biarkan pengembang yang paling terampil refactor ketika Anda selesai. Pastikan untuk menjalankan QA dalam interval yang ketat dan teratur. Ini cukup dekat dengan apa yang terjadi dalam kenyataan.

P.Brian.Mackey
sumber
3

Sebisa mungkin, jauhi rumput liar. Di tim mana pun, jika Anda adalah pemimpinnya, Anda perlu menghemat sejumlah bandwidth Anda untuk krisis dan gambaran besarnya. Diagram baik dan standar pengkodean selalu waras, tetapi menyiapkan proses di mana orang memeriksa pekerjaan satu sama lain bahkan lebih baik (pengujian silang, ulasan sejawat, pemrograman pasangan). Tidak semua orang di tim perlu menjadi bintang - tim bersama biasanya dapat mengatasi kelemahan pada individu.

Hal yang saya sarankan adalah Anda menahan keinginan itu, sebanyak mungkin, untuk memberi tahu orang-orang kesalahan apa yang Anda lihat dalam pengkodean mereka - alih-alih, arahkan mereka untuk melihatnya sendiri. Tetap menjadi bagian dari tinjauan kolaboratif pekerjaan pembangunan, tetapi pastikan Anda tidak berkontribusi lebih dari anggota lainnya. Alih-alih, berikan upaya ekstra untuk mendorong orang lain melihat apa yang Anda lihat dan memberikan banyak penjelasan mengapa hal-hal yang Anda lihat penting.

Jangan terlalu khawatir tentang tumpang tindih - di luar pelarian yang masuk akal, Anda dapat meminta anggota tim untuk memeriksa di antara mereka sendiri, dan kemudian memverifikasi bahwa komunikasi telah terjadi. Tim akan dengan cepat mulai memandang satu sama lain sebagai cara untuk mencapai konsensus, dan itu membuat pekerjaan Anda sekitar 20 kali lebih mudah - maka yang harus Anda lakukan adalah menjadi pemutus ikatan ketika area utama tidak setuju.

Kemudian simpan upaya Anda untuk melihat tim secara kolektif. Setiap orang akan memiliki beberapa kekuatan yang luar biasa dan beberapa kelemahan yang menarik. Idealnya, Anda akan mulai melempar pekerjaan pada orang-orang yang sesuai dengan kekuatan mereka sambil tetap memberi mereka kesempatan untuk bekerja melalui kelemahan mereka dengan cara yang tidak menonaktifkan produktivitas tim.

Bintang emas utama kepemimpinan tim adalah membuat orang sadar akan kelemahan mereka sedemikian rupa sehingga mereka termotivasi dan cukup informasi untuk mulai memperbaikinya.

bethlakshmi
sumber
2

Duduk dan diskusikan teknologi dan perangkat yang disetujui semua orang di tim. Beberapa orang mungkin lebih berpengalaman dalam alat yang disepakati daripada yang lain dalam tim, sehingga mereka yang lebih berpengalaman harus mau dan setuju untuk berbagi pengalaman dan pengetahuan dengan yang lain.

Diskusikan, Setuju, Tuliskan, Model dan komunikasikan standar (seperti konvensi penamaan, pengkodean praktik terbaik, dan struktur folder).

Lakukan pengujian terus menerus dan teratur serta pemeriksaan QA. Beri tahu orang tersebut ASAP ketika Anda melihat ketidakkonsistenan.

mauris
sumber
2

Saya akan mengatakan 'dapatkan orang yang paling berpengalaman dalam tim untuk mengaturnya', tetapi sepertinya Anda adalah orang itu.

Jika Anda bisa, bagi proyek menjadi dua tingkat. Application-layer / driver-layer adalah perpecahan yang baik. Bentuk dua subkelompok dalam tim Anda dan buat satu orang di masing-masing bertanggung jawab untuk tingkat itu. Itu bisa bekerja dengan sangat baik.

Pasangkan diri Anda untuk itu. Anda harus meninjau semua yang mereka lakukan, terutama sejak dini. Jika semuanya berjalan dengan lancar, Anda hanya akan melihat kode yang mencolok. Meninjau tidak akan membawa Anda banyak waktu sama sekali, dan itu akan memberi Anda banyak kepercayaan hal-hal berjalan dengan baik. Kemungkinan besar Anda akan menemukan seseorang menggunakan semafor dengan cara yang salah, atau menulis versi mereka sendiri dari fungsi perpustakaan atau kegilaan semacam itu. Pengalaman saya adalah Anda harus menonton kode karena sedang ditulis untuk mengatasi masalah kode sejak awal.

James Crook
sumber
Setuju pada bagian ulasan kode. Anda harus membimbing mereka sedini mungkin.
2

Apa yang biasanya diharapkan dari petunjuk teknis di perusahaan Anda? Saya seorang manajer dan telah berada di tempat ini beberapa kali dan akan melakukannya lagi mulai minggu ini (mempekerjakan pemula dan orang lain untuk bergabung dengan tim yang terdiri dari 20 tahun dan 4 tahun orang yang berpengalaman).

Saya seorang manajer dan bisa menjadi pemimpin teknis (dalam beberapa tahun terakhir, saya telah mengecilkan peran terakhir untuk menumbuhkan kepemimpinan dalam tim. Dalam beberapa kasus, beberapa pemikiran:

  • Mengevaluasi keterampilan dan kelemahan seluruh tim.
  • Buat rencana pertumbuhan - Saat fokus Anda menumbuhkan anggota terlemah, Anda benar-benar harus fokus pada pertumbuhan semua orang sebagai individu dan sebagai tim.
  • Komunikasikan rencana ini dan tetapkan harapan semua orang.
  • Bagikan pembelajaran dan validasi ke seluruh tim. Sementara Anda, sebagai pemimpin, milik saya sendiri singa betina dari pekerjaan itu, membagikan pekerjaan itu akan membantu anggota tim Anda yang lebih senior menjadi pemimpin.
  • Buat lingkaran umpan balik reguler. Bertemu dengan anggota tim untuk mengevaluasi kemajuan dan memberikan umpan balik.
  • Sesuaikan rencana, jika perlu, untuk memastikan kesuksesan.
  • Jika seseorang tidak berolahraga dan tidak akan, bahkan dengan bantuan wajar, bersiaplah untuk mendorong mereka keluar. Ini rumit, tetapi jika Anda telah menetapkan rencana, harapan, dan memberikan umpan balik, Anda akan berada dalam posisi yang jauh lebih baik untuk melakukannya.
  • Mengawasi moral tim. Jenis situasi ini dapat melakukan hal-hal hebat untuk menumbuhkan tim atau memisahkannya. Keterampilan kepemimpinan dan investasi Anda dalam tim akan sangat menentukan hasilnya.
Jim Rush
sumber
1

Coba lihat apa yang masuk ke mendefinisikan "Arsitektur Perangkat Lunak". Membuat modul yang dapat dikembangkan secara terpisah adalah salah satu alasan utama untuk melakukan desain dan analisis di muka. Saya tahu bahwa melakukan jenis pekerjaan ini tidak sesuai gaya, tetapi bekerja dalam semua kasus, berbeda dengan beberapa kasus yang didukung oleh metode pengembangan yang lebih baru.

Celup
sumber
1

Sebagai pengembang paling berpengalaman dalam tim, saya harapkan dari pelatihan Anda yang berat .

Biarkan tim menetapkan pekerjaan untuk diri mereka sendiri menggunakan kanban , dan kemudian habiskan sepanjang hari Anda melakukan pemrograman pasangan dengan masing-masing dari mereka.

Ketika Anda melihat kebiasaan buruk atau sesuatu yang harus mereka sadari, hentikan semuanya dan gambarkan di papan tulis.

Setelah beberapa minggu, Anda akan dapat memperlambat pembinaan yang berat karena keseluruhan keterampilan tim akan mendekati kemampuan Anda.


sumber
1

Ada beberapa daftar berbeda yang akan membuat saya tergoda untuk mengulas dari posisi Anda:

  1. Seberapa baik saya tahu tim ini. Apakah Anda tahu kekuatan dan kelemahan semua orang di tim? Apakah Anda tahu cara mendapatkan yang terbaik dari setiap orang? Apakah Anda tahu cara membagi pekerjaan dengan cara yang relatif adil untuk semua orang? Pertanyaan-pertanyaan semacam itu adalah sesuatu untuk ditanyakan dan dipahami bahwa mungkin ada perubahan dalam daftar ini seiring waktu karena beberapa orang dapat mengembangkan beberapa keterampilan yang dapat mengubah cara pandang mereka. Ketika Anda diangkat, apakah ada harapan bahwa beberapa anggota tim memiliki Anda? Pertanyaan terakhir itu mungkin sulit untuk membuat orang menjawab dengan jujur ​​tetapi itu bisa membantu banyak jika itu dapat diungkapkan dan didiskusikan dengan cara yang berarti tanpa menimbulkan pelanggaran atau dendam yang bisa sangat mudah jika apa yang sedang dibahas sangat pribadi bagi sebagian orang. orang-orang. Jangan mencoba mendapatkan pendapat pribadi dalam rapat kelompok,

  2. Seberapa baik saya mengenal diri sendiri. Elemen apa dari latar belakang Anda yang Anda gunakan untuk mengklaim beberapa otoritas teknis di sini? Apa kekuatan dan kelemahan yang Anda bawa ke tim? Apakah Anda diharapkan masuk ke parit secara teratur? Adakah praktik yang Anda lihat ingin Anda perkenalkan ke tim ini untuk membantu menyetirnya? Adakah tanda-tanda peringatan yang Anda ingat dari pengalaman masa lalu yang mungkin berguna untuk melihat apakah ada yang mulai muncul dalam pekerjaan yang sedang dilakukan oleh tim.

Dengan cara ini semua bermuara pada komunikasi. Semoga berhasil!

JB King
sumber
0

memiliki presentasi (mingguan) reguler tentang beberapa topik teknologi, dan membuatnya berputar di sekitar grup. Dengan begitu semua orang akan belajar sesuatu. Dan biarkan anggota yang lebih muda hadir juga, tidak ada cara yang lebih baik untuk benar-benar memahami sesuatu selain dengan mengajarkannya. Anda mungkin harus membantu mereka memilih topik.

Beberapa pelatihan tentang cara memberi ceramah mungkin sesuai untuk semua orang. Saya memiliki seorang profesor di perguruan tinggi yang melakukan itu untuk saya dan itu sangat membantu.

Zachary K
sumber