StackOverflow と Programmers SE でのソフトウェアアーキテクト(SA)の役割について、多くの質問がありました。私はそれらよりも少し焦点を絞った質問をしようとしています。 SAの定義自体は広いので、この質問のために、SAを次のように定義します。
ソフトウェアアーキテクトは、プロジェクトの全体的な設計をガイドし、コーディング作業に関与し、コードレビューを実施し、使用するテクノロジーを選択します。
言い換えれば、私は管理上の休息とSAの種類(さらに韻を踏んだ言葉は省略されます)の頂上でのベストについて話しているのではありません。あらゆるタイプのSAポジションを追求する場合、コーディングから離れたくありません。クライアントやビジネスアナリストなどとやり取りするために少し時間を犠牲にするかもしれませんが、技術的にはまだです。関与し、私は会議で何が起こっているのかを知っているだけではありません。
これらの点を念頭に置いて、SAをテーブルに持ち込む必要がありますか?彼らは(いわば)法律を定める)精神を持ち、特定のツールの使用を強制する必要があります「その方法」、つまり、コーディングガイドライン、ソース管理、パターン、UMLドキュメントなどに適合させるか?または、初期方向と戦略を指定してから、必要に応じて配置し、船の方向を修正する必要がありますか?
組織によっては、これが機能しない場合があります。 SAすべてを実施するためにTFSに依存する人は、StarTeamのみを使用する雇用主で計画を実装するのに苦労するかもしれません。同様に、SAプロジェクトの段階では、新しいプロジェクトであれば選択肢が増えますが、既存のプロジェクトでは選択肢が少なくなる可能性があります。
ここにいくつかのSAストーリーがあります。私の質問への回答がこれらの問題にいくつかの光を当てるかもしれないと期待していくつかの背景を共有する方法として私が経験した物語:
私はSAコードをチームのコードのすべての行で文字どおりレビューした人と協力してきました。SAは私たちのプロジェクトだけでなく他の人にもこれを行います組織内のプロジェクト(これに費やされる時間を想像してください)。最初は特定の標準を適用することは有用でしたが、後でそれは不自由になりました。FxCopはSAが問題を見つける方法でした。私を誤解して、ジュニア開発者に教えて、彼らに彼らが選んだアプローチの結果を考えるように強制することは良い方法でした、しかし上級開発者にとってそれは幾分厳格であると見られました。
ある特定のSAは、特定のライブラリの使用に反対しており、遅いと主張していました。これにより、他のライブラリが私たちに多くの節約をしてくれる一方で、異なることを達成するために大量のコードを書くことを余儀なくされました時間。プロジェクトの最後の月に早送りし、クライアントはパフォーマンスについて不満を言っていました。唯一の解決策は、開発者からの早期の警告にもかかわらず、最初は無視されていたアプローチを使用するように特定の機能を変更することでした。その時点で多くのコードがスローされました残念ながら、このプロジェクトに使用された見積もりは、私のプロジェクトで使用が禁止されていた古いアプローチに基づいていたため、見積もりの適切な指標ではありませんでした。PM「以前にこれを行った」と言いますが、実際には新しいライブラリを使用していたのでそうではなく、そのライブラリで作業している開発者は古いプロジェクトで使用していた開発者と同じではありませんでした。
SAすべてのプロジェクトでDTO、DO、BO、サービスレイヤーなどの使用を強制する人。新しい開発者はこのアーキテクチャとSA =厳格に施行された使用ガイドライン。ガイドラインに従うことが非常に困難な場合は、使用ガイドラインの例外が作成されました。SAは、そのアプローチに基づいています。DTOのクラスとすべてのCRUD操作は、CodeSmithを介して生成されましたとデータベーススキーマも同様のワックスの塊でしたが、SAはLINQ to SQLやEntity Frameworkなどの新しいテクノロジーには対応していませんでした。
私はこの投稿を通気用のプラットフォームとして使用していません。上記のSAストーリー)の経験には、プラス面とマイナス面がありました。私の質問は次のように要約されます。
ありがとう!これらの仕事は、上級開発者やテクニカルリードにも簡単に適用できると思いますので、その能力についてもお気軽に回答してください。
システムアーキテクトは次のことを行う必要があります。
SAはコーディングの方法を知っている必要があり、コーディング作業の一部に参加し、いわば手を濡らす必要があります。これにより、彼らは開発努力のゲシュタルトと連絡を取り合うことができます。ボブマーティンおじさん かつて言った のように、アーキテクトは自分でコーディングの一部を行う必要があります。そうすることで、彼は自分のデザインで他の人に与えている痛みを見ることができます。
SAは、すべてのデザイン、テクノロジー、コーディングスタイルの決定について最後の言葉を持っている必要があります。しかし、すべてのマネージャーと同様に、SAの仕事は、彼らが生産的になることができるように彼の人々のためのパス。それは、ほとんどの場合、開発者が彼らのレベルで問題がどのように解決されるかを決定することを意味します。それはSA先のとがった髪のボスを開発者のキュービクルから遠ざけます。これは、SAが必要に応じて役立つようにピッチすることを意味します。
すべての人間と同様に、SAは間違いを犯す可能性があります。良いものはそれらの過ちから学び、より良いSAになります。
主に実用的ではなかったという理由で、私は有用なアーキテクトに出会ったことがありません。
私にとって、私が目にした最大の問題は次のとおりです。
rewrite from scratch
考え方私が一緒に働いた中で最高の「建築家」がテーブルに持ち込まれました:
私にとっての問題は、私が一緒に仕事をした中で最も優れた「アーキテクト」でした。タイトルに「アーキテクト」はありませんでした。彼らは、ほとんどの場合、特定の問題とプロジェクトに基づいたソフトウェアエンジニアでした。ほとんどのビジネスでは、機能するコードベースを最初から書き直すのが現実的です。設計上の決定を行ったり、オプションとその理由や正当性を提供したりします。コードベースを新しいアーキテクチャに繰り返し適用して、すべての機能を維持する方法を示します。推奨するのではなく、保守的な推奨を行います。 dejourまたはなじみのあるものは何でも、それらは物事がどのように機能するか、そしてその理由についてのまとまりのあるビジョンを伝えます[〜#〜] but [〜 #〜]より重要なことは、そこに到達する方法とコストを明確にすることです。
1 SAはテーブルに何をもたらす必要がありますか?
2彼らはどのようにして意思決定のバランスをとることができますか?
3 SA仕事(前に定義したとおり))は、特定の基本ルールを適用する必要があるという考え方でアプローチする必要がありますか?
まだまだたくさんありますが、これについては本当に良い答えが出てくると思います。
1。SAはテーブルに何をもたらす必要がありますか?
「彼らは「法を定める」という考え方を持っていなければなりませんか...それとも、彼らは最初の方向と戦略を指定し、その後、船の方向を修正するために必要に応じて横になってジャンプしますか?」
両方の組み合わせだと思います。テクノロジーとプロセスを決定する際、意見や提案にオープンであることは、決定に関する貴重なフィードバック/インプットを提供し、他の人から学ぶようにさせることができます。あなたのチームは(うまくいけば)賢いです。それを利用してください。しかし、決定(あなたの決定)がなされると、法律が制定されました。自分の選択ではなかったものについて不満を言う人と、何でも選択して気にしない人を特定して、無視します。
テクノロジーに関しては、手元にあるものを使用してください。会社がStarTeamを使用している場合は、それを使用します。特定の製品/テクノロジー/プロセスと結婚しても、何もしません。
2.意思決定においてどのようにバランスをとることができますか?
チームに耳を傾け、彼らが正しいことを知るand間違っていること、そしてコジョーンに彼らが間違っていることを伝え、あなたの決断に固執することは重要です。耳を傾けないことは、あなたの決定に行き着くので、尊敬の欠如をもたらします。
3. SAジョブ(前に定義したとおり))が特定の基本ルールを適用する必要があるという考え方でアプローチする必要がありますか?
常に。そうでない場合、受刑者は、あからさまにまたはひそかに亡命を実行することになります。ただし、これらの基本ルールの決定は、チームとの話し合いを通じて行うことができます。どのチームも現在のメンバーと同じメンバーを常に持つとは限らない場合があるため、少人数のグループに譲歩を与えると、チームが去った後の将来のチームの妨げになる可能性があります。これにはSAが含まれます。
4.他に考慮すべきことはありますか?