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.
Jawaban:
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.
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.
sumber
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.
sumber
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.
sumber
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
sumber
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:
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
sumber