Pertama, penting untuk membedakan arsitektur perangkat lunak (software) dengan praktik terbaik. Seorang insinyur perangkat lunak yang baik mungkin hebat dalam pengkodean, sangat baik dan terperinci dalam pendekatan mereka, dan memiliki banyak wawasan tentang masalah ini, namun tetap saja mungkin bukan arsitek yang baik.

Menurut seorang arsitek professional Gary Wisniewski (Pendiri treet.tv) minimal, arsitek yang memiliki kredibilitas baik harus memiliki keterampilan sebagai berikut:

Seorang arsitek sangat baik dalam masalah dekomposisi.

Penguraian masalah adalah keterampilan yang diperlukan untuk melihat masalah di hampir semua tingkat dan memecahnya ke dalam langkah dan potongan yang diperlukan untuk menerapkannya.

Seorang arsitek perangkat lunak dengan kredibilitas yang baik dapat mengambil pernyataan seperti “Sistem Pengendalian Lalu Lintas Udara kita tidak memadai dan kita memerlukan desain yang lebih baik” dan mengetahui pertanyaan yang diajukan untuk mulai menguraikan masalah menjadi komponen yang dapat dicapai, untuk menguraikan sasaran komponen tersebut menjadi sub-proyek yang dapat dicapai. Dan menguraikan sub-proyek tersebut menjadi tugas pemrograman yang dapat dicapai.

Seorang arsitek hebat dapat melakukan hal-hal ini pada tingkat atau skala apapun dari membayangkan proyek perangkat lunak bernilai miliaran dolar untuk memahami cara terbaik untuk menerapkan algoritma untuk mengatasi hubungan yang tidak dapat diandalkan. Skala tidak relevan karena prosesnya selalu sama.

Seorang arsitek memahami interface.

Antarmuka, baik dalam bentuk protokol, pustaka fungsi, antarmuka kelas, atau skema adalah alat utama yang dibutuhkan untuk mengelola kompleksitas proyek jika ada kontraktor dan pelaksana independen.

Dengan mengetahui proses, antarmuka yang tidak ambigu secara logis lengkap, seorang arsitek dapat memberdayakan banyak orang untuk membangun potongan sistem yang mudah terhubung untuk mencapai tujuan yang lebih besar.

Seorang arsitek memahami bahwa kompleksitas adalah musuh, dan memiliki penguasaan alat pemrograman dan paradigma yang diperlukan untuk mengurangi kompleksitas di semua komponen, untuk mengurangi kompleksitas antarmuka, dan memastikan redundansi atau pelaksanaan redundansi fungsi minimal. Mereka dapat dengan cepat mengenali algoritme dan implementasi yang terlalu spesifik atau terlalu umum, dan membimbing mereka dalam mengembangkan komponen yang hanya berfungsi dengan benar.

Seringkali, alat untuk mengelola kompleksitas adalah hal-hal seperti penyembunyian data, pemrograman berorientasi obyek dan rencana pengujian komprehensif untuk antarmuka standar. Tapi, seorang arsitek yang baik tidak dogmatis tentang alat dan teknologi karena mereka memiliki pemahaman akademis yang komprehensif tentang dasar-dasar dan alasan mengapa data menyembunyikan karya, dan mengapa bahasa tertentu mendukung prinsip desain yang baik dan yang lainnya tidak.

Seorang arsitek adalah seorang komunikator yang baik.

Seperti seorang penulis dan dokumenter yang baik dan produktif, dan pandai berbicara dalam bahasa pemrograman serta bahasa umum mereka yang menjadi pemangku kepentingan dalam perancangan sistem. Seiring dengan komunikasi yang baik, seorang arsitek yang baik dapat memberikan alasan konkret untuk praktik pemrograman daripada opini, dan menawarkan wawasan kepada tim mereka dan bukan argumen. Mereka sangat mendukung dan mencari pendapat pengguna tentang kesesuaian dengan kemampuan mereka sendiri atau pemrogram yang terlibat dalam proyek ini.

Seorang arsitek yang baik adalah pemimpin yang baik dan sangat baik dalam mendapatkan rasa hormat dari semua teknisi tempat mereka bekerja.

Biasanya ini berarti bahwa mereka memiliki tingkat keterampilan yang tinggi, telah bekerja dalam banyak bahasa, dan telah menjadi seorang arsitek sebelumnya, atau telah menunjukkan kemampuan mereka untuk menciptakan rancangan sistem yang tetap fleksibel dalam menghadapi perubahan.

Banyak definisi mencakup serangkaian kata kunci, menekankan metodologi seperti desain berbasis data, pemrograman tangkas, bahasa, platform, dan toolkit yang spesifik. Hal-hal ini adalah label terkini untuk berbagai teknik yang basisnya perlu dipahami dengan baik, tidak diterima karena mereka saat ini dalam mode.

Jadi, dalam banyak hal, keterampilan utama seorang arsitek adalah pengalaman, kecerdasan, kemauan untuk bekerja keras dan mengambil peran, intuisi yang baik, dan kemampuan untuk memecahkan masalah dengan menggunakan logika sehingga sebagai kata kunci industri datang dan pergi, desain mereka tetap berguna dan relevan.

Definisi di atas dengan sengaja tidak mencakup manajemen proyek, penjadwalan, dan keterampilan manajemen.

Peran arsitek adalah menciptakan sistem yang baik, bukan untuk memecahkan masalah tim atau anggaran.

Sebenarnya, yang terbaik adalah jika mereka yang memiliki anggaran dan masalah tim hanyalah pemangku kepentingan yang membantu menentukan salah satu kendala yang harus dihadapi arsitek, sama seperti jika itu adalah bagian dari masalah desain mereka.