Saya seorang pengembang junior (~ 3 tahun exp.) Dan di pekerjaan saya, kami sedang dalam proses merancang sistem baru. Pengembang utama saya akan menjadi arsitek utama, namun dia menantang saya untuk mencoba merancang sistem sendiri (secara paralel).
Selama beberapa iterasi ide-ide brainstorming dan mengusulkan apa yang saya lihat sebagai saran arsitektur, kepemimpinan saya telah memberi saya umpan balik bahwa sebagian besar dari apa yang saya lakukan adalah "merancang" dan bukan "merancang".
Dia menggambarkan perbedaan itu sebagai arsitektur yang menjadi agnostik-implementasi sedangkan desain adalah deskripsi dari suatu implementasi. Dia mengatakan saya harus melepas topi desainer saya dan mengenakan topi arsitek saya. Dia memberi saya sedikit nasihat tentang cara melakukannya, tetapi saya juga ingin bertanya kepada Anda:
Bagaimana saya keluar dari mode perancang perangkat lunak dan mulai berpikir lebih seperti seorang arsitek?
Berikut adalah beberapa contoh "desain" yang saya buat yang tidak terlihat relevan dengan arsitektur oleh pemimpin saya:
- Saya datang dengan suatu algoritma untuk memuat dan membongkar sumber daya dari sistem kami dan pimpinan saya mengatakan bahwa algoritma secara kategoris bukan arsitektur.
- Saya datang dengan serangkaian acara yang harus dinaikkan sistem dan dalam urutan apa ia harus membesarkannya, tetapi ini juga tampaknya tidak memotongnya sebagai arsitektur.
Saya tampaknya terjebak dalam detail dan tidak melangkah mundur cukup jauh. Saya menemukan bahwa bahkan ketika saya datang dengan sesuatu yang berada pada tingkat arsitektur, saya sering tiba di sana dengan mencoba berbagai implementasi dan mencari-cari detailnya kemudian generalisasi dan abstrak. Ketika saya menggambarkan ini sebagai petunjuk, dia mengatakan bahwa saya mengambil pendekatan yang salah: saya harus berpikir "top down" dan bukan "bottom up".
Berikut adalah beberapa detail yang lebih spesifik tentang proyek ini :
- Proyek yang kami buat adalah aplikasi web.
- Saya memperkirakan sekitar 10-100 ribu baris kode.
- Kami baru memulai. Tim teknik kami adalah sekitar 3-5 orang.
- Hal terdekat yang bisa saya bandingkan dengan aplikasi kami adalah CMS yang ringan. Ini memiliki kompleksitas yang sama dan sebagian besar berkaitan dengan pemuatan dan pembongkaran komponen, manajemen tata letak, dan modul gaya plug-in.
- Aplikasi ini ajax-y. Pengguna mengunduh klien sekali kemudian meminta data saat dibutuhkan dari server.
- Kami akan menggunakan pola MVC.
- Aplikasi akan memiliki otentikasi.
- Kami tidak terlalu peduli dengan dukungan browser lama (wah!), Jadi kami ingin memanfaatkan yang terbaru dan terhebat yang ada di sana dan akan keluar. (HTML5, CSS3, WebGL ?, Ekstensi Sumber Media, dan banyak lagi!)
Berikut adalah beberapa tujuan proyek :
- Aplikasi perlu ditingkatkan. Dalam waktu dekat pengguna kami akan berada di urutan ratusan hingga ribuan, tetapi kami berencana untuk puluhan ribu hingga jutaan dan lebih.
- Kami berharap aplikasi ini akan ada selamanya. Ini bukan solusi sementara. (Sebenarnya kami sudah memiliki solusi sementara, dan apa yang kami buat adalah pengganti jangka panjang untuk apa yang kami miliki).
- Aplikasi harus aman karena mungkin memiliki kontak dengan informasi pribadi yang sensitif.
- Aplikasi harus stabil. (Idealnya, itu akan stabil di sekitar tingkat gmail tetapi tidak perlu berada di ekstrem penjelajah Mars.)