Bagaimana mencegah rekan memperkenalkan kompleksitas dan abstraksi yang ekstrem?

14

Saya mengalami waktu yang sangat sulit karena kolega saya tampaknya menunjukkan

  1. Upaya optimalisasi dini / tidak perlu
  2. Deduplikasi prematur dengan abstraksi yang dipertanyakan
    Sebagai contoh, kami menggunakan arsitektur VIPER yang dimodifikasi. Dia memperkenalkan kelas dasar untuk komponen Router (menggunakan generik) sebagai bagian dari penerapan tumpukan viper pertama tanpa benar-benar tahu apa yang sebenarnya akan diduplikasi di router lain. Sekarang kita terjebak dengan harus menyediakan jenis UseCaseyang memegang kasus penggunaan, tetapi sebagian besar router tidak memiliki banyak kasus penggunaan, hanya satu.
  3. Menciptakan solusi tujuan umum untuk potensi fitur spekulatif di masa depan
    Sebagai contoh, ia menulis manajer untuk mengisi tampilan tabel sel statis ketika kami hanya memiliki dua layar seperti ini di aplikasi dan ia tidak menyadari desain akan beralih dari bentuk vertikal yang membosankan ke yang lebih khusus. UI jadi manajer tidak berguna.
  4. Memilih untuk kompleksitas insidental

Bagaimana saya melawan ini ketika dia juga menunjukkan memiliki hambatan bahasa dengan bahasa Inggris yang buruk?

Earl Grey
sumber
Sudahkah Anda mencoba ulasan kode wajib untuk memberikan kesempatan untuk membahas apa yang sedang terjadi? Sudahkah Anda mencoba menaiki papan putih dengannya untuk memberikan solusi yang baik sebelum ia mulai menulis?
Becuzz
1
Bisakah Anda memberi contoh di mana situasi seperti dalam 2 atau 3 mungkin terjadi?
morbidCode
1
Saya merasakan sakit Anda, @EarlGrey. Saya mungkin belum pernah melihat kasus di mana pengkodean "generik" super muka benar-benar berfungsi seperti yang direncanakan di masa depan.
Graham
2
Saya tahu orang-orang yang menelepon menggunakan quicksort alih-alih gelembungort sebuah optimasi dini. Apa ambang batas Anda?
Pieter B
3
Rekan Anda tampaknya lupa / tidak menyadari prinsip YAGNI .
Bart van Ingen Schenau

Jawaban:

14

Deskripsi Anda terdengar seperti pengkodean yang saya lakukan pada 1990-an. Melakukan dengan tepat untuk dunia modern tidaklah mudah. Saya sarankan fokus pada faktor-faktor berikut:

  • Pemasangan. Dua pasang mata dapat membantu melindungi satu orang dari implementasi yang hebat, tetapi rumit.
  • Ulasan Kode. Toko-toko modern meninjau 100% dari semua perubahan kode oleh banyak orang
  • Cakupan Tes. Pastikan ada tes sederhana. Tes yang terlalu rumit dapat mencerminkan kode yang terlalu rumit
  • Banyak diskusi tentang produk minimum yang layak. Hancurkan fitur menjadi komponen sekecil mungkin. Tidak apa-apa untuk memiliki satu tiket untuk mengubah database, yang lain untuk mengisi tabel referensi dan kemudian yang ketiga untuk memperbarui UI (bagian yang benar-benar akan terlihat oleh pengguna akhir), tetapi itu akan terasa kontra-intuitif seperti yang pertama karena resistensi adalah mungkin.
  • Diskusi yang sering dilakukan tentang cara memiliki tiket dan perubahan yang lebih kecil.
  • Voting poin cerita oleh seluruh tim untuk membuka diskusi tentang kompleksitas dan pendekatan.
  • Pendidikan. Pastikan Anda memiliki Makan Siang dan Belajar, sesi Pelatihan, dll. Sehingga orang-orang bisa mendapatkan praktik yang baik dan mengapa hal itu baik.

Dari semua hal di atas, dua titik fokus utama saya adalah ulasan kode dan cerita yang lebih kecil.

Pada akhirnya saya pikir solusi terbaik untuk mengubah perilaku yang ada adalah memiliki orang yang berdedikasi memimpin perubahan. Dalam organisasi Agile (kemungkinan mayoritas saat ini), dibutuhkan orang yang berdedikasi seperti scrum-master untuk terus-menerus mengajukan pertanyaan yang tepat dan memandu pendekatan pengembangan. Di organisasi terakhir saya, kami memiliki selusin dari mereka, satu di setiap tim untuk membantu membimbing orang melalui masalah semacam ini. Ini menghilangkan kebutuhan untuk satu anggota tim pengembang untuk mencoba meyakinkan yang lain bahwa 'jalan mereka benar' yang sering dapat menyebabkan pertukaran sengit dan darah buruk.

Michael Durrant
sumber