Kode ini adalah kekacauan total dari kombinasi ASP / ASP.NET klasik. Scrum terdiri dari kita menambal kekacauan besar atau membuat tambahan untuk itu. Kita semua terlalu sibuk melakukan itu untuk memulai penulisan ulang jadi saya bertanya-tanya ..
Di mana bagian dalam Scrum di mana para pengembang dapat memiliki kekuatan untuk mengatakan bahwa cukup sudah cukup dan menuntut agar mereka diberi waktu untuk memulai penulisan ulang besar? Kami tampaknya dalam lingkaran tanpa akhir hanya menambal kode lama dengan 'Cerita'.
Jadi hal-hal dijalankan oleh orang-orang non-teknis yang tampaknya tidak memiliki keinginan untuk mendorong penulisan ulang karena mereka tidak mengerti betapa buruknya basis kode yang telah terjadi.
Jadi siapa yang bertanggung jawab untuk membuat perubahan penulisan ulang yang besar ini terjadi? Pengembang? Master Scrum?
Strategi saat ini hanya untuk menemukan waktu dan melakukannya sendiri tanpa melibatkan atasan karena mereka sebagian besar disalahkan untuk kekacauan saat ini kita berada di ... <-
masukkan kata-kata kasar tentang orang-orang non-teknis memberitahu orang-orang teknis apa yang harus dilakukan di sini ->
.
sumber
Jawaban:
Saya tidak yakin mengapa ini sangat sulit bagi orang-orang. Kasus bisnisnya ada di sini:
Waktu pengembang adalah uang. Banyak uang. Saya meninggalkan perusahaan yang berencana memperbaiki UI mereka lebih dari setahun yang lalu dan berharap bahwa mengadopsi scrum akan membantu mereka berhenti memutar roda mereka. Apa yang terjadi? Sama ol 'sama ol'. Mereka terus mengunci fitur baru dan "utang teknis" tidak memiliki kasus bisnis meskipun setengah dari kode yang kami tulis menjadi tidak berarti dengan setiap iterasi karena basis kode yang mendasari menjadi berantakan usang sepenuhnya. Tidak ada satu pun yang berubah di ujung depan mereka sejak saya pergi, dan saya dibawa untuk tujuan pembenahan sepenuhnya. Dalam dua bulan saya di sana saya tidak benar-benar menyentuh sedikit pun CSS atau JavaScript. Saya hanya bermain-main dengan HTML dan beberapa sistem templating Jawa kuno dari akhir 1990-an.
Jawabanku? Lakukan apa yang Anda bisa, tetapi jika pengembang lain sudah menyerah dan bekerja lembur untuk memenuhi tujuan sprint daripada menegaskan tenggat waktu yang lebih praktis dan bersikeras bahwa utang teknologi sebenarnya merupakan masalah pemblokiran, anggaplah yang terburuk dan mulailah mencari pekerjaan baru sekarang. Pengembang Anda tidak dapat atau tidak diizinkan untuk mengomunikasikan keprihatinan mereka atau bisnis juga! @ # $ Ing picik untuk memahami berapa banyak uang yang mereka buang.
Mengabaikan masalah-masalah ini SELALU lebih mahal dalam jangka panjang. Dan tidak sedikit lagi, tetapi BANYAK lebih. Tidak hanya itu luka dada yang menghisap di mana waktu pengembangan yang bersangkutan, tetapi juga pasti akan mengurangi tingkat bakat Anda sebagai pengembang yang lebih tahu dan memiliki pilihan lain akan menghindari perusahaan Anda seperti wabah. Bos saya saat ini adalah pengembang DAN pemilik perusahaan. Ada hal-hal yang kita tidak akan menulis ulang untuk fokus pada prioritas lain, tetapi ketika sesuatu benar-benar membutuhkan refactor karena menjadi timesink yang konsisten, itu mendapat refactor yang tepat. Dan hasilnya jelas. Memodifikasi dan menambahkan hal-hal baru menjadi lebih mudah dan lebih cepat dengan berbagai faktor. Apa yang pernah memakan waktu berjam-jam dapat mengambil menit dengan arsitektur yang tepat. Bisnis tidak suka mendengarnya, tetapi ada baiknya menunda hal itu untuk itu.
Scrum adalah kegagalan di lingkungan di mana pengembang tidak memegang kendali, IMO, karena terlalu mudah bagi jenis bisnis untuk mengabaikan pemeliharaan dan pembaruan yang mendukung poin-poin penting yang dapat mereka masukkan ke dalam daftar "inisiatif yang berhasil" ketika waktu evaluasi datang. Mereka akan selalu mendukung jangat dan potensi mereka untuk promosi demi jangka panjang, bahkan ketika itu secara konsisten menggigit mereka di pantat untuk mengabaikan masalah ini juga.
Scrum juga merupakan industri yang memotivasi keuntungan dan kemudian beberapa. Perusahaan membayar banyak uang untuk pelatihan scrum. Orang yang ingin mengadopsi harus waspada terhadap siapa yang sedang dipasarkan dan seberapa realistis itu akan benar-benar berada dalam budaya mereka.
Apapun, jika Anda benar-benar peduli tentang pengembangan, basis kode jelek, manajemen dengan lilin di telinga dan pengembang tanpa duri adalah resep untuk kesengsaraan dan lingkungan yang akan melakukan sangat sedikit untuk meningkatkan keahlian Anda dalam hal apapun yang bermanfaat. Jangan ragu untuk mulai menerapkan langkah-langkah ke GTFO sebelum Anda benar-benar mengetahui apakah upaya Anda untuk memperbaiki masalah benar-benar membuahkan hasil.
sumber
Jika Anda benar-benar akan melakukan Scrum, yang saya ragu, Pemilik Produk akan bertanggung jawab untuk memutuskan tentang penulisan ulang. Sebagian besar kali menulis ulang bukanlah ide yang baik, karena, tidak menghasilkan fungsi baru, hanya memperkenalkan bug baru.
http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky
http://www.joelonsoftware.com/articles/fog0000000069.html
Mengembangkan "menulis ulang bukanlah ide yang bagus":
Hampir selalu lebih baik untuk mencoba peningkatan bertahap. Seperti yang ditulis Jarrod Robertson dalam komentar, temukan modul yang perlu diperbaiki menjadi ahli untuk modul itu dan tulis cerita untuk sprint berikutnya untuk meningkatkan modul itu. Jelaskan kepada pemilik produk mengapa modul itu perlu bekerja.
sumber
Aku akan benar-benar tumpul ...
Anda telah menyatakan bahwa Anda baru saja memulai pekerjaan, namun Anda tampaknya sudah menguasai situasi di sana. Mungkin saya telah salah mengerti maksud pertanyaan Anda, tetapi saya mendapat kesan bahwa Anda telah memasuki pekerjaan di mana Anda melihat sejumlah masalah, dan Anda telah melompat ke kesimpulan termudah di mana kode rusak dan satu-satunya jalan ke depan adalah menulis ulang, tetapi apakah Anda benar-benar mempertimbangkan biaya untuk majikan Anda untuk melakukannya?
Dengan basis kode yang ada - tidak peduli seberapa buruk keadaannya - pemilik biasanya akan memiliki investasi yang cukup besar dalam produk yang diwakili oleh kode tersebut. Ada biaya langsung dan tidak langsung yang terkait dengan basis kode, dan penulisan ulang sering kali merupakan hal terakhir yang ingin Anda lakukan sebagai pengembang perangkat lunak, karena Anda berisiko mendevaluasi aset kode Anda, dan karenanya mendapatkan pengembalian yang lebih rendah pada semua yang sebelumnya upaya.
Ambil sistem operasi Window sebagai contoh. Dengan setiap versi baru dibuat, ada sejumlah besar kode yang dibawa maju dari versi sebelumnya. Terkadang, seluruh pustaka dan API diseret ke depan melintasi beberapa generasi OS. Mengapa? Karena pengembang tahu bahwa elemen-elemen ini berfungsi, telah diuji, telah ditambal dan diperbaiki untuk mencegah masalah keamanan dan memori, dan karena mereka menghabiskan banyak uang untuk masuk ke keadaan itu. Tidak ada yang mau membuang kode kerja ketika menghasilkan uang, bahkan jika biaya perawatannya relatif tinggi, biaya untuk memulai dari awal akan selalu lebih tinggi lagi, dan di perusahaan seperti kasing Microsoft, mereka memiliki miliaran di bank yang memungkinkan mereka untuk memulai dari awal jika mereka mau, tetapi mereka tidak t karena mereka ingin memaksimalkan laba dari investasi mereka. Majikan Anda tidak berbeda dengan Microsoft, kecuali sedikit tentang memiliki miliaran uang tunai untuk dilemparkan pada suatu proyek.
Jadi kodenya berantakan, dan sepertinya ada masalah komunikasi dan batas antara berbagai bidang perusahaan. Apa yang dapat Anda atau kolega Anda lakukan tentang ini?
Salah satu pilihan adalah terus melanjutkan apa yang telah dilakukan tim, dan berharap akan keajaiban di masa depan. Mungkin bukan ide yang bagus, dan kemungkinan hanya akan menambah frustrasi dan stres Anda.
Pilihan yang lebih baik adalah dengan hanya menyerah dan melakukan pekerjaan Anda, tetapi sebagai bagian dari ini mencari peluang untuk menambahkan tes untuk mendukung area kode yang tampaknya paling rapuh, kemudian refactor mereka sampai mereka menjadi lebih stabil. Anda akan memiliki waktu yang lebih mudah untuk membuat argumen yang meyakinkan untuk meningkatkan investasi perusahaan alih-alih berdebat untuk membuangnya begitu saja.
Opsi yang lebih baik lagi adalah diorganisir sebagai sebuah tim, dan untuk memastikan Anda mendapatkan seseorang yang cukup senior sehingga mereka dapat membuat kasus yang baik untuk memungkinkan tim lebih fleksibel untuk menjadwalkan waktu untuk meningkatkan basis kode. Saya tidak peduli seberapa sibuk sebuah perusahaan, atau seberapa kaku jadwalnya, selalu ada "jeda" dalam aktivitas yang dapat digunakan untuk melakukan peningkatan atau dua peningkatan. Akan lebih baik jika perbaikan dapat dilakukan sambil menyelesaikan tugas lain. Jika itu saya, saya akan menyesuaikan diri dengan seorang manajer dan memperkenalkan mereka pada konsep-konsep dalam beberapa buku kanonik yang dibaca pengembang perangkat lunak. Kode Bersihmungkin yang paling dibutuhkan tim Anda. Tanam beberapa benih tentang cara meningkatkan kode, dan berikan beberapa contoh tentang maksud Anda. Seorang manajer yang baik akan melihat nilai penambahan peningkatan kode, terutama jika Anda dapat menggambarkan konsep Hutang Teknis . Bantu pemimpin tim atau manajer Anda untuk membuat kasus bisnis yang baik untuk meningkatkan kode, dan mereka akan memiliki motivasi yang lebih baik untuk menindaklanjutinya.
Itu juga tidak cukup untuk mengatakan "kode itu tidak rapi". Anda perlu mendorong kolega Anda untuk mempraktikkan pengkodean bersih sepanjang waktu, dan menggunakan teknik pengkodean bersih untuk mendorong sedikit merapikan saat Anda mulai. Saya memiliki poster kecil yang saya cetak dan gantung di dinding kantor setiap kali saya menerima pekerjaan baru. Itu mengatakan "Selalu berusaha untuk meninggalkan kode sedikit lebih indah daripada yang Anda temukan". Tepat di sebelahnya saya menambahkan yang lain yang mengatakan "Lili tidak perlu disepuh". Keduanya berfungsi untuk mengingatkan saya bahwa saya harus selalu berusaha meningkatkan apa yang saya temukan, tetapi menghindari hanya menyepuh emas satu masalah dengan yang lain. Penulisan ulang besar-besaran sering kali merupakan jenis "pelapisan emas" terburuk, karena sering dilakukan karena alasan yang salah. Tentu versi produk yang sama sekali baru mungkin dapat dibenarkan pada beberapa titik,
sumber
Berikut adalah definisi resmi Tim Pengembangan Scrum dari Panduan Scrum resmi . Saya menekankan bagian-bagian yang menarik perhatian Anda secara langsung:
Tim Pengembangan karena itu bertanggung jawab atas kekacauannya sendiri dan harus mengatasinya sendiri, tanpa harus meminta siapa pun di luar tim.
Sertakan waktu penyelesaian utang teknis di setiap estimasi masa depan Anda, dan pastikan bahwa kualitas perangkat lunak yang Anda kirimkan adalah yang terbaik.
Jika Anda benar-benar harus menulis ulang sepenuhnya, Anda harus mengatasi masalah di Scrum Restrospective. Pemilik Produk pada akhirnya dapat membatalkan proyek dan memulai yang baru. Pemilik Produk juga satu-satunya yang dapat membatalkan sprint.
sumber
Saat Anda menggambarkan ini, saya harus mengatakan saya tidak melihat apa pun yang ada hubungannya dengan SCRUM, atau tim pengembangan produk Anda menjadi masalah saat ini .
Ini normal
Apa yang Anda gambarkan adalah entropi normal dari basis kode. Dalam kasus Anda, tim mungkin memulai lebih jauh dari ideal, tetapi masih setiap basis kode akhirnya menjadi Bola Besar Lumpur .
Dalam skenario greenfield yang benar-benar sempurna , yang dapat Anda lakukan adalah mulai lebih jauh dari entropi absolut dan bergerak lebih lambat.
Saya setuju dengan yang lain, kekacauan basis kode adalah karena pengembang. Saya yakin itu sebelum adopsi SCRUM selama bertahun-tahun.
Ini bukan keputusan teknis atau pengembang untuk menulis ulang, ini adalah keputusan bisnis.
Anda tidak tahu mengapa pemilik produk tidak ingin menulis ulang. Anda sebagai pengembang berpikir itu diperlukan, tetapi apakah benar-benar ada kasus bisnis untuk itu?
Jika ada kasus bisnis yang sebenarnya , bukan hanya melambaikan tangan; "kode ini adalah kekacauan lama yang ingin saya mulaii greenfield karena itulah yang saya inginkan" , maka manajemen akan menanggung biaya penulisan ulang, dengan pertimbangan pengembalian investasi itu.
Anda belum memberikan satu kasus bisnis yang kuat untuk ditulis ulang, hanya kata - kata kasar tentang pendapat Anda tentang bagaimana orang lain menyebabkan kekacauan ini dan Anda tidak ingin menghadapinya.
Bukti - Keuntungan mendorong keputusan bisnis untuk membuang perangkat lunak yang berfungsi, bukan OCD kebutuhan untuk basis kode yang bersih
Jika Anda benar-benar dapat menunjukkan bukti , bukan hanya teori tetapi bukti kuat bahwa pengeluaran
X
dolar untuk penulisan ulang greenfield akan dijamin menghasilkanX * N
dolar untuk bisnis dalamY
kerangka waktu (di manaN
tinggi danY
pendek), Anda mungkin mendapatkan daya tarik dari manajemen . Ini adalah kasus yang sangat tidak mungkin Anda sajikan dan buktikan.Kalau tidak, Anda hanya perlu menghadapinya, ini adalah kenyataan. Bertentangan dengan pernyataan Anda yang bersikeras bahwa sama sekali tidak ada jalan ke depan tanpa penulisan ulang yang hebat ini, saya berani bertaruh uang bahwa 5+ tahun dari sekarang basis kode yang Anda keluhkan masih akan bekerja dan berjalan di suatu tempat menyediakan fungsionalitas dan nilai seseorang lama setelah Anda telah meninggalkan perusahaan.
sumber
Saya biasanya skeptis ketika orang mendorong untuk "penulisan ulang besar". Ada beberapa kasus di mana itu pasti masuk akal tetapi sebagian besar waktu, bahwa kode warisan memiliki nilai (dalam hal ini sudah dalam produksi dan digunakan untuk tujuan yang menginspirasi pembuatannya). Melakukan penulisan ulang besar dalam banyak kasus adalah kebalikan dari gesit. Berapa lama waktu yang dibutuhkan untuk membawa versi baru aplikasi ke titik di mana ia dapat menggantikan aplikasi yang sudah ada.
Pendekatan yang saya inginkan adalah apa yang disebut Martin Fowler sebagai anggur mencekik . Menerapkan fungsionalitas baru (termasuk perubahan pada fungsionalitas yang ada) menggunakan pendekatan baru tetapi menggunakan aplikasi yang ada sebagai terali yang dapat ditumbuhkan oleh fungsionalitas baru. Ini memberi Anda yang terbaik dari kedua dunia, Anda tidak harus menghentikan semuanya saat penulisan ulang besar dilakukan untuk menghabisi, tetapi Anda mendapatkan manfaat dari penulisan kode baru yang memanfaatkan kerangka kerja yang diperbarui. Ini jelas merupakan pendekatan yang lebih sulit daripada mulai bersih dan mungkin tidak se-seksi, tetapi memberikan nilai lebih untuk bisnis daripada membuang semua yang ada di sana karena sudah ketinggalan zaman.
sumber
Di mana saya berada dan bagaimana kami bekerja, inilah yang akan kami lakukan: Menulis cerita baru dan menyerahkannya kepada pemilik produk, yang kemudian akan memutuskan bagaimana memprioritaskannya. Contohnya adalah: "Sebagai Pengembang Produk X, saya ingin menulis ulang kode di area ini sehingga pengembangan di masa depan lebih efisien" Kriteria penerimaan kemudian harus sesuai: "Penulisan ulang / refactoring x sehingga lebih baik dengan cara ini.
Saya tidak tahu tentang situasi di mana Anda berada tetapi di sini jika kami ingin memulai kembali dari awal, itu akan menjadi masalah dengan pemilik produk dan membujuk mereka mengapa dan kemudian menulis tumpukan cerita untuk menciptakan kembali yang sudah ada fungsionalitas.
Hal-hal lain yang telah kami lakukan untuk mencoba dan menangani kode buruk dan / atau lawas adalah memasukkan tugas untuk mengerjakan ulang saat menugasi cerita pengguna.
sumber
Memutuskan penulisan ulang besar adalah keputusan bisnis. Anda dapat mencoba memengaruhi keputusan bisnis dengan menjual sudut pandang Anda kepada orang yang bertanggung jawab atas bagian bisnis.
Namun; perubahan kualitas kode dari satu iterasi ke iterasi berikutnya adalah keputusan pengembang. Jika Anda membiarkan kualitas kode menurun, Anda menambahkan utang teknis untuk memenuhi harapan pemilik produk sekarang. Yang dapat Anda lakukan adalah mulai mengambil tanggung jawab atas kode yang Anda tulis dan memastikannya meningkatkan basis kode, bukan sebaliknya. Sekarang ini berarti Anda akan kehilangan kecepatan, karena Anda terus mengurangi jumlah utang teknis, dan pemilik produk Anda pasti akan kecewa. Anda dapat mencoba menjelaskan bahwa dengan keinginan Anda, Anda membiarkan kualitas kode menurun dan Anda sekarang mengambil langkah-langkah untuk memperbaiki masalah ini.
Sekarang, saya menyadari bahwa ini adalah langkah yang menakutkan untuk diambil, dan mungkin terasa tergoda untuk menunda satu sprint lagi sehingga Anda dapat keluar fitur X sebelum tenggat waktu yang penting. Sayangnya, itu hanya akan semakin sulit semakin lama Anda menunggu.
Omong-omong, ini bukan semata-mata masalah Scrum, saya juga tidak menyarankan solusi yang khusus untuk Scrum. Ini tentang pengembang yang memiliki kode.
sumber
Pengembang bertanggung jawab untuk memberi tahu dunia tentang kondisi basis kode saat ini. Ini dapat terjadi selama scrum harian, retrospektif atau hanya secara informal. Ini mungkin tampak jelas tetapi jika Anda tidak mengungkapkan dengan jelas betapa berantakannya dan berapa banyak waktu yang Anda buang karena itu, tidak ada yang akan memerhatikan. Scrum Master biasanya akan bertanggung jawab untuk meneruskan informasi ke PO dan orang-orang yang bertanggung jawab atas proyek dan membujuk mereka sesuatu yang perlu dilakukan, dan kemudian memfasilitasi implementasi solusi oleh tim.
Sebagai catatan, penulisan ulang big bang adalah IMO belum tentu jawaban yang tepat untuk masalah seperti ini. Namun para devs sudah bosan dengan basis kode saat ini, mengambil langkah-langkah kecil terukur menuju arsitektur yang lebih bersih seringkali merupakan ide yang lebih baik karena Anda dapat melihat kemajuannya, membenarkan pekerjaan Anda dengan secara teratur menunjukkan pada PO pencapaian dan melanjutkan alur penerapan pengguna baru cerita secara paralel sebagai lawan tersesat dalam makeover tanpa akhir yang memonopoli sumber daya.
sumber
Kamu bertanya:
Sebagai seseorang yang merupakan manajer dan pengembang, jawaban paling sederhana untuk pertanyaan Anda adalah tidak ada bagian dalam Scrum, atau metodologi lain, atau dalam skenario bisnis apa pun, di mana pengembang memiliki kekuatan untuk mengatakan cukup sudah cukup dan menuntut menulis kembali. Banyak orang di sini telah membuat argumen yang baik, valid, untuk menjelaskan mengapa menulis ulang sering kali merupakan ide yang buruk, dan untuk menjelaskan bagaimana perubahan dapat dan harus dilakukan dengan cara yang bertahap dan gesit. Dan saya setuju dengan mereka semua.
Tetapi intinya bahkan lebih sederhana. Anda tidak bisa membuat keputusan itu, PERNAH. Anda adalah karyawannya, dan satu-satunya keputusan yang benar-benar Anda ambil adalah "akankah saya terus bekerja untuk para bajingan ini atau mencari pekerjaan baru yang takut akan keterampilan gila saya?" Pekerjaan baru Anda tidak akan memungkinkan Anda untuk membuat keputusan itu juga, tetapi setidaknya Anda akan merasa seperti Anda mengendalikan nasib Anda saat Anda melompat dari satu pekerjaan ke pekerjaan lain.
sumber
Saya merasakan sakit Anda, tetapi tidak yakin apa hubungannya dengan Scrum. Keputusan untuk menulis ulang kode tidak tergantung pada proses pengembangan.
sumber
Tunggu apa?
Anda menambal ? Anda harus refactoring . Menempel nilai-nilai lincah. Gunakan TDD dan praktik yang sesuai dan situasinya pada akhirnya akan menjadi lebih baik.
sumber