はじめに
完璧な設計図を引いたのに、チームに伝わらない。ステークホルダーの合意が得られない。実装してみたら想定と違った。
――そんな経験はありませんか?
これらは技術力の問題ではなく、設計を実現する力の問題です。
アーキテクトの仕事は設計を考えることで完結しません。
設計が現実のシステムとして形になるまでには、技術以外の力が求められます。
この記事では、設計を実現するために必要な4つの力を整理していきます。
TL;DR
- 伝える: アーキテクチャ図は「自分が理解するため」ではなく「相手に伝えるため」に描く。「今どこの話をしているか」を常に示し、C4モデルなどの業界標準を活用する
- 動かす: チームとの関わり方に固定の正解はない。チームの規模・経験・プロジェクトの複雑度に応じて、関与の度合いを柔軟に変える
- 合意を取る: 交渉は「論破」ではなく「合意形成」。相手(ビジネス / 他アーキテクト / 開発者)ごとに戦略を使い分ける
- 実現に変える: 設計は実装・インフラ・データ・チーム構造・生成AIなど周辺領域と整合して初めて機能する。設計だけ正しくても、周辺との不整合があればシステムは破綻する
設計を「伝える」 ― アーキテクチャ図解の技術
どれほど優れた設計も、チームやステークホルダーに正確に伝わらなければ実装されません。
図解はアーキテクトにとって最も基本的な伝達手段であり、その質がプロジェクトの成否を左右します。
図解の基本原則:Representational Consistency
アーキテクチャの説明でよくある失敗は、「全体像」と「詳細」を切り替えたときに、聞き手が「今、全体のどの部分を見ているのか」を見失ってしまうことです。
これを防ぐ原則がRepresentational Consistency(表現の一貫性) です。
全体像から特定部分へドリルダウンするとき、前の図との関係を必ず示します。
┌─────────────────────────────────────────────────┐
│ システム全体のトポロジー │
│ │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │Service │ │Service │ │Service │ │
│ │ A │───▶│ B │───▶│ C │ │
│ └────────┘ └───┬────┘ └────────┘ │
│ │ │
│ │ ← ここを詳しく見ます │
│ ▼ │
├─────────────────────────────────────────────────┤
│ Service B の内部構造(拡大図) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Handler │──▶│ UseCase │──▶│ Repo │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ 全体図との対応を示すことで「迷子」を防ぐ │
└─────────────────────────────────────────────────┘
この原則を守るだけで、プレゼンや設計レビューでの「この図はどこの話?」という混乱がかなり減ります。
個人的には、スライドの左上に「全体図のミニマップ」を常に表示しておくやり方が気に入っています。
図解のスタンダード:UML、C4、ArchiMate
図を描くとき、「自己流で描くべきか、何かの標準に従うべきか」は悩みどころです。
業界には主に3つの図解スタンダードがあります。それぞれの特徴と使いどころを整理してみます。
UML(Unified Modeling Language)
1990年代に複数のオブジェクト指向モデリング手法を統一して生まれた業界標準のモデリング言語です。
歴史的に重要な存在ですが、現在実務で使われるのは主にクラス図とシーケンス図で、他の図の利用は減少しています。
C4モデル
4段階のズームレベルで構造を表現する図解手法です。
┌──────────────────────────────────────────────┐
│ C4モデル ― 4段階のズームレベル │
│ │
│ Context : システム全体と外部の関係 │
│ ↓ ズームイン │
│ Container : デプロイ単位の構成 │
│ ↓ ズームイン │
│ Component : コンテナ内部の論理構造 │
│ ↓ ズームイン │
│ Code : コードレベルの詳細 │
│ (UMLのクラス図等を利用可能) │
└──────────────────────────────────────────────┘
C4はUMLの欠点を補う形で現在のエコシステムに適合しており、多くの図解ツールがC4テンプレートを提供しています。
チーム内の設計共有では、自分は最も取り入れやすい選択肢だと感じています。
また、C4モデルの4段階のズームレベルは、前述のRepresentational Consistencyの原則を自然に実践できる構造になっています。
ArchiMate
The Open Groupが策定したエンタープライズアーキテクチャ向けの軽量モデリング言語です。
組織横断的なシステム全体像の可視化に向いており、「できるだけ小さく」をモットーに設計されています。
使い分けの目安: チーム内の設計共有にはC4、組織横断の全体像にはArchiMate、既存資産との互換性が必要な場合はUMLのクラス図/シーケンス図、という使い分けが実践的です。もちろん、チームの慣習に合わせるのが最優先です。
図を描くときのガイドライン
標準を選んだ後も、いくつかの実践的なポイントがあります。
- タイトルとラベル: 全ての要素にタイトルを付けます。曖昧さが少しでもあるなら、凡例(キー)も付けます。「誤解される図は、図がないより悪い」という格言もあります
- 線の使い方: 実線は同期通信、点線は非同期通信という業界慣習があります。矢印で方向を示し、一貫性を保つことが大切です
- 色の使い方: 色は要素の区別に有効ですが、色覚多様性に配慮し、色だけに情報を頼らずアイコンや形状も併用します。交差点の信号が色だけでなく形状でも区別しているのと同じ考え方です
- ツール選び: レイヤー機能(表示/非表示の切り替え)、ステンシル(共通部品のライブラリ化)、マグネット機能(線の自動吸着)がある図解ツールを選ぶのがおすすめです
設計の初期段階では、洗練された図を作り込む必要はありません。タブレットスケッチやホワイトボードの写真で十分です。設計が固まる前にきれいな図を作ると、その図に愛着が湧いて設計変更をためらう心理が働きます。これは Irrational Artifact Attachment(非合理的な成果物への愛着) と呼ばれる現象です。
チームを「動かす」 ― 開発チームを効果的にする技術
設計図が正確に伝わったとしても、チームがその設計を正しく実装できなければ意味がありません。
ここからは、アーキテクトがチームを率いて設計を実装に導くための技術を見ていきます。
3つのアーキテクトパーソナリティ
アーキテクトがチームに与える影響は、制約の「部屋」のサイズというメタファーで理解できます。
アーキテクトが設定する制約や境界が、チームが作業する「部屋」を形作ります。
┌──────────────────────────────────────────────────────────────────────┐
│ アーキテクトのパーソナリティと「部屋」の関係 │
│ │
│ コントロールフリーク 効果的なアーキテクト アームチェアアーキテクト │
│ ┌──────┐ ┌──────────────┐ ┌────────────────────┐ │
│ │ 狭い │ │ │ │ │ │
│ │ │ │ ちょうど │ │ 広すぎる │ │
│ │ 窮屈 │ │ いい広さ │ │ チームが迷子 │ │
│ └──────┘ └──────────────┘ └────────────────────┘ │
│ │
│ 制約が多すぎる 適切な制約と自律性 制約がなさすぎる │
└──────────────────────────────────────────────────────────────────────┘
コントロールフリーク
全てを細かく指示するタイプです。
極端な場合、擬似コードまで書いてしまい、開発者からプログラミングの楽しさを奪います。
開発者出身のアーキテクトが陥りやすい傾向があります。
「自分ならこう実装する」という気持ちが抑えきれないわけですが、コンポーネントの内部設計は開発者の仕事です。
アームチェアアーキテクト
現場から離れて抽象的な図だけ渡すタイプです。
コードを書いた経験が浅い場合や、複数プロジェクトに分散して時間が取れない場合に陥りがちです。
制約がなさすぎるため、チームは自力でアーキテクチャ判断を行うことになり、混乱します。
効果的なアーキテクト
適切な制約と境界を設定し、チームが自律的に動ける「ちょうどいい部屋」を作ります。
チームと協働しながら、メンタリングと自律性のバランスを取ります。
正直なところ、自分もコントロールフリーク側に寄りがちだと感じることがあります。意識しないと「もっとこうした方がいいのに」と口を出したくなるんですよね。
関与度の見極め
では、「ちょうどいい関与度」はどう判断するのでしょうか。
Elastic Leadership(チームの成熟度に応じてリーダーシップスタイルを変える考え方)にヒントを得て、
アーキテクト向けにアレンジされたフレームワークがあります。
アーキテクトの関与度は固定ではなく、5つの要因で動的に調整します。
| 要因 | 関与を増やす方向 | 関与を減らす方向 |
|---|---|---|
| チームの親密度 | 初対面のメンバーが多い | 既知のチーム |
| チーム規模 | 大きい(12人以上は要注意) | 小さい(5人以下) |
| 全体的な経験値 | ジュニアが多い | シニアが多い |
| プロジェクトの複雑度 | 高い | 低い |
| プロジェクト期間 | 長い | 短い |
各要因を-20〜+20のスケールで評価し、合計値で関与の方向性を判断します。
合計がプラスに振れるほど積極的に関わり、マイナスに振れるほど手を引く、というイメージです。
「プロジェクト期間が長いほど関与を増やす」は直感に反するかもしれません。短期プロジェクトでは開発者がすでに切迫感を持っているため、アーキテクトが介入すると逆に邪魔になります。一方、長期プロジェクトでは緊張感が薄れやすく、アーキテクトが進捗を引き締める役割を果たす必要があります。
重要なのは、この評価をプロジェクト開始時に一度だけ行うのではなく、進行中も継続的に見直すことです。
チームの状況は刻々と変わるので、関与度もそれに合わせて調整します。
チームの危険信号
チームの規模が大きくなると、3つの危険な現象が発生しやすくなります。
アーキテクトはこれらの兆候を早期にキャッチし、対処する必要があります。
Process Loss(プロセスロス) ― 人を増やすほど遅くなる
Brooks's Lawとしても知られています。
チームの実際の生産性は、メンバーの能力の合計(潜在的な生産性)よりも必ず低くなります。
マージコンフリクトが頻発しているなら、これは兆候です。
対策は、作業を並列化し、メンバー同士が互いの領域を踏み合わないようにすることです。
Pluralistic Ignorance(多元的無知) ― 全員が反対なのに誰も言い出せない
「自分が見落としている何かがあるのかも」と思い、発言をためらいます。
アンデルセンの「裸の王様」がまさにこの現象です。
王様の服が見えないのに、誰も「見えない」と言い出せない。
チームが大きいほど起きやすいため、アーキテクトはファシリテーターとして「安全に発言できる場」を意識的に作ることが求められます。
会議中に表情が曇っている人がいたら、「どう思いますか?」と直接聞いてみる。たとえその意見が間違っていても、発言を支持する姿勢が大切です。
Diffusion of Responsibility(責任の拡散) ― 「誰かがやるだろう」で誰もやらない
チームが大きくなるほど起きやすい現象です。
田舎道で車が故障していれば通りかかった人が声をかけますが、大都市の幹線道路では何千台もの車が素通りします。
対策はシンプルで、担当者を明確に割り当てることです。
チームを支えるツール:チェックリストとガイダンス
ここまではアーキテクトの関わり方(パーソナリティ・関与度・危険信号の察知)を見てきました。
では、適切な制約や境界をチームに具体的にどう伝えるのでしょうか。
アーキテクトがチームを支える実践的なツールとして、チェックリストとガイダンスがあります。
チェックリスト
航空業界や医療業界で効果が実証されています。
医療分野では、チェックリスト導入で手術の合併症率が約33%、死亡率が約40%減少した事例があります。
ソフトウェア開発で特に有効なチェックリストは3つです。
- コード完了チェックリスト: 開発者が「完了」と言ったときの確認項目(フォーマット、例外処理、プロジェクト固有のルールなど)
- テストチェックリスト: 忘れがちなエッジケースの網羅(特殊文字、最小値/最大値、境界値など)
- リリースチェックリスト: デプロイ時のミスを防ぐ項目(設定変更、ライブラリ追加、DBマイグレーションなど)
チェックリストの注意点は2つあります。
- 手順に依存関係がある作業(手順書に近いもの)はチェックリストに向きません。チェックリストは「順番を問わない確認項目」に使います
- 自動化できる項目はツールに任せてチェックリストから外します。チェックリストが長くなりすぎると誰も使わなくなるためです
ガイダンス
チームの判断権限の範囲を明確にするものです。
例えば、サードパーティライブラリの導入について以下のように段階分けできます。
┌───────────────────────────────────────────────┐
│ ライブラリ導入の判断権限ガイダンス │
│ │
│ 特殊用途ライブラリ(PDF生成、バーコード等) │
│ → 開発者が自己判断で導入可 │
│ │
│ 汎用ライブラリ(Apache Commons、Guava等) │
│ → 開発者が分析・推薦し、アーキテクトが承認 │
│ │
│ フレームワーク(Spring、Hibernate等) │
│ → アーキテクトが選定・決定 │
│ │
│ ※ 影響範囲が大きいほどアーキテクトの関与が増す │
└───────────────────────────────────────────────┘
このように権限の境界を可視化しておくと、開発者は「ここまでは自分で判断していい」と分かり、不要な確認が減ります。
「部屋」のサイズを具体的に伝える手段の一つです。
合意を「取る」 ― 交渉とリーダーシップ
設計はチームに伝わった。チームも動き始めた。
しかし、設計は必ず誰かから挑戦されます。「コストが高い」「時間がない」「別の方法がいい」。
こうした反論に対し、正しさを主張するだけでは合意は得られません。
ここからは、相手ごとに異なる交渉の戦略を見ていきます。
ビジネスステークホルダーとの交渉
ビジネス側との交渉で最も大切なのは、抽象的な要求の裏にある本当の関心事を読み取ることです。
例えば、プロジェクトスポンサーが「五ナイン(99.999%)の可用性が必要だ」と主張しているとします。
この「五ナイン」という言葉の裏には「高可用性が重要」という関心があります。
しかし、五ナインが実際にどれくらいの数値なのか、ステークホルダー自身が把握していないケースは珍しくありません。
| 可用性 | 年間ダウンタイム | 1日あたり |
|---|---|---|
| 99.9%(三ナイン) | 8時間46分 | 約86秒 |
| 99.99%(四ナイン) | 52分34秒 | 約8.6秒 |
| 99.999%(五ナイン) | 5分15秒 | 約0.9秒 |
「五ナイン」を「年間ダウンタイム約5分15秒、つまり1日あたり1秒未満」と言い換えるだけで、議論の質が変わります。
「三ナインなら1日86秒。このシステムの要件を考えると十分ではないですか?」と具体的な数値で会話できるようになります。
交渉のテクニックをいくつか整理します。
- 要件の分割(Divide and Conquer): システム全体に五ナインが必要なのか、特定の部分だけで十分なのかを問います。要件を分割することで、交渉範囲を狭められます
- 事前の情報収集: 交渉に入る前に、相手の関心事や過去の発言パターンを把握しておきます。準備が交渉の成否を分けます
- コストと時間は最後の手段: 「お金がかかる」「時間が足りない」は強力な引数ですが、最初にこれを持ち出すと交渉が対立構造になりがちです。まず技術的な根拠で説得を試み、コストと時間は最後の切り札にします
他のアーキテクトとの交渉
アーキテクト同士の技術的な議論は、白熱しやすい場面の一つです。
RESTかメッセージングか、モノリスかマイクロサービスか。
こうした議論で覚えておきたいポイントが3つあります。
- 実演は議論に勝る(Demonstration defeats discussion): 言葉で延々と議論するより、本番に近い環境で両方を試して結果を見せる方がはるかに説得力があります
- 一般論ではなく自分たちの環境で検証する: Google検索やLLMの出力を根拠にした「ネットにはこう書いてあった」「ChatGPTがこう言った」という主張はよくありますが、環境はプロジェクトごとに異なります。自分たちの環境での検証結果をベースに議論するのが建設的です
- ヒートアップしたら中断する: 感情的になった状態での交渉は生産的ではありません。冷静になってから再開する方が、結果的に早く合意に至ります
開発者との交渉
開発者との交渉で最も効果的なアプローチは、「こうしろ」ではなく「理由」を先に伝えることです。
同じ内容でも、伝え方で結果が変わります。
NG: 「Business層を経由しなければならない」
→ 開発者: 「直接DBを呼んだ方が速いのに...」(反発)
OK: 「変更制御が最も重要なので、閉じたレイヤードアーキテクチャに
しています。つまり、DB呼び出しはBusiness層を経由する
構造になります」
→ 開発者: 「なるほど。でもシンプルなクエリの
パフォーマンスはどうしましょう?」(協働)
ポイントは2つあります。
- 「you must(〜しなければならない)」のような命令形を避け、「this means(つまり〜ということになる)」のような事実の提示に変えること
- 理由を先に述べてから結論を伝えること。人は反対意見を聞いた瞬間に聞く耳を閉じがちなので、理由が先にあると受け入れやすくなります
もう一つ強力な手法は、相手に自分で答えを見つけさせることです。
例えば、アーキテクトがフレームワークXを選んだのに、開発者がフレームワークYを推す場合。
「フレームワークYでセキュリティ要件を満たせることを示してくれたら、Yを採用しましょう」と提案します。
- 開発者がセキュリティ要件を満たせないと気づいた場合 → 本人が納得してXを受け入れる
- 開発者がYでの解決策を見つけた場合 → より良い解が得られる
どちらに転んでもプラスの結果になります。
依頼を「お願い」に変えるだけで受け入れ率が変わる、という話も印象的です。名前を呼び、「助けてほしい」と伝える。人間は「命令」には抵抗しますが、「助けを求められる」と動きたくなるものです。
交渉の土台 ― リーダーとしての日常
交渉は個別の場面での技術ですが、うまくいくかどうかは日常的な信頼関係に大きく左右されます。
ここでは交渉の前提となる、リーダーとしての日常的な振る舞いを紹介します。
- 4Cs of Architecture: Communication(伝える)、Collaboration(協働する)、Clear(明確に)、Concise(簡潔に)。この4つを意識するだけで、不要な複雑さ(Accidental Complexity)を避けられます
- 「肩書きで動かす」のではなく「行動で示す」: 肩書きや権限で人を動かすのは一時的な効果しかありません。技術的にも人間的にも信頼される存在になることが、長期的なリーダーシップの基盤です
- チームの「頼れる人」になる: 質問への対応、ランチ & ラーンの開催、困っている人への声かけ。こうした日々の積み重ねが信頼を作ります
- ミーティングの制御: 招待されたミーティングの必要性を問い、開発者の集中時間を守ります。アーキテクトが主催するミーティングは最小限にし、開発者の中核作業時間を確保します。開発者の代わりにミーティングに出ることで、チームの生産性と自分への信頼の両方が上がります
- Pragmatic yet Visionary(現実的かつ先見的): 理想を描きつつ、予算・時間・チームスキル・トレードオフを踏まえた現実的な解を提示します。ビジョンだけでは実装できず、現実だけでは進化できません
設計を「実現」に変える ― 周辺領域との整合
ここまでで設計を伝え、チームを動かし、合意を取る方法を見てきました。
しかし、設計が正しく、チームが優秀で、全員が合意していても、周辺領域との整合が取れていなければシステムは破綻します。
これは**Architectural Intersection(アーキテクチャの交差点)**と呼ばれる問題です。
アーキテクチャは真空の中には存在しません。
実装、データ、チーム構造、生成AI、インフラ、エンジニアリングプラクティス、そしてビジネス環境。
これらと交差する点で、整合が取れているかどうかがシステムの成否を決めます。
実装との整合
アーキテクチャと実装のミスアライメント(不整合)は、主に2つの観点で起きます。
運用特性のミスアライメント
アーキテクチャが重視する特性と、実装が最適化する特性がずれるパターンです。
典型的な例を紹介します。
マイクロサービスでスケーラビリティを重視した設計をしたとします。
しかし実装段階で、サービス間のレスポンスを改善するためにインメモリレプリケーションキャッシュを導入しました。
これはサービスの内部メモリにデータを複製し、同期を保つ仕組みです。
レスポンスは改善されましたが、ユーザー数が増えてインスタンスを増やそうとしたとき、キャッシュのメモリ要件が高すぎてスケールできなくなりました。
設計はスケーラビリティを重視していたのに、実装はレスポンスを最適化していた。どちらの判断も単体では合理的ですが、目指す方向がずれていました。このような特性のミスアライメントは、アーキテクトと実装者の間で「今回最も重視する特性は何か」を共有していないと起こりやすいです。
構造の整合性
論理アーキテクチャ(コンポーネントの設計図)とソースコードのディレクトリ構造が乖離すると、保守性やテスト容易性が崩壊します。
これを防ぐにはArchUnit(Java)、NetArchTest(.NET)、TSArch(TypeScript)などの自動ガバナンスツールが有効です。
アーキテクトが定めた制約(例:DBアクセスはPersistence層のみ)が守られているかをテストとして自動検証でき、構造の乖離と制約違反の両方を防げます。
データトポロジーとの整合
データベースの物理的な構成(トポロジー)は、アーキテクチャスタイルと整合させる必要があります。
┌───────────────────────────────────────────────────────┐
│ アーキテクチャスタイルとDBトポロジーの対応 │
│ │
│ マイクロサービス → Database per Service │
│ (各サービスが独自のDBを持つ) │
│ │
│ サービスベース → ドメイン別DB or モノリシックDB │
│ (スタイルに応じて柔軟に選択) │
│ │
│ レイヤード → モノリシックDB │
│ (シンプルさとコスト効率を重視) │
└───────────────────────────────────────────────────────┘
トポロジーだけでなく、データベースの種類も重要です。
スケーラビリティを重視するアーキテクチャならKVS(Key-Valueストア)やカラムナーDB、
データの関係性が重要ならRDB(リレーショナルデータベース)やグラフDB、というように特性を合わせます。
データ構造(リレーショナル/KV/ドキュメント)やRead/Write比率も選定に影響します。
用途に応じて複数種類のDBを使い分けるポリグロットデータベースという考え方もあります。
「全てをRDBで」と決め打ちせず、データの特性ごとに最適なDBを選ぶのが理想的です。
チームトポロジーとの整合
チーム構成とアーキテクチャスタイルの不整合は、実装と保守の困難さに直結します。
チーム構成には大きく2つのアプローチがあります。
- ドメイン分割チーム(顧客チーム、注文チーム等): 各チームが特定のビジネスドメインをエンドツーエンドで担当します。マイクロサービスやサービスベースアーキテクチャと相性が良いです
- 技術分割チーム(UIチーム、バックエンドチーム、DBチーム等): 技術レイヤーごとにチームを組織します。レイヤードアーキテクチャと相性が良いです
ここで意識すべきなのがコンウェイの法則です。
「組織のコミュニケーション構造が、そのままシステムのアーキテクチャに反映される」という経験則です。
つまり、望ましいアーキテクチャがあるなら、それに合わせてチームを組織する方が自然にうまくいきます。
これは逆コンウェイ戦略と呼ばれます。
生成AIとの整合
2025年現在、LLM(大規模言語モデル)をアーキテクチャに組み込むケースが増えています。
LLMをシステムに組み込む際のポイントは抽象化とモジュール化です。
- LLMエンジンを容易に差し替えられる設計にする
- ガードレール(不適切な出力を防ぐ仕組み)とevals(出力品質を測定する仕組み)を組み込む
- LLMの進化は速いため、特定のエンジンに密結合する設計はリスクが高い
アーキテクト補助としてのLLM活用も模索されています。
リスク評価やアンチパターン検出などに使える可能性がありますが、LLMはコンテキストが限定された問題には強い一方、
多数の交差点を同時に考慮するようなトレードオフの判断はまだ人間のアーキテクトに分があると言われています。
「知識」ではなく「知恵」の領域です。
この領域は変化が極めて速いです。Thoughtworks Haivenのように、C4図からアーキテクチャを読み取りArchUnitコードを生成する試みなども登場しています。ここに書いた内容が数か月後には古くなっている可能性があります。
その他の整合ポイント
ここまで取り上げた以外にも、アーキテクトが意識すべき整合ポイントがあります。
個別に深掘りはしませんが、概要を紹介します。
- インフラストラクチャとの整合: アーキテクチャがスケーラビリティを設計していても、インフラが対応していなければ実現しません。DevOpsの台頭はまさにこのギャップを埋めるために生まれた動きです
- エンジニアリングプラクティスとの整合: マイクロサービスを選んだのに手動デプロイ・テスト不足では破綻します。CI/CDやTDD等のプラクティスとアーキテクチャスタイルの相性を意識する必要があります。アーキテクチャ特性をテストとして自動検証するFitness Functionも有効です
- システム統合: 外部システムとの通信プロトコル、契約(API仕様)、特性の互換性を確認します
- エンタープライズとの整合: 組織全体のセキュリティ標準、技術標準との整合です。これを無視すると、技術的には優れていても「標準外の一点もの」として廃棄される可能性があります
- ビジネス環境との整合: コスト削減期にマイクロサービスは過剰かもしれないし、急拡大期にモノリスは制約になるかもしれません。ビジネスドメインの構造とアーキテクチャの構造を対応させる考え方(Domain-to-Architecture Isomorphism)や、環境の変化に段階的に適応できるように設計する考え方(Evolutionary Architecture)を意識すると、こうしたミスマッチを減らせます
おわりに ― 伝達力 x 推進力 x 交渉力 x 整合力
この記事では、アーキテクトが設計を「絵に描いた餅」にしないための4つの力を見てきました。
┌────────────────────────────────────────┐
│ アーキテクトの影響力 │
│ │
│ 伝達力(伝える) │
│ x 推進力(動かす) │
│ x 交渉力(合意を取る) │
│ x 整合力(実現に変える) │
│ ───────────────────── │
│ = 影響力 │
│ │
│ どれか一つが 0 なら、影響力も 0 │
└────────────────────────────────────────┘
4つの掛け算で初めて、設計が現実のシステムとして動き出します。
明日からできることを3つだけ挙げます。
- 次にスライドを作るとき、左上に全体図のミニマップを入れてみる ― 「今どこの話をしているか」が一目で分かるだけで、聞き手の迷子を防げる
- 次に設計判断を伝えるとき、結論より先に理由を述べてみる ― 「Business層を経由してください」ではなく「変更制御が最も重要なので、こうなっています」
- 周辺チームとの対話を一つ増やす ― インフラチーム、データチーム、他システムの担当者と、設計の整合を確認する会話を始める
アーキテクトの仕事は、技術と人の間をつなぐ仕事なのだと改めて感じました。