Sociotechnical Architecture
https://www.youtube.com/watch?v=ekMPm78KFj0
TL;DR
Sociotechnical Architeture は、 Team のあり方やそこからの Architecture などの考え方
Summary
Sociotechnical Architecture には、5つの特性がある
Trait1 : プロダクトを作るのは、チームメンバー
Why Care
コンポーネントごとにチームを別にしてしまえば、コンポーネントごとに分断されてしまい局所最適なシステムを作ってしまう
フィーチャーを早く独立して作りたいならば、チーム1つでエンドツーエンドの機能が作れるようにチームを作る必要がある
But How
まさにコンウェイの法則のことを指してる
コンウェイの法則をうまく先回りして利用する逆コンウェイの法則というものがあり、それを踏まえながらチームを作っていくとよい
Trait2: 強いチームには必要十分に人やスキルが必要
Why Care
ソフトウェアはチームの頭の中に収まるサイズであるべき
つまり認知的負荷を下げる必要がある
But How
Intrinsic Cognitive Load
あるタスクを完了するために学習するべきスキルの量など
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
https://gyazo.com/8be0aea26bc4b98019b9d65439a2807d
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
https://gyazo.com/d2f37d639260b433388cd872ffd16409
良い施策のほとんどはフィードバックとチームの中で生み出される
したがって、Product Team (Stream-aligned Team は、こういった Discovery が促されないといけない)
But How
Trait5 : 1番をただ単純に真似てはいけない
Why Care
組織はそれぞれ特有の Context があるので、必ずしも他がやってることがそのまま当てはまるわけではない
また組織は常に変わっていくので、 Sociotechnical Architecture も同じように変わっていく必要がある
But How
Find Problem
Clarify Problem
Break down Problem
Develop Solution