Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Power Theory of Software Architecture

Power Theory of Software Architecture

今日の講演の趣旨:

ソフトウェアアーキテクチャというと、もしかしたら技術的で高度に専門的な事柄であるように聞こえる。
そのため、「要素技術」に詳しい人が「アーキテクチャ」を作るという誤解をしているケースがある。

また、プロジェクトマネジメント・プロダクトマネジメント・ピープルマネジメントのそれぞれが
アーキテクチャとは無関係であると誤解されているケースがある。

今回の公演では、
これらは有機的に絡み合っていて、不可分であるという点を強調したい。

そのために、
「アーキテクチャ」という概念を次のように定義したい
何かをしやすくしたり、しにくくしたりする構造。
この何かをしやすくしたり、しにくくしたりする力を「権力」と呼ぶ。

この権力は、「他の選択肢」を選べないという時に生まれる。
この選択肢と依存のネットワークから生まれる権力の構造を「アーキテクチャ」と規定すると、
ソフトウェアの交換可能性や依存関係のことをソフトウェアアーキテクチャと呼ぶことがイメージしやすくなる。

hirokidaichi

July 02, 2019
Tweet

More Decks by hirokidaichi

Other Decks in Technology

Transcript

  1. © rector,inc 自己紹介 EMFM Podcast エンジニアリングマネージャのためのポッドキャスト。 13エピソード公開中で、現在、20000再生を突破。 EMFM Meetupという公開収録イベントで200人の会場が即 日で集まった。

    Qiita エンジニアリングに関するノウハウを集めるサイトQiita において、2019年現在、第2位。 トータル39記事で41800いいね/20000ブクマ。 その他パブリック活動
  2. © rector,inc 1 2 3 理不尽はいつも選択肢の少ない方にかかる 美男美女でとてもモテる人との恋愛は大 変です。その相手が、モテない場合、交 換可能になってしまうかもしれません。 経済的自立が難しい専業主婦にDV被害

    が及ぶのも権力構造の乱用です。 美男美女との恋愛 十分な需要があり、交換可能でない場 合、値上げをする権力が生まれます。 たとえば、配送業者や近年のビル建設業 者などに起きていることは、需要と供給 のくずれによる関係性の変化です。 料金の値上げをする配送業者 平均的なエンジニアですら、7倍近い有効 求人倍率があります。優秀なレベルのエ ンジニアであれば、入社する会社は選び 放題です。そのため、待遇だけでなく、環 境や福利厚生、そしてその会社で働く社 会的意義などから選ぶ側になっていま す。 求職者優位の労働環境
  3. © rector,inc ソフトウェアアーキテクチャにおいて交換可能性が重要 自動テストや、カナリアリリースなどのデリバリーのパイプライ ンは、それ自体がある抽象度での交換可能性を上げるための 試みになる。 自動テストが存在しない状況だと、コードを修正するために多 大なリソースが必要となる。 ユニットテストが存在すれば、そのモジュールはユニットテスト を満たす限りにおいて、新しいものに交換できる。

    これはAPI仕様を満たすテストを書けば、サービス自体の交換 可能性を高める。 自動テストとデリバリパイプライン サービスコンポーネントが自動的に構築可能で、かつ状態を持 たずに廃棄可能・再構築可能だった時、そのインフラの交換可 能性は高いと言える。 そのため、インフラの要素をコードで記述したり、高速に再構築 可能にすることが良いプラクティスとされる。 交換可能性という補助線を引くと、良いアーキテクチャとそうで ないアーキテクチャが自明に見えてくる。 Infra as Code/Disposable Component
  4. © rector,inc プロジェクトマネジメントの本質的複雑性 それは2つの依存関係があり、 クリティカルパスが存在するから。 N人のメンバーがいます。 M個のL時間づつかかるタスクがあります。 このプロジェクトは何時間で終わりますか? (なお見積りは正確であるものとする )

    という問題の答えが: 必要な時間 = ( M * L )/ N (時間) とならないのはなぜか。 問題 前の仕事が終わらないと次の仕事ができない 前後依存性 その人でないとある仕事ができない リソース依存性
  5. © rector,inc ソフトウェアプロジェクトの依存関係は自明ではない ソフトウェアプロジェクトにおいては、 • 同じものをほとんど作ることはない • 依存関係が建築等ほど自明ではない • 見積りの分散が大きい

    などの理由から、単純な進捗管理ではほとんど価値を生み出さ ない。 依存性や困難性に対して、常に選択肢を持ち続けるようにアー キテクティングするのがプロジェクトマネジメントの仕事。 プロマネの仕事は進捗確認ではない 前の仕事が終わらないと次の仕事ができない => モックサーバやインタフェース設計 前後依存性 その人でないとある仕事ができない? => 教育やフレームワークの導入、ツール化 リソース依存性 タスクごとの見積りの誤差が大きく違う => バッファマネジメント、不確実性に基づく優先 順位設計、プランBの用意 見積り不確実性
  6. © rector,inc 計画主義的プロセスと漸進的プロセス 計画主義的プロセスでは、プロジェクト初期に全依存関係を発 見する。これによって、プロジェクト実装フェーズの並列実行性 を高めてリリースまでの期間を短くする。一時的に要員が増え る。設計能力の必要な人員が相対的に少なくて良い。自明性 の高い抽象構造のプロジェクトに向く。 抽象構造を先に発見するプロセス 漸進的プロセスでは、各フェーズで要件を満たすような最低限

    の設計と実装を繰り返す。抽象構造は初期に発見できるとは 限らないとして、リファクタリングを繰り返しながら、よい抽象構 造を発見する。自明でない仮説検証が必要なプロダクトに向い ている。 抽象構造を後から発見するプロセス 要件定義 設計 実装 テスト 全依存関係の洗出 リファクタリング
  7. © rector,inc プロジェクトの変化に連動し抽象構造のパラダイムも変化 存在論的な抽象(オントロジ) 目的論的な抽象(テレオロジ) ・自明性が高い関係の発見 ・Abstract Class / Inheritance

    ・<犬>と<うさぎ>は<動物> ・ツリー構造、計画的 ・再利用性 ・事後発見される仮説と目的の記述 ・Composition/ Structural subtyping/Mixin ・<さんま>と<ぶたにく>は<メインディッシュ> ・セミラティス構造、自生的秩序 ・交換可能性 *これらは造語。オントロジの本来の意味と情報技術における意味ぐらい違う。 いい言葉が見つからない。。。
  8. © rector,inc 取引コストによって、会社・組織の境界線が決まる ある経営上のリソースを市場から手に入れるのか(取 引コスト)、それとも企業内部に構築するのか(内部化 コスト)を取引コスト理論の観点で見てみると、会社組 織の境界線を決めるラインが見えてきます。 
  内部化コストが高く、取引コストが安いものについて は、企業外部から調達し、取引コストが高く、内部化コ

    ストが低いものは、企業内部に構築することが望まし いということがわかります。 
  この構図は、エンジニアリング機能を必要とする組 織にとっては、「何を外注し、何を内製するのか」を決 定づける構図であると理解することができます。 
  
 内部化コスト > 取引コスト 取引コスト > 内部化コスト 市場取引
 長期取引
 戦略連携
 組織取引
 企 業 外 部 企 業 内 部
  9. © rector,inc 組織設計とアーキテクチャの関係 技術的負債 プ ラ ス の 価 値


    マ イ ナ ス の 価 値
 アーキテクチャ 組織
 システム
 取引コストが低く 情報処理能力が高い 組織 取引コストが高く 情報処理能力が低い 組織 コンウェイの法則が示すように、組織の構 造とシステムの構造が相似形になってし まうのであれば、プラスの価値のある組 織からは優れたアーキテクチャが生ま れ、逆にマイナスの価値を持った組織か らは技術的負債が生まれるようになると いうことが導けると思います。 
 
 また、その逆に優れたシステムの構造 が、良い組織構造を生み出すことも起こり 得ますし、同様に技術的負債が組織の悪 しき硬直性を生み出すことも起こり得るの です。その意味で、組織とアーキテクチャ には密接な相互関係があります。 

  10. © rector,inc 逆コンウェイ作戦とマイクロサービシズ 技術的負債 プ ラ ス の 価 値


    マ イ ナ ス の 価 値
 アーキテクチャ 組織
 システム
 取引コストが低く 情報処理能力が高い 組織 取引コストが高く 情報処理能力が低い 組織 コンウェイの法則が示すように、組織の構 造とシステムの構造が相似形になってし まうのであれば、プラスの価値のある組 織からは優れたアーキテクチャが生ま れ、逆にマイナスの価値を持った組織か らは技術的負債が生まれるようになると いうことが導けると思います。 
 
 また、その逆に優れたシステムの構造 が、良い組織構造を生み出すことも起こり 得ますし、同様に技術的負債が組織の悪 しき硬直性を生み出すことも起こり得るの です。その意味で、組織とアーキテクチャ には密接な相互関係があります。 
 コンウェイの法則 逆コンウェイ作戦 microservices
  11. © rector,inc 組織に働く認知的な力:ゲシュタルト原則 近接 地理的に近い集団を仲間だと思う 似ている種類の集まりを仲間と思う 近接した複数の要素をグループ化して捉えるという人間の 特性があります。 これはデザインだけでなく組織においても同じで、地理的 な近接を仲間と思うような特性があります。

    類同 類似した性質=情報的な距離が小さい集団を仲間と思いま す。たとえば、同業種の人同士が交流することが増えると いうような特性です。そして人には仲間じゃないと思うも のを排除しようとする本能があります。
  12. © rector,inc 「両利き」の経営:専門化とイノベーションのつまみ 知 の 探 索 知の深化 市場環境の変化が乏しい (持続的イノベーションが

    差別化) 市場環境の変化が激しい (破壊的イノベーションが 差別化) 職能型組織 全体論的多様性チーム
  13. © rector,inc 急な変化はコミュニケーション上の対立を産みやすいが、理解も進む 知 の 探 索 知の深化 全体論的多様性のあるチームは イノベーションを引き起こしやすい。

    大人数ではマネジメントしづらい。 同質性の高いチームは、特定の職能を深 めていく力があるが、組織対立を招く。 コンピテンシートラップ
  14. © rector,inc 専門化が進むと部門対立が生まれる。 知 の 探 索 知の深化 しかし、成長が鈍化してくるとゼロサムゲームだと 捉えるようになり、原因を相互に押し付けあう。

    成長は全てを癒すのではなく、成長は全ての不安を 覆い隠す。 競争環境が固定的で、連続的なイノベーションが要 求されるステージでは、「知の深化」をもたらす 職能別組織が効果を発揮する。e.g. エンジン開発
  15. © rector,inc System Control Level:システムのコントローラビリティレベル Culture チーム文化レベル Architecture アーキテクチャレベル Code

    ソースコードレベル Spec 外部仕様レベル Chaos 制御不能レベル 5 4 3 2 1 機能横断チームの壁 内製人材比率の壁 発注者能力の壁 生産性(高) 相互理解の壁 生産性(低)
  16. © rector,inc ビジネスにおける目的と手段の抽象のはしご 手段 目的 ミッションは最終到達の理想状態を表現します Mission ビジョンはミッションに向かう3年以内に到達する具体的な状態を書きます Vision ストラテジーはビジョンのための1年以内に達成する戦略目標を書きます

    Strategy プランはストラテジー実行のための3ヶ月後の戦術的施策や習慣を書きます。 Plan アクションはプランになるための1週間継続できる行動を書きます   Action 手段 目的 手段 目的 手段 目的
  17. © rector,inc ソフトウェアアーキテクチャにおける依存と交換可能のはしご 交換可能 依存 Strategy Scope Structure Skelton  

    Surface 交換可能 依存 交換可能 依存 交換可能 依存 抽象的/安定的 抽象依存原則 (ADP) 安定依存原則 (SDP) 具体的/変動的 SoI SoE SoR ビジネスの構造を表現する ユーザの行動、ストーリーを表現する ドメイン知識を表現する ユーザが見る情報の階層や流れを表現する 変化しやすいニーズやバリエーションを表現する
  18. © rector,inc コンウェイの法則とアーキテクチャ:目的に対して手段を交換可能に維持する 交換可能 依存 Strategy Scope Structure Skelton  

    Surface 交換可能 依存 交換可能 依存 交換可能 依存 手段 目的 Mission Vision Strategy Plan   Action 手段 目的 手段 目的 手段 目的 抽象的/安定的 抽象依存原則 (ADP) 安定依存原則 (SDP) 具体的/変動的 SoI SoE SoR