Ada banyak pertanyaan dengan jawaban yang baik tentang peran Arsitek Perangkat Lunak (SA) pada StackOverflow dan Programmer SE . Saya mencoba mengajukan pertanyaan yang sedikit lebih fokus daripada itu. Definisi SA sangat luas sehingga untuk pertanyaan ini mari kita mendefinisikan SA sebagai berikut:
Arsitek Perangkat Lunak memandu desain keseluruhan proyek, terlibat dengan upaya pengkodean, melakukan tinjauan kode, dan memilih teknologi yang akan digunakan.
Dengan kata lain, saya tidak berbicara tentang istirahat manajerial dan rompi di puncak (kata-kata berima lebih lanjut dihilangkan) jenis SA. Jika saya mengejar segala jenis posisi SA saya tidak ingin jauh dari pengkodean. Saya mungkin mengorbankan beberapa waktu untuk berinteraksi dengan klien dan Analis Bisnis, dll., Tetapi saya masih terlibat secara teknis dan saya tidak hanya mengetahui apa yang terjadi melalui rapat.
Dengan mengingat hal-hal ini, apa yang harus dibawa SA ke meja? Haruskah mereka datang dengan mentalitas "meletakkan hukum" (untuk berbicara) dan menegakkan penggunaan alat-alat tertentu agar sesuai dengan "jalan mereka," yaitu, pedoman pengkodean, kontrol sumber, pola, dokumentasi UML, dll? Atau haruskah mereka menentukan arah dan strategi awal kemudian diletakkan kembali dan melompat sesuai kebutuhan untuk memperbaiki arah kapal?
Tergantung pada organisasi ini mungkin tidak berfungsi. SA yang bergantung pada TFS untuk menegakkan segala sesuatu mungkin berjuang untuk mengimplementasikan rencana mereka di perusahaan yang hanya menggunakan StarTeam. Demikian pula, SA perlu fleksibel tergantung pada tahap proyek. Jika itu adalah proyek baru, mereka memiliki lebih banyak pilihan, sedangkan mereka mungkin memiliki lebih sedikit untuk proyek yang ada.
Berikut adalah beberapa cerita SA yang saya alami sebagai cara berbagi latar belakang dengan harapan jawaban atas pertanyaan saya juga dapat menjelaskan beberapa masalah ini:
Saya telah bekerja dengan SA yang kode ditinjau secara harfiah setiap baris kode tim. SA akan melakukan ini bukan hanya untuk proyek kami tetapi juga proyek lain dalam organisasi (bayangkan waktu yang dihabiskan untuk ini). Awalnya bermanfaat untuk menegakkan standar tertentu, tetapi kemudian menjadi melumpuhkan. FxCop adalah bagaimana SA akan menemukan masalah. Jangan salah paham, itu adalah cara yang baik untuk mengajar pengembang junior dan memaksa mereka untuk memikirkan konsekuensi dari pendekatan yang mereka pilih, tetapi bagi pengembang senior itu terlihat agak kejam.
Satu SA tertentu menentang penggunaan perpustakaan tertentu, mengklaim itu lambat. Ini memaksa kami untuk menulis banyak kode untuk mencapai hal-hal yang berbeda sementara perpustakaan lain akan menghemat banyak waktu. Maju cepat ke bulan terakhir proyek dan klien mengeluh tentang kinerja. Satu-satunya solusi adalah mengubah fungsionalitas tertentu untuk menggunakan pendekatan yang awalnya diabaikan meskipun peringatan awal dari para devs. Pada saat itu banyak kode yang dibuang dan tidak dapat digunakan kembali, yang mengarah ke kerja lembur dan stres. Sayangnya estimasi yang digunakan untuk proyek ini didasarkan pada pendekatan lama yang dilarang untuk digunakan oleh proyek saya sehingga itu bukan indikator yang tepat untuk estimasi. Saya akan mendengar PM mengatakan "kami pernah melakukan ini sebelumnya,"
SA yang akan menegakkan penggunaan DTO, DO, BOs, lapisan Layanan dan sebagainya untuk semua proyek. Pengembang baru harus mempelajari arsitektur ini dan SA secara tegas menerapkan pedoman penggunaan. Pengecualian untuk pedoman penggunaan dibuat ketika benar-benar sulit untuk mengikuti pedoman tersebut. SA didasarkan pada pendekatan mereka. Kelas untuk DTO dan semua operasi CRUD dihasilkan melalui CodeSmith dan skema basis data adalah bola lilin serupa lainnya. Namun, setelah menggunakan pengaturan ini di mana-mana, SA tidak terbuka untuk teknologi baru seperti LINQ to SQL atau Entity Framework.
Saya tidak menggunakan pos ini sebagai platform untuk ventilasi. Ada aspek positif dan negatif dari pengalaman saya dengan cerita SA yang disebutkan di atas. Pertanyaan saya sampai ke:
- Apa yang harus dibawa SA ke meja?
- Bagaimana mereka bisa mencapai keseimbangan dalam pengambilan keputusan?
- Haruskah seseorang mendekati pekerjaan SA (sebagaimana didefinisikan sebelumnya) dengan mentalitas bahwa mereka harus menegakkan aturan-aturan dasar tertentu?
- Ada hal lain yang perlu dipertimbangkan?
Terima kasih! Saya yakin tugas-tugas pekerjaan ini dengan mudah diperluas ke orang-orang yang merupakan dev senior atau lead teknis, jadi jangan ragu untuk menjawab pada kapasitas itu juga.