🚮

「アーキテクチャ」という言葉をやめる試み

に公開

「アーキテクチャ」はとても重要です。しかしながら「アーキテクチャ」という言葉は多義的で、指す範囲が人やコンテキストによって大きく変わります。このことはあまり問題視されていないように思いますが、例えば「新しいプロジェクトの『アーキテクチャ』設計しといて」といったコミュニケーションが行われたとき、すれ違いによる大事故が発生する可能性を秘めているのです。

「アーキテクチャ」が引き起こすすれ違い

「アーキテクチャ」が指す範囲の広さは、コミュニケーションにおいて深刻な摩擦を生む可能性があります。指示を出した側は、クラウド構成やデータベースの選定といったインフラストラクチャ・アーキテクチャの設計を意図していたかもしれません。一方、指示を受けた側は、ドメイン駆動設計(DDD)やクリーンアーキテクチャのようなアプリケーションの内部構造の設計を始めたかもしれません。
​どちらも「アーキテクチャ」ではありますが、このすれ違いは手戻りやスケジュールの遅延を引き起こします。より深刻なのは、互いに「なぜ、こんな基本的なことを理解してくれないんだ」と 不信感 を抱いてしまうことです。この問題は、エンジニア間の暗黙知に頼った、曖昧な言葉の使用が原因で起こります。(これで最近わたしは信用を1うしなった…気がする)

「アーキテクチャ」をより具体的な言葉に置き換える

このコミュニケーションの問題を解決するには、「アーキテクチャ」という包括的な言葉を避け、より具体的な言葉で話すことをルール化することが有効です。以下に示すように、話す内容の範囲に応じて言葉を使い分けることで、関係者間の認識を一致させることができます。

  1. システム全体・組織レベルの設計
    ​企業全体のIT戦略や、複数のシステムにまたがるような大きな設計について話す場合は、以下のような言葉を使います。
    「ソリューション設計」
    「システム全体の構成」
    例:
    曖昧な指示:「このサービスのアーキテクチャをどうするか話し合いたい。」
    具体的な指示:「マイクロサービス間を疎結合にするためのソリューション設計について話し合いたい。」
  2. インフラ・基盤の設計
    クラウド構成やネットワーク、ミドルウェアなど、アプリケーションを動かす基盤について話す場合は、以下のような言葉が適しています。
    「インフラ構成」
    「クラウド・インフラストラクチャの設計」
    例:
    曖昧な指示:「この機能のアーキテクチャを考えてほしい。」
    具体的な指示:「この新機能のために、AWS上でのインフラ構成を考えてほしい。ECSとLambdaのどちらを使うか決める必要がある。」
  3. アプリケーション内部の設計
    単一のアプリケーション内部の構造や、コードの設計方針について話す場合は、以下のような言葉を使います。
    「アプリケーションの内部設計」
    「ドメイン設計」
    「パッケージ構造」
    例:
    曖昧な指示:「この機能のアーキテクチャレビューをお願いします。」
    具体的な指示:「この新機能のアプリケーション内部設計(特に、ドメインモデルと依存関係)についてレビューをお願いします。」
  4. 重要な技術的決定
    特定の技術要素の選定や開発プロセスの方針など、システム全体に影響を及ぼす決定について話す場合は、以下のような言葉が有効です。
    「技術選定の方針」
    「デプロイメント戦略」
    「データ設計」
    例:
    曖昧な指示:「このプロジェクトのアーキテクチャを議論しよう。」
    具体的な指示:「このプロジェクトで、RDBとNoSQLのどちらを使うべきかというデータ設計について議論しよう。」
    ​

おわりに

​「アーキテクチャ」という言葉を意図的に使わないようにするだけで、チーム内・チーム間のコミュニケーションは改善します。この小さな習慣が、無用なすれ違いを減らし、よりスムーズで効率的な開発へとつながります。
​
副次的な効果として、「アーキテクチャ」という言葉を禁止すると、ほかの同様の広義的な言葉に敏感になり他のコミュニケーションでも明瞭な意味を持つ言葉を使うようになったり、ゆるふわで考慮漏れが多かった「アーキテクチャ設計」が要素が洗い出されて網羅度があがったりしてうれしかったです。

Discussion