#presentation [https://www.youtube.com/watch?v=ekMPm78KFj0](https://www.youtube.com/watch?v=ekMPm78KFj0) [https://speakerdeck.com/emgsilva/intro-to-sociotechnical-architecture-co-designing-technical-and-organizational-architecture-to-maximize-impact](https://speakerdeck.com/emgsilva/intro-to-sociotechnical-architecture-co-designing-technical-and-organizational-architecture-to-maximize-impact) # TL;DR Sociotechnical Architeture は、 Team のあり方やそこからの Architecture などの考え方 背景には、 [[Team Topologies]]、[[LeanとDevOpsの科学]]、[[ドメイン駆動設計]] をそれぞれ現実に適用させるようなもの # Summary Sociotechnical Architecture には、5つの特性がある ## Trait1 : プロダクトを作るのは、チームメンバー ### Why Care コンポーネントごとにチームを別にしてしまえば、コンポーネントごとに分断されてしまい局所最適なシステムを作ってしまう フィーチャーを早く独立して作りたいならば、チーム1つでエンドツーエンドの機能が作れるようにチームを作る必要がある ### But How まさにコンウェイの法則のことを指してる コンウェイの法則をうまく先回りして利用する逆コンウェイの法則というものがあり、それを踏まえながらチームを作っていくとよい ## Trait2: 強いチームには必要十分に人やスキルが必要 ### Why Care ソフトウェアはチームの頭の中に収まるサイズであるべき つまり認知的負荷を下げる必要がある ### But How [[Team Topologies]] では、認知的負荷には3種類あるとされてる - Intrinsic Cognitive Load - あるタスクを完了するために学習するべきスキルの量など - [[A Philosophy of Software Design]] で言われてる [[Symptoms of complexity]] と似てる - e.g プログラミング言語、フレームワークなど - Extraneous Cognitive Load - タスクを完了したあとにそれを反映したり合意するためのワークフロー起因の認知的負荷 - e.g チームでのgitフロー、リリースプロセス、仕事の進めかたのルールなど - Germane Cognitive Load - ビジネスドメインやプロダクトが誰のためにどういう価値を提供してるか、それがどう動くかを理解するための認知的負荷 - 総じて、チーム1つの capacity には入らないので分割されるべき チームの認知的負荷の capacity の中で Germane Cognitive Load を最大にするのが重要としている つまり、 Intrinsic Cognitive Load と Extraneous Cognitive Load を小さくして Germane Cognitive Load を分割してチームの capacity に収まるようにすることが大事 ## Trait3: プロダクトのValue Streamを意識することが大事 ### Why Care ビジネスに価値を産むことが大事 ### But How ![image](https://gyazo.com/8be0aea26bc4b98019b9d65439a2807d/thumb/1000) Stream-aligned team : カスタマーの価値に直結するチーム Enabling Team : Stream-aligned team が新しい技術を活用できるなどを支援する Complicated Subsystem team : 複雑なシステム Platform Team : 他のチームの cognitive load を下げることにフォーカスする Stream-aligned Team が価値を素早く出せるために、 - Stream-aligned Team を小さく独立に保つ - 支援チームで Stream-aligned TeamのCognitive Load を下げる チームの人数の話は、 Dunbar's Number とそれに関連する研究によっておおよそ定められる - ~5 : close personal relationship & working memory (→ team) - ~ 15 : can experience deep trust (→ closely related teams) - ~ 50 : can have mutual trust (→ directly related teams or product) - ~ 150 : can remember (→ department/domain) ## Trait4 : 指示するのではなくメンバーの中でイノベーションを起こす ### Why Care ![image](https://gyazo.com/d2f37d639260b433388cd872ffd16409/thumb/1000) - 良い施策のほとんどはフィードバックとチームの中で生み出される - したがって、Product Team (Stream-aligned Team は、こういった Discovery が促されないといけない) ### But How - いろんな方法がある中の1つして [Dual-Trak Agile](https://svpg.com/dual-track-agile/) が1つある - Basecamp も [[Shape Up: Stop Running in Circles and Ship Work that Matters]] の中で、この Dual-Trak に近しいことをやってる ## Trait5 : 1番をただ単純に真似てはいけない ### Why Care - 組織はそれぞれ特有の Context があるので、必ずしも他がやってることがそのまま当てはまるわけではない - また組織は常に変わっていくので、 Sociotechnical Architecture も同じように変わっていく必要がある ### But How - Find Problem - Clarify Problem - Break down Problem - Develop Solution