私はジュニア開発者(経験3年以下)であり、仕事では新しいシステムを設計しています。私の主任開発者はプリンシパルアーキテクトになりますが、彼はシステムを自分で(並行して)設計しようと挑戦しました。
アイデアをブレインストーミングし、私がアーキテクチャの提案として見たものを提案するいくつかのイテレーションの過程で、私のリードは私がやっていることのほとんどが「設計」ではなく「設計」であるというフィードバックを私に与えました。
彼は、設計は実装の記述であるのに対し、アーキテクチャは実装に依存しないと説明しました。彼は、デザイナーの帽子を脱ぎ、建築家の帽子をかぶる必要があると言いました。彼は私にそうする方法について少しアドバイスをくれましたが、私もあなたに尋ねたいと思います:
ソフトウェアデザイナーモードから抜け出し、アーキテクトのように考え始めるにはどうすればよいですか?
ここに、私が思いついた「デザイン」の例をいくつか示しますが、それは私のリードではアーキテクチャに関連するとは見なされませんでした。
- 私たちのシステムからリソースをロードおよびアンロードするためのアルゴリズムを思いつきました。私のリードは、アルゴリズムは明確にアーキテクチャではないと述べました。
- システムが発生させる一連のイベントと、それらを発生させる順序を考え出しましたが、これもアーキテクチャとしてそれを削減するようには見えませんでした。
私は細部に巻き込まれ、十分に後退していないようです。アーキテクチャレベルの何かを思いついたとしても、さまざまな実装を試し、詳細をいじってから一般化して抽象化することで、そこにたどり着くことがよくありました。これをリードに説明したとき、彼は間違ったアプローチを取っていると言いました。「ボトムアップ」ではなく「トップダウン」を考える必要がありました。
以下に、プロジェクトに関する具体的な詳細を示します。
- 設計しているプロジェクトはWebアプリケーションです。
- およそ10〜10万行のコードを見積もっています。
- 私たちは新興企業です。当社のエンジニアリングチームは約3〜5人です。
- 私たちのアプリケーションと比較できる最も近いものは、軽量のCMSです。同様の複雑さを持ち、主にコンポーネントのロードとアンロード、レイアウト管理、プラグインスタイルのモジュールを扱います。
- アプリケーションはajax-yです。ユーザーはクライアントを一度ダウンロードしてから、サーバーに必要なデータを要求します。
- MVCパターンを使用します。
- アプリケーションには認証があります。
- 古いブラウザのサポートについてはあまり心配していません(なんと!)ので、私たちは世の中にあり、今後出てくる最新かつ最高のものを活用したいと考えています。(HTML5、CSS3、WebGL?、Media Source Extensionsなど)
ここではいくつかあるプロジェクトの目標は:
- アプリケーションはスケーリングする必要があります。近い将来、私たちのユーザーは数百から数千のオーダーになりますが、数万から数百万以上を計画しています。
- アプリケーションがいつまでも続くことを願っています。これは一時的な解決策ではありません。(実際には、私たちはすでに一時的な解決策を持っています。私たちが設計しているのは、私たちが持っているものの長期的な置き換えです)。
- 機密性の高い個人情報との接触がある可能性があるため、アプリケーションは安全でなければなりません。
- アプリケーションは安定している必要があります。(理想的には、Gmailのレベルで安定しますが、火星探査機の極端にある必要はありません。)