StackOverflowおよびProgrammers SEでのソフトウェアアーキテクト(SA)の役割について、多くの質問があり、適切な回答があります。私はそれらよりも少し焦点を絞った質問をしようとしています。SAの定義は非常に広いため、この質問のためにSAを次のように定義します。
ソフトウェアアーキテクトは、プロジェクトの全体的な設計をガイドし、コーディング作業に関与し、コードレビューを実施し、使用するテクノロジを選択します。
言い換えれば、私は管理上の休息と、頂上(さらに押韻された言葉は省略された)タイプのSAについては話していない。何らかのSAポジションを追求する場合、コーディングから離れたくありません。クライアントやビジネスアナリストなどとのやり取りに時間を割くかもしれませんが、私はまだ技術的に関わっており、ミーティングで何が起こっているのかだけを知っているわけではありません。
これらの点を念頭に置いて、SAはテーブルに何をもたらすべきですか?彼らは「法を定める」(いわば)「特定のツール」の使用を「彼らのやり方」、つまりコーディングガイドライン、ソース管理、パターン、UML文書などに強制するという考え方で入るべきですか?または、彼らは最初の方向と戦略を指定してから、船の方向を修正するために必要に応じて元に戻して飛び込むべきですか?
組織によっては、これが機能しない場合があります。すべてを実施するためにTFSに依存するSAは、StarTeamのみを使用する雇用主で計画を実施するのに苦労する場合があります。同様に、SAはプロジェクトの段階に応じて柔軟である必要があります。新しいプロジェクトの場合は選択肢が多くなりますが、既存のプロジェクトでは選択肢が少なくなる可能性があります。
私の質問への回答がこれらの問題にいくらかの光を当てることを期待して、いくつかの背景を共有する方法として私が経験したいくつかのSAの物語があります:
私は、チームのすべてのコード行を文字通りコードレビューするSAと協力しました。SAは、プロジェクトだけでなく、組織内の他のプロジェクトに対してもこれを行います(これに費やされる時間を想像してください)。最初は特定の標準を実施することが有用でしたが、後にそれは不自由になりました。FxCopは、SAが問題を見つける方法でした。誤解しないでください。ジュニア開発者に教えて、選択したアプローチの結果を考えさせることは良い方法でしたが、上級開発者にとってはやや厳しいと見なされていました。
ある特定のSAは、特定のライブラリの使用に反対し、遅いと主張しました。これは、他のライブラリが多くの時間を節約するであろう一方で、物事を異なる方法で達成するために大量のコードを書くことを強制しました。プロジェクトの最終月に早送りすると、クライアントはパフォーマンスについて不満を言っていました。唯一の解決策は、開発者からの早期警告にもかかわらず、当初無視されていたアプローチを使用するように特定の機能を変更することでした。その時点までに、多くのコードが破棄され、再利用できなくなり、残業とストレスにつながりました。悲しいことに、このプロジェクトに使用された推定値は、私のプロジェクトが使用することを禁じていた古いアプローチに基づいていたため、推定の適切な指標ではありませんでした。首相が「これをやったことがある」と言うのを聞くでしょう
すべてのプロジェクトでDTO、DO、BO、サービスレイヤーなどの使用を強制するSA。新しい開発者はこのアーキテクチャを学習する必要があり、SAは使用ガイドラインを徹底的に実施しました。ガイドラインに従うことが絶対に困難である場合、使用ガイドラインの例外が作成されました。SAはそのアプローチに基づいていました。DTOのクラスおよびすべてのCRUD操作はCodeSmithを介して生成され、データベーススキーマも同様のワックスボールでした。ただし、このセットアップをあらゆる場所で使用したため、SAはLINQ to SQLやEntity Frameworkなどの新しいテクノロジーに対してオープンではありませんでした。
私はこの記事を通気用のプラットフォームとして使用していません。上記のSAストーリーに関する私の経験には、プラス面とマイナス面がありました。私の質問は次のように要約されます:
- SAはテーブルに何をもたらすべきですか?
- 彼らは意思決定においてどのようにバランスを取ることができますか?
- 特定の基本ルールを実施しなければならないという考え方で、SAジョブ(前に定義したとおり)にアプローチする必要がありますか?
- 他に考慮すべきことはありますか?
ありがとう!これらの仕事のタスクは、上級開発者や技術リーダーである人々に簡単に拡張できると思いますので、その能力についてもお気軽にお答えください。