Tim saya dan saya sedang membangun kembali situs yang kami kembangkan sekitar sepuluh tahun yang lalu, dan kami ingin melakukannya di Agile.
Jadi setelah saya menghabiskan banyak waktu membaca (mungkin tidak cukup) saya mengalami masalah dengan pertanyaan bagaimana membagi kerja antara pengembang.
Saya akan lebih spesifik dan mengatakan bahwa situs tersebut dibagi ke modul terpisah yang tidak memiliki banyak integrasi antara satu sama lain.
Apa cara terbaik / Paling diterima untuk membagi pekerjaan antara pengembang?
- Memberi setiap orang modul yang berbeda untuk dikerjakan.
- Tetapkan semua pengembang ke modul yang sama, dan pisahkan pekerjaan dengan berbagai bagian modul (UnitTesting, DAL dan Pemetaan, Logika, UI)
- Tetapkan semua pengembang ke modul yang sama, dan pisahkan pekerjaan dengan logika yang berbeda (Misalnya setiap pengembang bertanggung jawab atas logika tertentu (mungkin metode di BL) dan Ini UnitTesting, DAL dan Pemetaan dan UI ...
Atau mungkin sesuatu yang sama sekali berbeda?
web-development
agile
Amir
sumber
sumber
Jawaban:
Tim saya telah berusaha untuk menjadi "gesit" untuk beberapa rilis sekarang, tetapi menjadi bagian dari perusahaan besar tidak membuatnya mudah. Saya tidak akan berpura-pura memiliki jawabannya, tetapi saya bisa membagikan beberapa pengamatan saya.
Membagi pengembang per modul:
Semua orang bekerja pada modul yang sama pada saat yang sama
Kami telah melakukan hal terakhir itu, dan meskipun ada banyak ruang untuk perbaikan, secara keseluruhan seluruh tim kami sangat bahagia dan itu sangat berarti, ketika kami adalah bagian dari perusahaan raksasa.
Satu hal penting yang kami salah 3 kali pertama kami "gesit", adalah masing-masing kali orang-orang diberitahu bagaimana bekerja dan mereka diberitahu apa yang harus dilakukan. Itu adalah cara nomor satu untuk membuat tim Anda benar-benar kehilangan minat terhadap proyek dan kemudian Anda berada dalam masalah besar.
Sebaliknya, coba yang sebaliknya. Beri tahu tim, mereka dapat melakukan apa pun yang mereka inginkan dan sebagai manajer / pemimpin (jika Anda adalah satu, jika tidak membuat manajer Anda mengulangi kata-kata ini), tugas Anda adalah memastikan mereka produktif dan bahagia sebisa mungkin. Proses bukanlah hal yang buruk, tetapi proses harus ada di sana untuk membantu tim Anda ketika menyadari dibutuhkannya, bukan sebaliknya.
Jika beberapa anggota tim Anda lebih suka bekerja sendirian, biarkan mereka (sampai taraf tertentu). Jika mereka lebih suka bekerja berpasangan, biarkan mereka melakukannya. Pastikan untuk membiarkan orang-orang Anda memilih pekerjaan mereka sebanyak yang Anda bisa.
Terakhir, dan ini sangat penting dan selalu diabaikan. ANDA TIDAK AKAN MENDAPAT HAK INI (kecuali jika Anda superman, atau setidaknya batman) Memiliki pertemuan retrospektif secara teratur sangat penting. Ketika kami meluncurkan retrospektif, semuanya dilakukan oleh buku dan rasanya seperti proses lain yang harus Anda lalui. Bukan itu tujuan retrospektif. Ini untuk mendengarkan tim Anda, mengidentifikasi area yang paling menyakitkan dan memperbaikinya sehingga semua orang dapat melanjutkan pekerjaan mereka. Rupanya insinyur perangkat lunak pada umumnya seperti memberikan produk dan fitur dan pertemuan retrospektif pesan terpenting yang perlu dikomunikasikan, adalah semata-mata untuk keuntungan mereka. Anda ingin mengidentifikasi dan mengatasi hambatan, mulai dari yang terbesar (atau yang paling mudah, ada '
sumber
Lakukan pertemuan dengan tim, tunjukkan pada mereka daftar yang harus dilakukan, dan tanyakan siapa yang ingin melakukan apa.
sumber
Jangan berpikir dalam modul. Pikirkan dalam elemen fungsionalitas. Jelaskan elemen fungsionalitas tersebut berdasarkan kisah pengguna (atau cara lain) dan jangan lupa untuk menggambarkan kriteria penerimaan (mungkin ditentukan oleh aplikasi Anda saat ini dan mengubah harapan bisnis). Masukkan elemen fungsional Anda ke dalam jaminan simpanan. Kemudian biarkan bisnis memprioritaskan fungsionalitas mana yang harus dikirim terlebih dahulu (Anda akan bekerja secara bertahap dan berulang dan prioritas akan memberi tahu Anda apa yang harus diterapkan terlebih dahulu).
Setelah Anda memiliki ini setidaknya untuk bagian dari aplikasi asli Anda, Anda siap untuk pengembangan. Apa yang terjadi selanjutnya tergantung pada metodologi tangkas yang Anda pilih. Bagian yang penting adalah bahwa setiap fungsi biasanya dapat dibagi menjadi beberapa tugas dan anggota tim akan memilih tugas apa yang ingin mereka lakukan - yang disebut pengaturan mandiri. Ketika Anda mulai dengan gesit, pengorganisasian diri sendiri mungkin memerlukan bantuan di mana seseorang akan memastikan bahwa tugas yang tidak populer dan populer dibagi secara merata oleh tim. Setelah tim lebih matang, pengembang tidak akan ragu untuk berbicara tentang ketidaksetujuan mereka dengan organisasi mandiri saat ini dan ini akan ditangani secara otomatis di dalam tim.
Berpikir dalam modul dari awal tidak harus menjadi cara yang baik. Anda menulis ulang aplikasi untuk beberapa alasan dan mungkin arsitektur aplikasi saat ini berdasarkan pemisahan modul yang salah adalah salah satu alasan tersembunyi di balik masalah yang terlihat. Anda juga dapat menemukan bahwa beberapa fungsionalitas dari modul yang ada akan sepenuhnya didefinisikan ulang dan dipindahkan ke tempat lain.
sumber
Meskipun saya setuju dengan jawaban David, saya merasa itu bisa mendapat manfaat dari beberapa perincian:
Pada dasarnya, intinya adalah: Tidak ada seorang pun di sini di SE yang bisa menjawab pertanyaan itu untuk Anda, juga tidak ada gunanya, karena jauh lebih baik jika Anda datang dengan jawaban sebagai sebuah tim.
sumber
Pendekatan paling sederhana seringkali merupakan yang terbaik.
Saya akan menghindari membagi tugas menjadi kelompok-kelompok seperti pengujian / log / UI / dll kecuali Anda dapat mendefinisikan beberapa alasan yang sangat bagus dan jelas untuk melakukannya. Alasan saya adalah bahwa ketika Anda membiarkan programmer untuk bekerja di luar bidang keahlian mereka yang biasa, itu dapat membuat hal-hal lebih menarik dan menantang bagi mereka, dan memungkinkan mereka untuk berkembang dan tumbuh dalam bidang mereka. Jika Anda merasa bahwa batasan waktu mengharuskan Anda untuk membagi pekerjaan berdasarkan keahlian, paling tidak memastikan bahwa setiap pengembang masih diharuskan untuk melakukan pengujian unit mereka sendiri, dan menggunakan tinjauan kode dan pengujian penerimaan untuk mengambil masalah. Menulis tes Anda sendiri sangat gesit, dan menunggu waktu penguji untuk menjadi tersedia bisa sangat boros.
Ketika dihadapkan dengan dilema yang sama, saya telah menggunakan pendekatan berikut:
Cakupan proyek. Beri diri Anda ide tentang apa yang Anda hadapi, dan kembangkan daftar fitur dengan memecah proyek menjadi serangkaian tugas.
Prioritaskan Fitur. Putuskan fitur mana yang harus diselesaikan lebih awal, dan mana yang akan memberikan nilai langsung kepada pelanggan Anda. Jangan khawatir jika pengembang Anda akhirnya bekerja pada modul yang sama, tetapi pastikan Anda memiliki proses dan alat yang baik untuk mengelola penggabungan kode.
Libatkan tim Anda, dan minta pengembang Anda untuk membantu Anda memecah fitur menjadi daftar tugas yang lebih mudah dikelola. Tinjau sebagai kelompok dan sesuaikan tugas sesuai kebutuhan sehingga dapat lebih mudah diperkirakan.
Minta setiap pengembang untuk memilih tugas untuk diimplementasikan - atau sekelompok tugas tergantung pada bagaimana iterasi Anda akan dijalankan - dari bagian atas antrian prioritas, yang ingin dikerjakan oleh pengembang.
Mintalah setiap pengembang mengerjakan hanya satu hal sampai selesai sebelum melanjutkan untuk memilih item berikutnya dari bagian atas antrian prioritas. Anda mungkin tergoda untuk membuat orang-orang Anda berganti tugas sesekali, namun ini akan menyebabkan pemborosan dalam hal waktu pengembang. Jika Anda menemukan diri Anda dengan hambatan kemacetan, Anda harus menyesuaikan prioritas tugas Anda dan meminimalkan pemborosan.
Jangan takut ada pengembang yang menjalankan iterasi yang tumpang tindih, dan kelola rilis Anda sesuai dengan itu. Ini akan membantu meminimalkan waktu yang terbuang di antara rilis yang menunggu tugas diselesaikan.
Pada akhirnya, menjadi Agile adalah tentang menemukan solusi yang bekerja dengan baik untuk tim Anda, perusahaan Anda, dan pelanggan Anda. Terserah Anda untuk menyelaraskan proses Anda dengan menemukan keseimbangan praktik yang paling sesuai untuk Anda. Bagaimana membagi tugas Anda akan menjadi bagian yang sangat penting dari proses yang jauh lebih besar, tetapi harus dibuat sesederhana yang Anda bisa untuk mendorong partisipasi yang bersedia, dan untuk menghindari kesulitan untuk menyelesaikan proses terkait masalah yang berkembang di kemudian hari.
sumber
Tidak ada diskusi organisasi tim pengembang yang akan lengkap tanpa menyebut Tim Bedah Dr. Fred Brooks .
Rumus dasarnya adalah: satu Tim Bedah per Unit Kerja
Mendefinisikan Tim Bedah
Konsep tim bedah didasarkan pada dua ide mendasar:
Tim bedah terdiri dari 3-10 pengembang:
Mendefinisikan Satuan Kerja
Jadi sekarang kita bisa membentuk satu tim, apa yang kita tugaskan kepada mereka?
Anda akan melihat tiga pola dasar yang dapat diterima muncul:
sumber
Bergantung pada jumlah pengembang dan modul (dan rentang waktu) saya biasanya membuat pengembang saya memilih satu modul yang menarik (untuk mereka) dan satu modul yang menantang (lebih disukai sesuatu yang belum pernah mereka lakukan) dan kemudian sisanya saya bagi berdasarkan tingkat keterampilan dan kendala waktu. Saya menemukan ini memberi pengembang saya sesuatu yang ingin mereka kerjakan dan sesuatu untuk mendorong mereka.
Tentu saja ini tidak selalu berhasil ...
sumber
Inilah yang akan saya lakukan:
Jika semua modul kecil, maka Anda dapat memberikan masing-masing modul untuk dikerjakan. Kalau tidak, lakukan ini:
Hal di atas tidak akan berfungsi jika orang yang tidak suka bekerja dengan orang lain adalah yang paling mahir dan ini adalah kasus umum, jadi buat pengecualian untuk 4 dan 5 sesuai
sumber