cara tetap efisien saat bangunan hampir selalu rusak

25

Saya bekerja di tim berukuran menengah yang berbagi kode sumber yang sama dan sementara memiliki integrasi yang berkelanjutan di tempat, tetapi karena kita semua harus bekerja di cabang yang sama, bangunannya hampir selalu rusak.

Karena kami juga memiliki aturan, yang telah diperkenalkan baru-baru ini untuk mengurangi bangunan yang rusak, yang menyatakan bahwa tidak ada yang diizinkan untuk check-in sementara bangunan berwarna merah.

Karena itu, selama sehari setiap orang memiliki beberapa jendela 10-15 menit di mana kami diizinkan untuk check-in.

Dan seiring dengan pertumbuhan tim, jendela peluang check-in semakin menyusut. Itu memaksa pengembang untuk mengakumulasikan perubahan mereka secara lokal, yang menghasilkan set perubahan yang lebih besar yang bahkan lebih sulit untuk memastikan bahwa perubahan itu tidak merusak apa pun. Anda bisa melihat lingkaran setan.

Apa yang bisa Anda rekomendasikan agar saya tetap bekerja efektif di lingkungan seperti ini. Juga, harap diingat bahwa saya adalah pengembang, bukan manajer, dan tidak dapat banyak mengubah proses atau perilaku orang lain.


sumber
8
Mengapa Anda tidak memiliki cabang?
Zavior
6
solusi yang jelas adalah dengan mendirikan cabang "pribadi" Anda dan berkomitmen di dalamnya, kemudian mengintegrasikan cabang itu dengan cabang tempat tim bekerja
nyamuk
@Zavior memiliki cabang menyiratkan kompleksitas ekstra dan dengan demikian pekerjaan tambahan - menggabungkan dari cabang menjadi batang. Dan itu juga meningkatkan kompleksitas - tidak hanya saya perlu menjaga trunk uptodate, saya harus melakukan hal yang sama untuk cabang saya juga.
6
@Andrew mengumpulkan perubahan di mesin lokal adalah hal pertama yang harus disingkirkan, apa pun yang terjadi. Masalah lain yang Anda sebutkan juga nyata, tetapi yang ini pertama kali dipecahkan
nyamuk
6
Saya tidak benar-benar mengerti bagaimana mereka bisa mendorong perubahan jika mereka tidak memperbarui secara lokal, dan mengapa mereka mendorong bangunan yang rusak sama sekali tbh
Useless

Jawaban:

54

Untuk mulai dengan, komentar ini:

... memiliki cabang menyiratkan kompleksitas ekstra dan dengan demikian kerja ekstra ...

sepenuhnya salah. Saya sering mendengarnya dari orang-orang yang tidak terbiasa bercabang, tetapi itu masih salah.

Jika Anda memiliki banyak pengembang yang mengumpulkan perubahan secara lokal, perubahan lokal mereka merupakan cabang de-facto dari repositori utama.

Ketika mereka akhirnya mendorong, ini adalah penggabungan de-facto .

Fakta bahwa cabang dan gabungan Anda tersirat tidak menghapus kompleksitas ekstra yang Anda khawatirkan, itu hanya menyembunyikannya. Yang benar adalah bahwa membuat proses ini eksplisit dapat membantu Anda (jamak = seluruh tim) belajar untuk mengelolanya.


Sekarang, katamu

tidak ada yang diizinkan check-in sementara bangunan berwarna merah

tetapi dalam hal ini build tidak pernah bisa diperbaiki, sehingga tidak bisa cukup akurat.

Secara umum, jika masuk akal untuk membangun secara lokal (yaitu, membangun tidak terlalu besar atau lambat), pengembang harus melakukan itu sebelum mendorong pula.

Saya berasumsi ini bukan masalahnya, karena dengan begitu mereka tidak akan mendorong bangunan yang rusak pada awalnya, tetapi akan lebih baik jika Anda bisa memperjelas hal ini.

Secara umum jawabannya

cara tetap efisien saat bangunan hampir selalu rusak

adalah: berhenti merusak bangunan .

Tak berguna
sumber
23
+9000 untuk "Berhenti merusak bangunan." Serius. Keseluruhan, seluruh titik integrasi berkesinambungan adalah berhenti memecah build dan, jika rusak, perbaiki secepat dan sedekat mungkin dengan break.
Patrick Hughes
@ Tidak berguna, saya suka Anda jawaban umum, tapi saya pikir saya harus memperbaiki pertanyaan saya. Saya pribadi tidak melanggar membangun, dan pada saat yang sama saya tidak ingin membuat gelombang mendorong orang lain banyak sehingga mereka bisa berhenti melanggar membangun. Saya ingin tahu - adakah yang bisa saya lakukan DIRIKU, untuk tetap lebih produktif DIRIKU, di lingkungan di mana bangunan sering rusak, dan saya tidak berharap bahwa keadaan rusak akan berubah dalam waktu dekat. Ingin masukan Anda tentang ini. Tepuk tangan.
6
Nah, Anda dapat bekerja pada cabang Anda sendiri, dan selektif tentang yang hulu perubahan Anda bergabung ke cabang yang (yaitu, mungkin menggabungkan hanya ketika membangun berwarna hijau). Tapi, ini benar-benar mengurangi interaksi dengan seluruh tim, ketika akan lebih baik secara keseluruhan untuk memperbaiki tim sehingga Anda dapat berinteraksi secara masuk akal.
berguna
14

pengembang ... menumpuk perubahan mereka secara lokal ... Anda dapat melihat lingkaran setan.

Memang kejam. Mengumpulkan perubahan secara lokal adalah bendera merah besar yang menunjukkan bahwa ada sesuatu yang sangat busuk dalam proses pengembangan. Ini mengurutkan dari sampah seluruh tujuan memiliki sistem kontrol versi .

Selama Anda ingin tinggal jauh dari mengubah proses atau orang lain perilaku, solusi alami yang paling akan mendirikan cabang Anda sendiri dan menggunakannya untuk "menumpuk" perubahan (untuk selanjutnya diintegrasikan dengan cabang tim ketika Anda mendapatkan kesempatan).

Sebenarnya, jika ada lebih banyak orang seperti Anda, Anda bahkan dapat berkolaborasi dan membangun cabang pengembangan bersama untuk secara bebas bertukar pembaruan Anda tanpa terganggu dengan ide-ide manajemen yang tidak kompeten. Bercabang memungkinkan berbagai cara untuk menyederhanakan kerja tim.

  • Catatan tambahan, setiap kali manajer melakukan atau mengatakan sesuatu yang memaksa Anda untuk menghindari komitmen, untuk menjaga kode secara lokal, menerjemahkan kata-kata mereka menjadi huruf tebal dan jelas "Saya tidak kompeten" .

harap diingat bahwa saya adalah pengembang, bukan manajer, dan tidak dapat banyak mengubah proses atau perilaku orang lain ...

Demi ketepatan, Anda sebenarnya bisa , ini adalah masalah pengaruh dan keterampilan komunikasi dan seseorang tidak benar-benar harus berada dalam posisi yang kuat untuk mengubah hal-hal yang mereka sukai (cari di web untuk sesuatu seperti "kelola" jika Anda tertarik dengan detail lebih lanjut).

Namun itu agak rumit dan menghabiskan banyak tenaga dan saya dapat dengan sempurna memahami jika seseorang lebih memilih untuk tetap fokus pada pengkodean, dengan sedikit keterlibatan dalam politik - jadi jika Anda tidak mau (walaupun secara teori Anda bisa ), itu bisa dimengerti. :)

agas
sumber
7

Saya peka terhadap anggapan bahwa Anda merasa tidak berdaya untuk mengubah lingkungan, tetapi saya pikir situasi ini merupakan tantangan serius bagi profesionalisme Anda sebagai seorang programmer.

Apa yang akan terjadi jika seorang ahli bedah menyimpan pisau bedah kotor dengan yang bersih? Apa yang akan terjadi jika tukang ledeng tidak menguji pipa yang dipasangnya? Apa yang akan terjadi jika seorang pemain biola selalu bermain tidak selaras dengan orkestra?

Mengapa programmer harus dibebaskan dari kerja tim dan kesopanan bersama? Sebagai anggota tim itu, Anda berbagi tanggung jawab untuk hasilnya. Tidak bertanggung jawab untuk mengabaikan tim karena menyabot upaya sendiri.

Saya ingin tahu dari mana aturan bahwa "tidak ada yang diizinkan check-in saat membangun berwarna merah" berasal? Ini adalah aturan yang baik jika itu kemudian memfokuskan semua orang pada memperbaiki bangunan. Saya akan mencoba memimpin dengan memberi contoh dan membantu memperbaiki bangunan kapan pun itu rusak. Mari kita hadapi itu, Anda tidak akan menyelesaikan hal lain. Jika ini mengganggu Anda, maka saya sarankan menyuarakan keprihatinan itu. Suara seseorang yang secara aktif berusaha memperbaiki situasi memiliki pengaruh lebih besar daripada pria yang mengomel di sudut.

Steve Jackson
sumber
5

Saya pikir selama Anda berpikir bahwa Anda "hanya seorang pengembang" dan karena itu Anda tidak dapat mengubah hal-hal yang akan Anda derita dari masalah ini.

Yang perlu Anda lakukan adalah Anda harus mengembalikan setiap komit dari repositori setiap kali ketika seseorang merusak build dan kemudian memberi tahu pria itu bahwa ia baru saja melanggar build dan perlu berhenti. Anda juga perlu menjelaskan situasi ini kepada manajer dan memberi tahu dia bahwa produktivitas tim Anda menderita karena masalah ini.

Anda perlu melakukan apa pun untuk mengubah proses dengan lebih baik dan lebih baik minta maaf nanti daripada meminta izin.

Saya pikir Anda dan tim Anda berada dalam situasi di mana proses perlu diubah dan Anda tidak dapat bekerja secara efisien dengan model yang rusak itu. Saya juga berpikir bahwa itu adalah tanggung jawab Anda untuk melakukan sesuatu tentang masalah itu ketika Anda sudah mengetahuinya. Jika tidak ada orang lain yang akan melakukan sesuatu untuk masalah ini, Andalah yang harus!

hequ
sumber
-2 dan tidak ada yang mau berbagi kenapa .. heh heh.
hequ
1
Anda tidak dapat membuat telur dadar tanpa memecahkan telur.
William Payne
2

Saya bisa berhubungan dengan keadaan Anda, saya menghadapi situasi yang sama dengan proyek saya terbaru di tempat kerja. Kami akhirnya menerapkan semacam sistem "kentang panas" di mana pengembang yang baru-baru ini memecahkan pembangunan harus mengasuh / pengasuh / memantau itu sampai diperbaiki DAN lulus semua tes verifikasi kami.

Ini berhasil karena tes build dan verifikasi secara rutin memakan waktu ~ 4 jam, jadi melanggar build berarti Anda kehilangan setengah hari dalam melakukan pekerjaan nyata. Tak perlu dikatakan ini mengakibatkan pengembang menggunakan cabang lebih efisien sebelum menggabungkannya ke dalam bagasi. Bagi sebagian besar pengembang, pola pikir sebelumnya adalah "Saya akan membiarkan sistem pembangunan CI memberi tahu saya jika kode saya rusak."

Sam Miller
sumber
1

Perubahan sederhana pada sistem CI akan melakukannya: setiap perubahan yang merusak build akan dibatalkan secara otomatis. Bahkan lebih baik, biarkan repositori CI menjadi area pementasan, di mana perubahan hanya bisa didorong ke repositori berwibawa ketika build berwarna hijau. Alat seperti Gerrit dapat membantu di sini.

William Payne
sumber
3
Tetapi untuk membuat tugas ini tidak mungkin "... perlu diingat bahwa saya adalah pengembang, bukan manajer, dan tidak dapat mengubah proses ..."
SChepurin
@ Chepuri proses Anda tidak efisien, Anda ingin mengubah proses, titik. Sebagai pengembang, Anda mungkin tidak dapat menyetujui perubahan, tetapi Anda selalu dapat bekerja menuju perbaikan proses.
oefe
1

Dua hal lain dapat membantu di sini:

  • dapat tim Anda merokok menguji CI yang dibuat secara lokal? Jika Anda memastikan bahwa Anda tidak melanggar build - atau setidaknya tidak merusak build dengan cara yang sama tanpa harus berkomitmen dan memicu kemarahan manajemen dan tim.
  • ada banyak cara untuk mendefinisikan bangunan yang rusak tergantung pada bagaimana Anda merancang CI. Ini termasuk mendefinisikan rusak - di bawah pengembangan yang berat kami tidak menganggap tes gagal sebagai istirahat, melainkan tujuan lain yang harus diusahakan.

Tetapi Anda harus benar-benar melihat cabang.

Wyatt Barnett
sumber