Apakah kepemilikan kode individu penting? [Tutup]

48

Saya di tengah-tengah pertengkaran dengan beberapa rekan kerja tentang apakah kepemilikan tim atas seluruh basis kode lebih baik daripada kepemilikan individu atas komponen-komponen itu.

Saya seorang pendukung besar menugaskan setiap anggota tim bagian dari basis kode yang kira-kira sama. Ini membuat orang bangga dengan kreasi mereka, memberikan screenracing bug tempat pertama yang jelas untuk menetapkan tiket masuk, dan membantu meringankan "sindrom jendela pecah".

Ini juga memusatkan pengetahuan tentang fungsi spesifik dengan satu (atau dua) anggota tim membuat perbaikan bug lebih mudah.

Yang paling penting, ini menempatkan keputusan akhir pada keputusan besar dengan satu orang yang memiliki banyak masukan daripada dengan komite.

Saya tidak menganjurkan untuk meminta izin jika orang lain ingin mengubah kode Anda; mungkin kode review selalu menjadi milik pemilik, tentu saja. Saya juga tidak menyarankan membangun silo pengetahuan: seharusnya tidak ada yang eksklusif tentang kepemilikan ini.

Tetapi ketika menyarankan ini kepada rekan kerja saya, saya mendapat satu ton pushback, tentu saja lebih dari yang saya harapkan.

Jadi saya bertanya kepada komunitas: apa pendapat Anda tentang bekerja dengan tim berdasarkan basis kode besar? Apakah ada sesuatu yang saya lewatkan tentang menjaga kepemilikan kolektif dengan waspada?

Jim Puls
sumber
Apa itu "sindrom jendela pecah"? Saya tidak akrab dengan istilah itu.
uman
1
Broken window syndrome: en.wikipedia.org/wiki/Broken_windows_theory
Pemdas
1
"Ini juga memusatkan pengetahuan tentang fungsi spesifik dengan satu (atau dua) anggota tim" ... "Saya juga tidak menyarankan membangun silo pengetahuan". Bukankah itu kontradiksi? Bagi saya, memusatkan pengetahuan dengan satu / dua anggota adalah definisi dari silo pengetahuan.
sleske
Ini tampaknya sangat mirip dengan pertanyaan lain yang muncul beberapa tahun kemudian.
Eric King

Jawaban:

46

Saya percaya bahwa Kepemilikan Tim jauh lebih bermanfaat dalam jangka panjang.

Anda hanya perlu melihat 2 skenario berikut untuk memahami mengapa memusatkan pengetahuan dalam jumlah minimum orang kurang dari ideal:

  • Anggota tim mengalami kecelakaan yang tidak menguntungkan
  • Anggota tim memenuhi kesempatan kerja yang lebih baik

Secara alami, orang / orang yang menulis bagian-bagian tertentu akan memiliki pengetahuan yang lebih besar tentang hal itu, tetapi jangan menyerah pada godaan untuk menjadikannya satu-satunya silo pengetahuan. Silo akan memberi Anda kemenangan jangka pendek dengan rasa sakit jangka panjang.

Hanya karena Anda tidak memiliki kepemilikan individu atas bagian kode, sejak Anda menulisnya, tidak berarti Anda tidak akan tetap memiliki aspek "kebanggaan pada kreasi Anda", dll. Saya tidak percaya memiliki kepemilikan tim akan sangat mengurangi perasaan kepemilikan kode pribadi yang tertulis.

Dan McGrath
sumber
7
Dari perspektif OO, kedua skenario menjadi: "Anggota tim tidak ada di sekitar." Bukankah "operasi ketenagakerjaan yang lebih baik" hanyalah subkelas dari "kecelakaan yang tidak menguntungkan?"
Dan Rosenstark
4
@ Yar: ya, meskipun saya kira Anda masih bisa meminta seseorang yang menemukan "pekerjaan yang lebih baik" untuk mendapatkan uang lebih banyak ... tidak ada jumlah uang yang akan membawanya kembali dari bawah bus :-)
Dean Harding
4
Saya mendorong para devs di grup saya untuk bertanya / berpasangan dengan penulis asli agar Anda dapat memperbaiki bug lebih cepat bersama dengan beberapa distribusi pengetahuan.
dietbuddha
17
Anda tahu, ini adalah salah satu dari hal-hal yang luar biasa dalam teori tetapi jarang berhasil dalam praktik. Itu karena tragedi milik bersama. Jika semuanya adalah tanggung jawab semua orang, maka tidak ada yang menjadi tanggung jawab siapa pun karena segala sesuatu adalah tanggung jawab orang lain. Para psikolog menyebutnya "kemalasan sosial". Anda memerlukan keseimbangan tanggung jawab individu dan tanggung jawab tim.
Jason Baker
4
Saya akan membantah @Jason itu. Jika demikian, Anda perlu karyawan yang lebih baik, tim yang lebih kecil. Tekanan teman sebaya harus bisa mengendalikan hal itu, selama tim itu bukan sekelompok serpihan. Kepemilikan Tim tidak mengurangi tanggung jawab individu.
Dan McGrath
27

Pada akhirnya, tim memiliki kode. Tetapi untuk semua alasan yang Anda sebutkan, kami telah menunjuk masing-masing penulis untuk bagian spesifik dari kode. Setiap penulis memiliki tanggung jawab utama untuk bagian kode mereka, dan tanggung jawab sekunder untuk basis kode secara keseluruhan.

Jika ada masalah dengan bagian dari permukaan basis kode, saya mencoba kembali ke orang yang semula menulis kode untuk perbaikan. Tentu saja, tidak ada yang mencegah anggota tim lain menerapkan perbaikan; semua anggota tim diharapkan terbiasa dengan kode orang lain. Tetapi kami selalu berusaha untuk mendapatkan perbaikan dari penulis asli terlebih dahulu. Lagi pula, mereka menulis kode; merekalah yang paling akrab dengannya.

Saya telah bekerja di lingkungan tim itu, karena orang tidak merasakan rasa memiliki dalam apa yang mereka tulis, mereka tidak dipaksa untuk menulis kode yang sangat baik, tetapi hanya kode rata-rata.

Robert Harvey
sumber
5
+1 Untuk poin mengenai kualitas kode yang lebih baik karena rasa memiliki. Itu memang ada.
Orbling
+1 (+10 jika saya bisa): kepemilikan mempengaruhi kualitas kode, tidak hanya karena memberikan rasa bangga dan, dengan itu, motivasi yang lebih kuat, tetapi juga karena membantu mengelola kompleksitas kode, seperti dijelaskan dengan sangat baik dalam esai "Memegang Program di Kepala Satu Orang", lihat paulgraham.com/head.html .
Giorgio
19

Sementara saya setuju dari pendirian bisnis tentang alasan untuk menyebarkan pengetahuan tentang produk; kenyataannya adalah bahwa seorang individu yang memfokuskan upaya mereka pada bidang apa pun akan, dari waktu ke waktu, menjadi jauh lebih berpengalaman di bidang tertentu.

Mengabaikan ini berarti mengabaikan ilmu. Sayangnya, otak tidak mampu mempertahankan semua yang dihadapinya. Itu mengingat apa yang valid dan berharga pada saat tertentu tetapi bahkan penyimpanan berkurang seiring waktu.

Saya cenderung setuju dengan Anda bahwa kepemilikan modul atau kompartemen tertentu dalam basis kode yang lebih besar umumnya akan menghasilkan hasil yang lebih baik. Apakah seseorang akan pergi tanpa pemberitahuan akan menghalangi kesuksesan? Pasti. Tetapi berpura-pura bahwa setiap orang dalam tim harus memiliki jumlah pengetahuan yang sama sehubungan dengan basis kode adalah naif dan tidak melakukan apa pun untuk memperbaiki kode; itu mencoba untuk melindungi kode. Melindungi kode adalah peran bisnis karena alasan yang jelas. Panjangnya usaha yang akan dilakukan oleh suatu usaha dalam melindungi kode seringkali dapat menjadi sama saja.

Anda tidak memastikan setiap pemain di tim Anda dapat bermain quarterback, bukan? Saya berpendapat bahwa memastikan anggota tim memiliki kepemilikan di seluruh basis kode sama dengan mencoba membuat setiap pemain dalam tim Anda bermain quarterback pada tingkat yang memuaskan ... itu tidak bertambah. Apakah Anda memiliki cadangan? Tentu Anda tahu ... tetapi anggota tim harus memiliki identitas di dalam tim. Percaya semua orang adalah sama meminta rasa sakit yang berbeda ...

Aaron McIver
sumber
5
tim pro memiliki quarterback cadangan
Steven A. Lowe
1
@ Seven saya sudah mengatakan itu; tetapi terima kasih telah mengulangi ... "Apakah Anda memiliki cadangan? Tentu saja ... tetapi anggota tim harus memiliki identitas di dalam tim. Percaya semua orang sama, meminta rasa sakit yang berbeda."
Aaron McIver
Tim NFL memiliki tiga quarterback, bukan pemain yang dilatih secara silang. Analogi olahraga jarang berhasil di IT ;-)
Steven A. Lowe
3
@ Sebelas Saya sadar tentang bagaimana NFL bekerja, sekali lagi saya tidak mengatakan cadangan tidak ada tetapi mencoba menyebarkan bahwa pengetahuan di seluruh tim tidak ada gunanya. Pengembang == pemain. Jika kami ingin memperkenalkan judul-judul seperti quarterback == arsitek, kami dapat melakukannya tetapi bermuara pada satu tim yang berupaya mencapai satu tujuan. Setiap minggu 45 pemain cocok dan dari 45 pemain tersebut 6,6% memiliki pengetahuan tentang cara mengoperasikan posisi quarterback. Kedengarannya ideal untuk saya; versus sebagian besar posting ini menginginkan 75% tim memiliki pengetahuan tentang cara mengoperasikan posisi quarterback.
Aaron McIver
10

Saya tidak tahu bahwa kepemilikan kode individu adalah ide yang bagus. Setidaknya tidak dalam arti bahwa orang dapat mengatakan "Ini kode saya, dan saya akan melakukan apa yang saya inginkan dengan itu". Mungkin lebih baik untuk mengatakan bahwa Anda harus memiliki pengelolaan kode individu : kode harus dimiliki oleh tim, tetapi ada satu orang tertentu yang didelegasikan oleh tim dan tanggung jawabnya.

Alasan untuk ini adalah bahwa jika itu adalah tanggung jawab semua orang, maka itu bukan tanggung jawab siapa pun.

Jason Baker
sumber
+1 untuk "Alasan untuk ini adalah bahwa jika itu adalah tanggung jawab semua orang, maka itu bukan tanggung jawab siapa pun."
Karthik Sreenivasan
@KarthikSreenivasan: Tepat, dan kemudian beberapa anggota tim yang disfungsional akan mulai (1) membuat perubahan acak pada kode "karena seluruh tim memiliki kode" dan (2) tidak memperbaiki kesalahan yang mereka perkenalkan "karena itu adalah tanggung jawab seluruh tim untuk Perbaiki mereka". Saya pikir solusi ideal di suatu tempat antara kepemilikan individu dan kepemilikan tim.
Giorgio
8

Saya akan mendukung kepemilikan tim atas individu karena alasan berikut:

  • Konsistensi kode terhadap keseluruhan proyek
  • Mendorong diskusi kode, yang selalu mengarah pada solusi yang lebih baik, lebih banyak diperiksa
  • Jika satu anggota tim sakit (atau lebih buruk), seluruh bagian kode tidak dapat ditunda
  • Anggota tim dapat bekerja pada semua bagian proyek, yang berfungsi untuk membuat tinjauan kode dibangun ke dalam proses pengembangan
morganpdx
sumber
6

Spesialisasi baik-baik saja - untuk basis kode besar ini dalam jangka panjang mungkin menghemat sedikit waktu komunikasi - tetapi kepemilikan tidak.

Yang saya maksudkan adalah bahwa sikap seharusnya tim memiliki bug, dan tidak ada yang mengatakan bahwa "oh, hanya X yang bisa menyentuh kode itu, jadi itu bukan masalah saya". Jika Anda adalah bagian dari tim, Anda juga bertanggung jawab untuk memperbaiki bug di seluruh basis kode jika Anda bisa, dan melakukannya dengan benar. Orang X mungkin merupakan pilihan terbaik untuk melakukannya, tetapi siapa pun harus diharapkan untuk melakukannya jika mereka harus melakukannya. Ini secara alami membutuhkan kode untuk ditulis dengan cara yang memungkinkan dan mengundang anggota tim untuk bekerja dengannya. Memiliki kode degil akan melarang hal ini, jadi usahakan kode yang jelas dan sederhana, karena hal itu memungkinkan sebagian besar pengembang untuk bekerja dengannya. Anda mungkin ingin menggunakan peer review agar tetap seperti itu.


sumber
5

Saya harus tidak setuju dengan Anda: Kepemilikan tim atas basis kode adalah pilihan yang jauh lebih baik daripada kepemilikan individu.

Kelemahan yang jelas dari kepemilikan individu adalah bahwa jika sesuatu terjadi pada satu karyawan (dipecat, pensiun, jatuh sakit, dll.) Maka kecuali dia menulis kode yang benar-benar bersih, akan butuh beberapa saat bagi orang lain untuk mengadopsi orang itu kode, terutama jika mereka juga harus mengelola kode mereka sendiri.

Mereka juga terlalu banyak alat yang membuat kepemilikan tim lebih mudah. Ulasan kode, kontrol sumber - ini adalah hal-hal yang mendorong keterlibatan tim di seluruh basis kode. Selain itu, bagaimana Anda menetapkan bagian tertentu dari basis kode hanya untuk satu orang? Apakah Anda hanya mengatakan bahwa hanya orang ini yang dapat memodifikasi file ini?

Akhirnya, saya berpikir bahwa jika satu bagian dari basis kode rusak, terlalu mudah untuk menyalahkan orang yang bertanggung jawab atasnya, dan itu hanya menyebabkan lebih banyak masalah.

Saurabh Sharan
sumber
5

Saya pikir Anda membutuhkan keduanya, karena ada ketegangan antara kedua pendekatan.

Jika untuk setiap kode hanya ada satu orang yang dapat mengerjakannya, itu benar-benar buruk dalam jangka panjang bagi perusahaan, terutama ketika / jika itu tumbuh, karena setiap pengembang menjadi titik kegagalan. Di sisi lain, kepemilikan kode individu (semoga) memungkinkan waktu pengiriman yang lebih cepat, karena pengembang umumnya lebih suka pendekatan itu (insentif), karena pengembang tahu kode dengan sangat baik, dll ... Ada juga masalah waktu: harus dimungkinkan untuk merelokasi pengembang pada proyek tertentu tergantung pada kebutuhan bisnis, tetapi jika Anda melakukannya setiap hari, itu mengerikan (jika hanya karena pengembang membencinya, tetapi juga karena biaya pergantian terlalu berat, dan Anda menghabiskan sebagian besar waktu Anda melakukan tidak ada).

IMO, salah satu peran manajer adalah menemukan keseimbangan yang baik di antara keduanya. Peninjauan kode, standar pengkodean, standarisasi pada seperangkat alat juga harus membantu mengurangi poinf masalah kegagalan. Bagaimanapun, poin utama dari kode yang dapat dipelihara adalah untuk mengatasi masalah ini.

David Cournapeau
sumber
4

Saya pikir kepemilikan kode kolektif jauh lebih baik daripada kepemilikan kode individu.

Saya tidak terganggu dengan argumen truk - dalam model kepemilikan individu, kehilangan seorang pemilik adalah mahal dalam hal waktu yang dibutuhkan untuk mengambil alih orang lain, tetapi peristiwa tersebut cukup langka sehingga biaya perolehan diamortisasi rendah.

Sebaliknya, saya pikir kepemilikan kode kolektif mengarah langsung ke kode berkualitas tinggi. Ini karena dua alasan yang sangat sederhana. Pertama, karena kebenaran yang menyakitkan adalah bahwa beberapa programmer Anda tidak sebagus yang lain, dan jika mereka memiliki kode, kode itu akan menjadi buruk; memberikan akses yang lebih baik kepada programmer Anda akan meningkatkannya. Kedua, tinjauan kode: jika semua orang memiliki kode, semua orang dapat meninjau dan memperbaikinya; bahkan programmer yang baik menulis kode sub-par jika dibiarkan sendiri.

Saya mengatakan ini berdasarkan pengalaman dalam proyek saya saat ini. Kami bertujuan untuk mempraktikkan kepemilikan kolektif, tetapi ada beberapa bagian dari sistem yang menjadi terspesialisasi - saya dan lelaki lain adalah pemilik de facto dari sistem build, misalnya, ada seorang lelaki yang melakukan sebagian besar pekerjaan pada umpan data yang masuk , pria lain yang bekerja pada impor gambar, dan sebagainya. Di beberapa area tersebut (terutama, saya harus mengaku, di area saya!), Kualitas kode mengalami kerusakan serius - ada kesalahan, kesalahpahaman, kludges, dan retasan yang tidak akan bertahan dari perhatian orang lain di tim.

Saya perhatikan bahwa Anda dapat memperoleh beberapa manfaat dari kepemilikan kode kolektif dengan memiliki kepemilikan kode individual di mana kepemilikan sedikit kode tertentu berpindah antara programmer yang berbeda secara teratur (misalnya, setiap tiga bulan, atau setiap rilis - bahkan mungkin setiap iterasi?) . Setara pemrograman rotasi tanaman. Itu mungkin menyenangkan. Saya tidak akan mencobanya sendiri.

Tom Anderson
sumber
1

Saya tidak berpikir kepemilikan kode tim sama pentingnya dengan memiliki banyak kontributor memahami arsitektur dasar dari subsistem yang ada.

Misalnya, kami memiliki beberapa orang di tim kami yang membuat halaman web administratif untuk produk server kami. Kami membangun mesin skrip sisi server khusus sehingga kami dapat memanggil fungsi C di server langsung dari skrip java atau html kami. Saya pikir lebih penting bagi orang "web" kami untuk memahami cara menggunakan mesin ini dan bukan menjadi pemilik bersama dari masing-masing aplikasi halaman web lainnya.

Pemda
sumber
0

Saya pikir Anda mengambil kepemilikan individu atas kode pada saat Anda menulisnya dan kemudian menyerahkannya kepada tim. Dengan cara ini semua orang bertanggung jawab dan berkontribusi. Setiap orang harus ingin memperbaiki kegagalan pengkodean yang mereka buat. Bersamaan dengan tinjauan kode, ini menciptakan standar yang lebih tinggi. Tidak ada yang menginginkan pekerjaan membersihkan setelah orang lain.

Pikirkan lebih banyak tanggung jawab dan kurangi kepemilikan. Lagi pula, siapa pun yang menulis cek adalah pemilik sebenarnya.

JeffO
sumber
0

Jim, aku bersamamu untuk yang 100%. Saya berada di tengah-tengah pertempuran yang sama persis di tempat kerja saya - itulah sebabnya saya menemukan pertanyaan Anda.

Cara saya melihatnya adalah: "ketika semua orang memilikinya, tidak ada yang memilikinya".

Bagi saya, tidak ada faktor tunggal yang lebih penting untuk kualitas kode selain kepemilikan dan tanggung jawab.

Contoh dari kehidupan nyata menggambarkan hal ini dengan baik. mana yang akan Anda rawat dengan lebih baik: halaman pribadi Anda atau taman komunitas? Cukup jelas.

Ngomong-ngomong, itu tidak harus ditukar dengan "fleksibilitas tim". Itu hanya berarti bahwa ketika seseorang memiliki sesuatu, dia MEMILIKInya - dan jika hanya untuk hari itu.

acohen
sumber
0

Bagi saya itu tergantung pada dinamika tim Anda.

Misalnya, jika Anda memiliki tim yang tidak disatukan oleh standar, tinjauan sejawat, pengujian metodis, atau jika Anda memiliki tim yang tingkat kompetensinya sangat bervariasi di antara anggota, mungkin ada baiknya mencari gagasan kepemilikan kode yang lebih kuat dengan pola pikir modular kotak hitam lebih.

Kurangnya ini, misalnya, antarmuka Anda yang dirancang dengan cermat sesuai dengan prinsip-prinsip SOLID mungkin dengan cepat dirusak oleh seseorang yang bahkan tidak tahu arti "SOLID" dan ingin menambahkan fungsi eklektik baru setiap saat ke antarmuka untuk "kenyamanan", misalnya Sejauh ini, ini yang terburuk.

Anda mungkin juga berurusan dengan rekan kerja yang ceroboh yang idenya untuk memperbaiki bug adalah memperbaiki gejala tanpa memahami masalah root (mis: mencoba menanggapi laporan kerusakan dengan hanya memasukkan solusi dalam kode hanya untuk menyembunyikan bug dan mentransfer yang mematikan efek samping pada orang lain). Dalam hal ini, itu tidak seburuk sabotase desain antarmuka dan Anda dapat melindungi niat Anda dengan unit test yang dibangun dengan cermat.

Solusi yang ideal adalah mengencangkan tim Anda ke titik di mana gagasan kepenulisan dan kepemilikan ini tidak lagi menjadi begitu penting. Peer review bukan hanya tentang meningkatkan kualitas kode, ini juga tentang meningkatkan kerja tim. Standar tidak hanya tentang konsistensi, tetapi meningkatkan kerja tim.

Namun ada skenario di mana peer review dan benar-benar membuat semua orang sesuai dengan suatu standar tidak ada harapan dan akan membawa banyak kritik yang tidak berpengalaman ke dalam campuran. Saya akan mengatakan banyak tentang apakah kepemilikan kode atau kepemilikan tim mengambil prioritas yang lebih kuat akan didasarkan pada kemampuan tim Anda untuk benar-benar melakukan peer review yang efektif dan benar-benar membuat semua orang keluar seolah-olah mereka mendapat manfaat darinya (baik dalam hal review itu sendiri , dan menjadi lebih dekat bersama dalam pola pikir dan standar sebagai hasilnya). Dalam tim besar, longgar, dan / atau berbeda, ini mungkin tampak tanpa harapan. Jika tim Anda dapat berfungsi seperti "regu" di mana Anda bahkan tidak tahu siapa yang menulis apa, maka kepemilikan tunggal akan mulai tampak seperti gagasan konyol.

Dalam skenario yang jauh dari ideal ini, gagasan kepemilikan kode ini sebenarnya dapat membantu. Ini berusaha memperbaiki skenario terburuk, tetapi dapat membantu jika kerja tim pada umumnya tidak ada harapan untuk memagari kode penulis. Dalam hal ini, ini mengurangi kerja tim, tetapi itu bisa lebih baik jika "kerja tim" hanya mengarah pada langkah kaki.


sumber