Bagaimana menjaga konsistensi di seluruh arsitektur aplikasi saat tim tumbuh?


49

Sebagai satu-satunya pengembang dalam startup, saya memiliki kemewahan untuk dapat membuat banyak keputusan dalam arsitektur dan kerangka kerja aplikasi kita.

Maju cepat 4 tahun dan akuisisi kemudian, saya punya tim 5 dan banyak kali rasanya seperti barat liar. Orang membuat keputusan desain apa pun yang disukai mereka: integer dan enums untuk tipe DB di satu tempat dan merangkai yang lain, kerangka kerja ini untuk masalah dan kemudian kerangka kerja yang berbeda untuk masalah yang sama di tempat lain, dll.

Bagaimana cara saya menegakkan konsistensi? Rasanya penting bagi saya tetapi anggota tim saya tampaknya mengikuti metodologi "jika berhasil, berhasil".

Saya kira sebagian besar pertanyaan saya adalah: apakah tidak realistis bagi saya untuk mengharapkan standar seperti ini? Saya bergumul dengan gagasan untuk tampil sebagai seorang diktator yang menghambat kreativitas tetapi melakukan apa pun yang mereka inginkan tampaknya tidak dapat diukur.


8
Bisakah Anda memberi tahu kami sebanyak mungkin tentang proses SDLC yang ada? Apakah Anda Waterfall, Agile, dll? Apakah Anda menggunakan TFS atau manajemen tugas? Apakah Anda melakukan tinjauan kode atau menggunakan FxCop atau bentuk validasi kode lainnya? Apakah Anda menghasilkan dokumentasi desain? Apakah Anda memiliki peran arsitek yang ditunjuk?
John Wu


1
@gnat: Bukan duplikat yang bagus, jika jawabannya ada indikasi.
Robert Harvey

2
Agar adil, standar-standar ini seharusnya ditetapkan sejak dini dan berdasarkan pada dokumen "praktik terbaik" yang diterima secara luas sehingga tidak ada yang dapat mengeluh tentang favoritisme atau elitisme. Jika Anda mendapatkan pushback keras dari seseorang, Anda harus mempertimbangkan apakah satu koboi layak lingkungan sehat untuk sisa tim dan menggantikan yang koboi, mereka akan pergi sebelum mereka lama, mereka selalu melakukannya. Lalu saya pikir semua saran yang diberikan di bawah ini untuk menggunakan tinjauan kode yang ketat sebelum check-in dan menambahkan komponen arsitektur akan bekerja dengan sangat baik.
Patrick Hughes

1
Itu adalah cawan suci dari rekayasa perangkat lunak (selain dari cawan suci lainnya, yang merupakan persyaratan elisitasi yang akurat).
PMF

Jawaban:


55

Apa yang membuat Anda begitu istimewa?

CPU saya mengatakan ini berfungsi dan saya ingin pulang. Kenapa kamu menggangguku?

Anda dapat mengatasi sikap ini dengan memaksa semua orang mengeluarkan permintaan tarik. Tapi sekarang tenggat waktu sudah dekat. Kode buruk menekan gerbang puri Anda yang asli dan akhirnya Anda menyerah pada tekanan. Atau Anda menang hanya untuk menemukan semua orang pergi dan tidak ada yang menggunakan istana asli Anda.

Ada banyak alat yang membantu masalah ini. Kontrol sumber, ulasan kode, standar pengkodean, dll. Tetapi inti permasalahannya adalah opini subjektif Anda tentang apa yang terbaik harus dilihat sebagai relevan. Untuk itu Anda harus mendapatkan dan mempertahankan rasa hormat mereka. Lakukan itu dan ini jauh lebih mudah. Gagal melakukan itu dan tidak ada alat atau latihan yang akan menyelamatkan Anda.

Cara terbaik untuk melakukannya adalah berkomunikasi sejak dini. Jangan bilang "kami tidak menggunakan string untuk tipe DB kami di toko ini" 6 bulan setelah saya menyetujui ide itu. Memberitahu saya itu sudah terkubur dalam dokumentasi selama 2 tahun bukanlah pembenaran untuk membiarkan saya melakukan itu.

Untuk alasan apa pun Anda memiliki hal-hal yang Anda pedulikan. Jika Anda peduli tentang mereka dan ada gunanya berkomunikasi dengan jelas sebelum, selama, dan segera setelah pengkodean setiap modul.

Menguntit kode adalah praktik yang luar biasa. Investasikan dalam alat dan praktik apa pun yang Anda butuhkan sehingga Anda dapat meninjau kode dalam beberapa menit setelah itu ditulis. Program pasangan dan alat ini hanyalah kursi tamu.

Mengapa? Setiap detik yang berlalu setelah saya menulis kode secara eksponensial meningkatkan biaya untuk mengubahnya. Itu karena ingatanku pada kode memiliki waktu paruh. Aku mulai melupakannya begitu kandung kemihku meminta istirahat.

Kurangi hal-hal yang Anda pedulikan dengan prinsip-prinsip dasar mereka. Daripada memukul saya dengan daftar 101 aturan yang harus diikuti, beri saya 10 prinsip yang dilanggar sehingga saya bisa mencari tahu aturan apa yang seharusnya ada pada saya sendiri.

Berdayakan saya untuk memaksakan visi saya sendiri dengan membantu saya melihat visi Anda dan kami akan rukun.

Apakah saya tidak realistis mengharapkan standar seperti ini? Saya bergumul dengan gagasan untuk tampil sebagai seorang diktator yang menghambat kreativitas tetapi melakukan apa pun yang mereka inginkan tampaknya tidak dapat diukur.

Maka jangan mendikte! Jadikan ini pengalaman yang positif. Ini bukan omong kosong zaman baru hippy. Ini psikologi dasar. Anda mencoba mengubah perilaku manusia. Acak dan positif adalah yang paling menguatkan (tanyakan saja Las Vegas). Jika Anda menjadi negatif, Anda harus konsisten dengan penguatan Anda. Itu adalah rasa sakit yang tidak bisa didapat. Jadilah positif ketika Anda menyebarkan kebijaksanaan dan Anda bisa bersikap santai tentang hal itu.

Saya tahu dari mana Anda berasal karena saya pernah ke sana. Anda punya kendali dan sekarang hilang. Anda menginginkannya kembali. Nah, lupakan saja. Sekarang kamu punya tim. Mereka tidak perlu dikendalikan. Yang mereka butuhkan adalah kepemimpinan. Yang Anda butuhkan bukan kontrol. Itu pengaruh. Ini bekerja lebih baik dan jauh lebih sedikit pekerjaan. Kuasai itu dan santai. Ini pasti menyenangkan.

Lakukan dengan benar dan Anda bisa pergi berlibur dan ini masih akan berhasil. Bagaimana? Dengan tidak hanya menjadi pemimpin tetapi dengan membuat orang lain menjadi pemimpin juga. Setelah Anda menanamkan visi Anda dalam tim, mereka dapat bekerja saat Anda pergi hanya dengan meniru apa yang telah Anda lakukan. Bimbing para pemula dan dorong mereka untuk melangkah dan memengaruhi orang lain juga.

Saya tahu ini sulit. Kami tidak masuk ke profesi ini karena kami pandai berurusan dengan orang. Kami berkomunikasi terbaik dengan kode. Tidak apa-apa. Lakukan dengan cepat dan sering. Tunjukkan padaku mengapa milikmu lebih baik. Dengarkan jika saya katakan tidak. Lakukan ini selagi saya masih memikirkannya. Saya suka kode. Ada beberapa orang di planet ini yang bisa saya bicarakan. Jadilah salah satu dari mereka.


4
Ini cukup jelas apa yang Anda maksud dengan "kode menguntit" ... Tapi google tidak memberi saya apa-apa selain hukum kejahatan dari seluruh dunia.
Jeremy

3
tambahkan "standar pengkodean" ke daftar
BЈовић

5
Karena saya sepertinya memperkenalkan istilah saya akan memberikan etimologi 'kode menguntit'. Saya telah memeriksa beberapa kode yang menggunakan pabrik abstrak untuk mendapatkan cap waktu itu. Pengembang rekan berusaha untuk menggabungkan (memeriksa kode) dan sedang menggulir perubahan kode sejak dia keluar. Dia memperhatikan pabrik saya dan berpikir itu aneh. Dia tidak yakin mengapa saya melakukan ini. Jadi dia berjalan mendekat dan bertanya padaku. Ketika aku tampak bingung dia berkata, "Oh, aku hanya kode yang menguntitmu". Facebook mengubah kosakata kami.
candied_orange

1
Benar! " Berdayakan aku untuk memaksakan visiku sendiri dengan membantuku melihat visimu dan kami akan rukun. " Aku suka ketika puisi, kode, dan filsafat bercampur!
Pedro Lobito

@candied_orange: Saya agak bingung dengan hal "penguntaian kode" keseluruhan. Apakah Anda hanya memukulnya? Dalam konteks jawaban Anda, sepertinya dia akan menguntit Anda.
Robert Harvey

23

Pertama, buat orang untuk mempertahankan hal-hal yang tidak mereka tulis. Sangat mudah bagi pengembang untuk terbiasa menggunakan kerangka kerja dan teknik yang biasa mereka gunakan. Sangat menggelikan harus beralih antara kerangka kerja dan metodologi. Jika seseorang dipaksa untuk pindah ke luar sudut kode mereka sendiri dan mengalami hal itu sering, itu akan mendorong beberapa keluhan dan mudah-mudahan beberapa diskusi yang produktif yang dapat menyebabkan orang ingin membakukan sesuatu.

Selanjutnya, tarik permintaan dan ulasan kode. Jangan pernah mengizinkan kode digabungkan ke cabang utama Anda tanpa ulasan kode terlebih dahulu. Siapa pun bisa melakukannya. Sekali lagi, ketika seseorang melihat sesuatu yang berbeda dari apa yang akan mereka lakukan, itu dapat mendorong diskusi dan kerja tim untuk mencapai solusi yang lebih baik. Ini juga membuat semua orang menjadi penjaga basis kode, yang (mudah-mudahan) membuat orang peduli dan status kode yang masuk ke dalamnya.

Akhirnya, berdiskusi desain. Mereka bisa formal atau informal, tetapi memilikinya. Biarkan mereka yang ingin berpartisipasi melakukannya. Diskusikan kerangka kerja apa yang ingin Anda gunakan, pro dan kontra enum vs ints, dll. Kemudian, buat keputusan dan dokumentasikan di suatu tempat (seperti dokumen standar). Maka Anda memiliki sesuatu untuk ditunjukkan ketika masalah muncul. Juga, jangan takut untuk meninjau kembali keputusan standar. Teknologi berubah (dengan cepat) dan demikian juga kebutuhan Anda sebagai tim dan sebagai perusahaan.

Bantu orang lain untuk melihat apa yang Anda lihat dan rasakan seperti mereka memiliki andil dalam kualitas kode. Kemudian dengan lembut mendorong diskusi untuk menemukan standar ketika perbedaan pendapat muncul.


Yang menyenangkan tentang metode ini adalah bahwa manajer tidak hanya memaksakan pilihannya, dia memberi tim kesempatan untuk memutuskan, dan memberi mereka kekuatan untuk menegakkannya.
Robin Bennett

6

Lakukan tinjauan kode setiap kali seseorang ingin menggabungkan kode ke cabang utama / trunk dan menahan orang-orang ke standar tersebut ketika meninjau kode.

Dan saya tidak bermaksud bahwa hanya Anda yang harus melakukan tinjauan kode. Setiap orang harus meninjau kode orang lain. Ini menyebarkan pengetahuan tentang sistem di seluruh tim tetapi juga menciptakan situasi di mana Carol meninjau kode Bob dan berkata, "Saya melihat Anda menggunakan bilangan bulat di sana. Saya selalu menggunakan enum." Mereka menemukan perbedaan yang Anda lihat dan, dengan asumsi mereka peduli, mereka akan menyadari bahwa semua orang harus masuk ke halaman yang sama.

Standar yang diterima dan disepakati akan muncul, pada titik mana Anda mendokumentasikannya dan memastikan orang mengikutinya. Ini akan mencakup hal-hal seperti "enum dalam DB untuk ...", dll. Anda juga dapat menyertakan dokumentasi kerangka kerja mana yang digunakan, dll.


Saya kira sebagian besar pertanyaan saya adalah apakah saya tidak realistis mengharapkan standar seperti ini. Saya bergumul dengan gagasan untuk tampil sebagai seorang diktator yang menghambat kreativitas tetapi melakukan apa pun yang mereka inginkan tampaknya tidak dapat diukur
Deekor

3
@ Matius, sementara saya umumnya setuju dengan Anda, saya akan melakukan ini dalam urutan terbalik. Ulasan desain terlebih dahulu, dan pedoman muncul dari / selama ulasan desain. Jika Anda meletakkan beban untuk menuliskan semuanya di muka pada arsitek / lead, itu mengalihkan beban ke intervenor .
Nick Alexeev

@ Deekor: Anda harus memilih pertempuran Anda. Cari tahu apa yang harus Anda lakukan, dan dokumentasikan itu. Anda tidak harus mendikte semuanya.
Robert Harvey

2
@ Deekor, Anda dapat menerapkan standar dan praktik pengkodean umum tanpa "menahan kreativitas." Lagipula itu argumen palsu. Standar pengkodean umum mengarah pada perangkat lunak yang mudah dirawat. Pengkodean gratis untuk semua mengarah pada mimpi buruk.
Matius

1
@Nick Alexeev, saya setuju; akan diedit.
Matius

1

Jika memungkinkan, Anda dapat menulis alat / skrip untuk secara otomatis menganalisis proyek Anda dan menentukan standar, alat, dan pendekatan mana yang digunakan proyek. Anda bisa melakukan ini dengan menjalankan alat kustom sebagai bagian dari CI membangun.

Suruh output dari alat ditulis ke dokumen 'kartu skor', misalnya lembar google dengan baris per unit (misalnya per 'aplikasi' atau proyek atau api atau apa pun), dengan kolom untuk berbagai metrik / standar diikuti. Ini akan memberikan visibilitas kepada orang-orang tentang standar apa yang ada, seberapa baik mereka diadopsi, dll. Dan memberikan beberapa perintah untuk kekacauan.

Anda juga dapat memperbarui kolom secara manual, tetapi semoga tetap diperbarui: D


0

Selain jawaban yang diberikan saya katakan Anda harus mendidik tim Anda tentang apa yang Anda harapkan dari mereka sebagai profesional pengembangan perangkat lunak, mulai dari saat mereka sedang wawancara untuk bergabung dengan perusahaan.

1 - Buat dan ikuti konvensi basis kode

Ini adalah salah satu langkah paling mendasar namun bermanfaat yang dapat Anda adopsi untuk meningkatkan kualitas kode. Sebagai hasil dari konvensi berikut, kode sumber akan seragam di seluruh basis kode, mengurangi upaya kognitif untuk mencari dan membaca file kode.

2 - Menerapkan arsitektur perangkat lunak yang jelas

Basis kode proyek perangkat lunak yang tidak mengikuti gaya arsitektur yang jelas, apa pun itu, memburuk secara bertahap ketika kode baru yang tidak terstruktur ditambahkan, menjadi lebih sulit untuk dimodifikasi. Oleh karena itu pentingnya menempatkan jam untuk desain dan konservasi arsitektur perangkat lunak yang memadai.

3 - Lebih sedikit lebih baik: Bahasa, Kerangka Kerja dan Peralatan

Dengan setiap bahasa tambahan, kerangka kerja dan alat yang Anda perkenalkan ke dalam sistem Anda, muncul biaya pengembangan dan operasional tambahan. Anda harus selalu mengevaluasi biaya jangka panjang dari keputusan teknologi sebelum membuatnya untuk memecahkan masalah jangka pendek. Hindari teknologi yang berlebihan, dan manfaatkan tumpukan Anda saat ini.

4 - Libatkan tim Anda dalam keputusan desain sistem

Cara paling efektif untuk membangun lingkungan pengetahuan bersama adalah dengan melibatkan tim dalam semua keputusan desain sistem. Banyak manfaatnya:

  • Individu merasa dihargai dan menjadi bagian dari tim
  • Keputusan penting ditantang oleh seluruh tim sebelum dibuat
  • Kekuatan dan kelemahan desain sistem lebih jelas dipahami oleh semua orang
  • Menciptakan rasa akuntabilitas dan kepercayaan kolektif

5 - Aturan All-in

Saya berpendapat bahwa upaya untuk memperbaiki desain sistem harus dilakukan sampai selesai (all-in), daripada sebagian disimpulkan. Ada risiko besar mengikis desain sistem Anda jika pengembang merasa bebas untuk menerapkan gaya pengkodean dan pola arsitektur yang berbeda secara lokal kapan pun mereka mau.

Pada titik ini, jika Anda telah berhasil menerapkan saran sebelumnya, tim Anda kemungkinan besar akan mengevaluasi perilaku pengembang nakal ini sebagai tidak profesional dan tidak bertanggung jawab.


Saya baru-baru ini menulis posting blog tentang subjek ini, Anda dapat menemukan informasi rinci tentang topik-topik ini di sana: https://thomasvilhena.com/2019/11/system-design-coherence

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.