ソフトウェアの内部品質に生じる様々な問題は組織設計にその原因があることも多い

Recent posts

https://speakerdeck.com/mtx2s/internal-quality-issues-caused-by-organizational-design

技術的負債、生産性の低下といったことは組織設計に原因があることも多い。 そうであるなら、組織設計にもリファクタリング・リアーキティングをする必要がある。

共有リソースプール

エンジニアが部分的にアサインするチームを構成。

  • Aさん 20%
  • Bさん 50%
  • Cさん 100%

優秀な人ほどプロジェクトを掛け持ちする。 また、互いのスキルを理解しなければ未熟なチームワークでプロジェクトが開始する。

<解決策> チームを固定化する。

  • チーム1 --- プロジェクトA
  • チーム2 --- プロジェクトB

不連続なチーム

チーム1 --- プロジェクトA |-- Aさん |-- Bさん ↓ チーム2 --- プロジェクトB |-- Aさん |-- Cさん

プロジェクトごとに新チームを新たに構成すると、学びの喪失が起こる。 プロセスの反復で学びを蓄積し不確実性を崩していく。

<解決策> 同一チームが担当プロダクトの開発プロジェクトに繰り返し携わる。

非オーナーシップ制

トータルのコントリビューター数や、マイナーコントリビューター(全体コミット数のうち5%未満の貢献にとどまるユーザー)が多いコンポーネントは、リリース前後に置ける故障が増加する。

<解決策> プロダクトやコンポーネント、コードに特定のオーナーを決める。 個人をオーナーとせずチームで共同所有する。 外部コントリビューターのコードはオーナーチームのレビューを受けてマージする。

保守・運用の分離

開発チームと、保守・運用チームを線引すると、保守・運用の容易さが考慮されず運用知識の乏しい設計になる。

  • コメントがない
  • 必要なログが記録されない
  • 簡単に再起動できない

<解決策> You build it, you run it. 作った人たちが運用も担う。

顧客とコミュニケーションしてフィードバックループを回し、サービス品質を改善させる。

品質保証の一極集中

開発チームと、テストチームを線引すると、最後はテスターがなんとかしてくれるという丸投げが起こる。

a. 機能テスト b. ユニットテスト c. 探索テスト d. 非機能テスト

<解決策> a,bを開発チーム、c,dをテストチームが担う。 場合によっては両者で実施する。

行き過ぎた固定化

  • この仕事はAさんが早い
  • この仕事はBさんが詳しい

行き過ぎると、Aさんしかできない、Bさんしか知らないという固定化が起こる。 各自の仕事のやり方を言語化・可視化する動機が減り、ドキュメントなし、コメントなし、複雑なコードなど人が読むことを前提としない開発が生まれる。

<解決策> 固定チームにも流動性を持たせる。 新規メンバーのアサイン時にオンボーディングを実施する。

ドメイン知識の過疎地

開発チームと、企画チームを線引すると、間接的な説明で実装に入るため知識がこぼれおちる。

<解決策> 開発チームとドメインエキスパートが密接に関わる。

無力な他己管理型チーム

マネージャーひとりが強い権限を持ち、開発チームは決定権を持たない。 内部品質を上げる動機づけなどが失われる。

<解決策> ユーザー、ビジネス、開発それぞれの重要視するものの中でやるべきことを決める。