Saran: Bagaimana cara meyakinkan pimpinan tim saya yang baru diurapi untuk tidak menulis basis kode dari awal

8

Saya bekerja di MNC yang cukup terkenal, dan modul tempat saya bekerja telah ditugaskan untuk "lead" baru. Basis kode cukup besar (~ 130K atau lebih, dengan saling ketergantungan pada modul lain), tetapi stabil - beberapa bagian telah tumbuh jelek selama bertahun-tahun, tetapi terbukti dalam kondisi kerja. (Produk kami berjalan selama bertahun-tahun pada mereka, bahkan yang baru). Masalahnya adalah, pimpinan kami ingin menulis ulang kode dari awal , untuk mencakup "rincian yang lebih baik dan desain proaktif".

Saya tahu dalam nyali saya itu bukan ide yang sangat bagus, tetapi bagaimana saya meyakinkan dia / anggota tim lainnya (yang jauh lebih senior dari saya dalam hal tahun exp), tanpa terdengar terlalu sombong sendiri (Anda tidak boleh menulis ulang, karena Joel et al memiliki artikel yang jelas melarangnya)?

Saya memiliki hubungan kerja yang baik dengan orang yang bersangkutan, dan tidak ingin merusaknya, tetapi saya juga tidak ingin menjadi bagian dari keputusan yang pasti akan mengganggu kami selama bertahun - tahun yang akan datang !! Adakah saran untuk pendekatan yang lebih ringan namun efektif? Bahkan kisah bagaimana Anda mengatasi situasi seperti itu sesuai dengan keinginan Anda akan sangat membantu saya!

EDIT: Basis kode yang saya bicarakan bukan produk / GUI, tetapi pada tingkat kernel dengan semua fungsi kritis untuk produk kami. Saya harap sekarang Anda tahu mengapa saya terdengar sangat memprihatinkan !!

TCSGrad
sumber
hanya untuk memastikan, sebelum memberi Anda nasihat semacam ini ... Apakah Anda melakukan banyak pekerjaan evolusi / pemeliharaan pada kode ini (dan akhirnya menghabiskan banyak waktu memperbaiki kesalahan regresi)? Apakah Anda perlu menambahkan fungsionalitas baru tetapi Anda tidak bisa karena Anda perlu menyentuh bagian "jelek" dari kode Anda? Saya pikir menulis ulang bukanlah SELALU ide yang buruk ...
@ Paolo - tidak, basis kode berfungsi dengan baik (saya berharap saya bisa memberi nama produk kami, Anda mungkin menggunakannya :)). Ada bug untuk beberapa pelanggan, tetapi tidak ada peretasan besar dalam kode (kecuali ketika kita harus menutup-nutupi kelemahan HW !!)
TCSGrad
1
Ada banyak pro dan kontra di c2.com/cgi/wiki?RewriteCodeFromScratch
k3b
Kode kernel 130k seperti apa adanya, dengan driver yang granularity baik dan desain proaktif. Apakah cukup menantang atau hampir tidak mungkin untuk mengimplementasikan / menghubungkan perangkat atau protokol baru? Apakah hasil dari perubahan yang dimaksudkan membuatnya lebih mudah bagi pelanggan / pengguna hilir?
JustinC
Pelanggan tidak akan merasakan apa pun - antarmuka cukup sederhana dan cukup kuat. Apa maksudnya, seperti yang telah saya tentukan, adalah untuk mengurangi "kompleksitas membaca kode". IMHO, itu pandangan yang sangat subjektif ... jika Anda menulis ulang seluruh kode dari awal, tentu saja akan lebih mudah bagi Anda untuk membaca - tetapi bagaimana dengan para insinyur baru, yang tetap harus membaca keduanya !!
TCSGrad

Jawaban:

8

Lakukan perhitungan matematika dengannya:

Di sisi hutang:

  • berapa lama untuk membuat ulang fitur yang Anda miliki sekarang. Berapa biayanya (devs + overhead)

  • seberapa besar kerugian perusahaan karena tidak dapat menggunakan fitur / perbaikan bug baru atau hanya pada tingkat yang jauh lebih lambat?

  • apa risiko tidak dapat menyelesaikan penulisan ulang dan kembali pada basis sumber saat ini setelah n-bulan? Termasuk risiko membunuh produk secara bersamaan.

  • Berapa lama sampai basis kode baru terlihat sama jeleknya dengan yang sekarang?

Di sisi aset:

  • seberapa baik kodenya setelah penulisan ulang (diukur dengan biaya perawatan yang disimpan per bulan)

Tambahkan semuanya, mungkin melakukan perbandingan skenario kasus terbaik / terburuk.

Pada akhirnya Anda akan memiliki jawaban. Jika dia mengabaikan jawabannya, bicarakan dengan bosnya.

Jens Schauder
sumber
Enumerasi hebat !! Saya akan menambahkannya ke catatan pertemuan saya !!
TCSGrad
3
Anda akan berpikir ini adalah cara untuk pergi tetapi itu gila bagaimana Anda akan terlalu memperkirakan waktu yang dibutuhkan untuk memasukkan fitur-fitur baru dalam basis kode lama sementara secara bersamaan meremehkan waktu yang dibutuhkan untuk mendapatkan "baru "basis kode ke daftar fitur yang lama.
wheaties
Poin Hebat Sebaiknya dapatkan estimasi ini dari semua pengembang yang terlibat Jadi setiap orang mendapatkan gambaran yang jelas.
Aditya P
@wheaties Itu tentu saja merupakan masalah dengan setiap perkiraan. Cara untuk bertarung adalah dengan mengulangi estimasi tersebut dan membandingkannya dengan kemajuan yang sebenarnya. (Pikirkan Pembakaran Produk)
Jens Schauder
cukup sering 'aset' kode baru tidak lebih baik daripada yang diganti - terutama setelah beberapa iterasi peningkatan dan pemeliharaan. Total penulisan ulang IMHO tidak pernah merupakan ide terbaik.
gbjbaanb
13

Wajib: Hal-hal yang Seharusnya Tidak Pernah Dilakukan, Bagian 1 (Anda pernah melihatnya, tetapi siapa tahu ada pertanyaan ini dan belum.)

Menulis ulang dari awal sangat menggoda bagi pengembang. Tidak ada yang mau mengerjakan kode warisan, semua orang ingin menulis kode baru yang seksi. Tetapi pada akhirnya itu tentang apa yang terbaik untuk bisnis. Mengapa diperlukan penulisan ulang? Bisakah mereka menyajikan kasus itu dengan cara yang jelas yang menunjukkan nilai tambah bagi bisnis?

Anda tidak harus meyakinkan mereka untuk tidak menghabiskan sumber daya. Mereka harus meyakinkan perusahaan untuk menghabiskan sumber daya.

David
sumber
Saya suka artikel itu. Aku benci menulis ulang!
Mark Canlas
3
@ Mark Canlas: Agak lucu sebenarnya, karena saya sering pendukung menulis ulang. Saya benci kode warisan :) Tapi saya juga mengerti bahwa jika saya tidak dapat menunjukkan nilai tambah untuk bisnis, penulisan ulang tidak boleh terjadi. Pendapat saya perlu didukung oleh angka.
David
2
Saya benci kode warisan juga, tetapi sejak membaca artikel itu, saya telah belajar untuk menghargai menjalankan kapal versus yang teoritis. Kapal yang rusak dan sedang berlari menghasilkan lebih banyak uang per jam dari pada yang hipotetis yang ditulis di atas serbet. Itu tindakan penyeimbang!
Mark Canlas
1
@ Mark Canlas: Tentu saja. Dan di situlah banyak pengembang (bahkan yang sangat berpengalaman dalam banyak kasus) kehilangan kendali mereka pada bisnis secara keseluruhan. Itu harus memiliki nilai nyata yang nyata untuk bisnis, dan sangat sering produk yang ada memiliki nilai itu. Meskipun satu argumen yang selalu saya benci dari bisnis adalah "kami sudah menghabiskan uang untuk hal ini, jadi kami perlu menggunakan ini." Terkadang, seperti dalam kasus pekerjaan terakhir saya, keputusan seperti itu mendorong mereka ke tanah. Ini bukan "selalu menulis ulang" atau "tidak pernah menulis ulang." Seperti yang Anda katakan ... keseimbangan.
David
8

Seberapa baik pendekatan pengujian Anda mencakup basis kode? Bagaimana dengan pengujian unit?

Jika tidak ada di sana, sarankan bahwa kode apa pun hanya ditulis ulang satu bagian pada satu waktu dan bahwa setiap bagian di bawah penulisan ulang hampir lengkap (90% +) cakupan kode tes unit. Setelah Anda melakukan ini, Anda akan menentukan bagian dari kode yang keduanya didefinisikan dengan baik (kami bisa mengujinya) dan juga memiliki antarmuka yang dikenal.

Pada titik itu, menulis ulang kode itu berisiko jauh lebih rendah. Kesalahan harus ditangkap oleh tes unit / tes lain, dan dengan asumsi Anda juga memiliki kontrol sumber dapat dengan mudah dikembalikan.

Mengambil penulisan ulang dalam potongan yang lebih kecil juga memungkinkan Anda dan pimpinan tim Anda untuk merasakan penulisan ulang yang lebih akurat. Apakah Anda berdua tahu apa yang Anda hadapi? Apakah salah satu dari kalian terlalu pesimis / optomistis?

Chris Pitman
sumber
Kode kernel 130k seperti apa adanya, dengan driver yang granularity baik dan desain proaktif. Apakah cukup menantang atau hampir tidak mungkin untuk mengimplementasikan / menghubungkan perangkat atau protokol baru?
JustinC
2

Ada beberapa faktor yang relevan untuk dipertimbangkan:

  • Fakta bahwa itu berfungsi seperti yang diinginkan pengguna adalah indikasi untuk memperbaiki daripada menulis ulang
  • Jika Anda memiliki unit test, pasti refactor daripada menulis ulang. Jika tidak, maka hal itu akan meningkatkan upaya antara refactoring dan penulisan ulang (dengan asumsi tujuan Anda adalah memiliki unit test untuk sistem yang dihasilkan). Jika Anda tidak memiliki tes unit, dan semua kode ada di lapisan GUI, bisa lebih cepat untuk menulis ulang, terutama jika fungsi sebagian besar rusak. Itu pengalaman saya.
  • Jika tujuan Anda adalah untuk sepenuhnya mengubah platform (kode tidak terkelola -> .NET atau Windows -> Linux atau PHP -> python, dll.) Maka itu argumen yang jelas dalam mendukung penulisan ulang.
Scott Whitlock
sumber
Tidak, kami tidak memiliki unittests.
TCSGrad
Ini tidak mungkin yang baru akan memilikinya juga, melihat jumlah pekerjaan yang sudah terlibat. Juga, basis kode yang saya bicarakan bukan produk / GUI, tetapi pada tingkat kernel dengan fungsi kritis untuk produk kami. Saya harap sekarang Anda tahu mengapa saya terdengar sangat memprihatinkan !!
TCSGrad
1
@ shan23 - mengapa Anda akan mulai menulis ulang dan tidak setidaknya mempertahankan tes penerimaan suite? Anda hanya akan membuat kekacauan yang sama. Fakta bahwa ia tidak memiliki GUI hanya membuatnya lebih mudah untuk diuji!
Scott Whitlock
0

Katakan saja tidak." Bersikaplah meyakinkan, tetapi berkeinginan untuk mengatakan, "Anda tidak hanya salah tentang manfaatnya, tetapi Anda salah karena boros upaya manusia."

Andy Finkenstadt
sumber
0

Di mana kasus bisnis untuk menulis ulang? Anda memiliki basis kode yang memenuhi kebutuhan. Memang, itu mungkin tidak sempurna, tetapi itu merupakan investasi besar dalam hal waktu dan sumber daya. Satu-satunya waktu yang dijamin penulisan ulang lengkap adalah ketika kualitas kode sangat buruk sehingga menyebabkan organisasi seseorang kehilangan uang atau peluang bisnis. Orang perlu mengingat pepatah lama, jika tidak rusak, jangan memperbaikinya!

bit-twiddler
sumber
Saya harus memberikan ini downvote karena pepatah itu adalah satu-satunya hal terburuk dalam industri kami; itu menumbuhkan kemalasan, ketidakmampuan dan perilaku malas di pengembang karena tidak ada yang punya nyali untuk mengatasi masalah dengan benar karena "itu bekerja" dalam beberapa kapasitas kecil.
Wayne Molina
@WayneM: opsi "menulis ulang" adalah yang terburuk, terlalu sering karena ego dan ketidakmampuan di antara dev yang tidak dapat bekerja dengan kode yang ada. Mereka ingin torewrite adalah hal baru yang keren, dan akhirnya membuat kesalahan yang lebih buruk dalam sikap salah kaprah mereka sehingga mereka jauh lebih baik daripada orang-orang yang melakukan hal terakhir. Hanya ketika kode lama telah berevolusi selama banyak waktu (atau omong kosong untuk memulai dengan) Anda harus menulis ulang, dan itupun refactoring serius harus dipertimbangkan terlebih dahulu.
gbjbaanb
0

Beli celana pendek sebanyak mungkin di bursa. Jika manajemen setuju untuk bunuh diri, setidaknya Anda harus mendapat uang darinya. Bagaimanapun, Anda akan segera berada di jalan setelah mereka tangki.

SnoopDougieDoug
sumber