Slide 1

Slide 1 text

開発チーム・開発組織の 設計改善スキルの向上 2025年8月27日 有限会社システム設計 増田 亨 #levii 「エンジニアリングマネージャーのためのソフトウェア設計再考」

Slide 2

Slide 2 text

自己紹介 専門領域 • 業務系アプリケーションの開発 最近の仕事 • 大きな泥団子退治のアドバイザ • エンジニアの成長支援 2 増田 亨(masuda220) 著書(2017) 訳書(2024) *1 *2 *1 増田 亨(2017) 『現場で役立つシステム設計の原則』技術評論社 *2 Vlad Khononov(著) 増田 亨、綿引 琢磨(訳) 2024 『ドメイン駆動設計をはじめよう』オライリージャパン

Slide 3

Slide 3 text

開発組織のパフォーマンス向上 開発組織の パフォーマンス 開発 プロセス ツール活用 目標設定 優先順位付け コミュニケー ション 動機付け データ駆動 技術的負債 の解消 スキルアップ 支援 組織設計 3

Slide 4

Slide 4 text

開発組織のパフォーマンス向上 開発組織の パフォーマンス 開発 プロセス ツール活用 目標設定 優先順位 コミュニケー ション 動機付け メトリクス データ駆動 技術的負債 の解消 スキルアップ 支援 組織設計 4

Slide 5

Slide 5 text

重要課題? 緊急課題? 開発組織の パフォーマンス 技術的負債 の解消 5

Slide 6

Slide 6 text

技術的負債を解消する効果 6

Slide 7

Slide 7 text

技術的負債 • 大きな泥団子 • 変更がやっかいで危険 • 低品質 機能の修正や追加に時間がかかる リリース後の不具合発生の不安 コスト発生や完了の見込みが不透明 7

Slide 8

Slide 8 text

技術的負債を解消する効果 機能の修正や追加の必要時間が短く、期間も短くなる ↓ より多くの機能修正・機能追加 より短いサイクルのフィードバックループ より多くの繰り返しによる習熟 8

Slide 9

Slide 9 text

費用対効果? 即効性? 開発組織の パフォーマンス 技術的負債 の解消 9

Slide 10

Slide 10 text

技術的負債を解消する費用 10

Slide 11

Slide 11 text

技術的負債 • 大きな泥団子 • 変更がやっかいで危険 • 低品質 原因はなに? • 設計が悪い? • 設計にかける時間が少ない? • 開発チームの設計スキルが足りない 11

Slide 12

Slide 12 text

技術的負債を解消する費用 設計スキルが低い開発チーム →技術的負債を解消する費用が高い 設計スキルが高い開発チーム →技術的負債を解消する費用が低い 12

Slide 13

Slide 13 text

技術的負債の解消を効率的かつ効果的に 開発組織の パフォーマンス 向上 技術的負債を 効率的に 効果的に 解消 設計スキル アップ支援 ここのやり方を 工夫する 13

Slide 14

Slide 14 text

開発チームの設計スキル 14

Slide 15

Slide 15 text

開発チームの設計スキルが足りない状態 良い設計と悪い設計を区別できない OR 悪い設計を良い設計だと誤解している 良い設計を悪い設計だと誤解している 良い設計にたどり着くまでに時間がかかる、OR いくら時間を使っても良い設計にたどり着けない… 15

Slide 16

Slide 16 text

設計スキル向上の速習性と即効性 スキル向上にかける費用をできるだけ少なく(速習性) スキル向上の具体的効果をできるだけ早く(即効性) 16

Slide 17

Slide 17 text

設計スキル向上の速習性と即効性 ① 設計スキルより設計改善スキルに集中する ② 個人より開発チームの設計改善スキル向上を目指す ③ 直面しているタスクの範囲で設計改善に取り組む 17

Slide 18

Slide 18 text

①設計スキルより設計改善スキル 「設計スキル」は漠然としている 「既存コードの設計改善」の方が、学びやすく、かつ、 即効性がある • 設計スキル全体を対象とすると、学習範囲が広がり、さまざまな学 び方があり、人によって習得内容や習得速度がばらつく 既存コードの設計改善にスキル領域を限定すると →改善方法と改善効果が具体的で取り組みやすい 18

Slide 19

Slide 19 text

②個人よりチームのスキル向上 個人単位の設計改善スキルの向上 →時間と労力がかかるわかりには、ばらつきが大きく チーム全体の効果は小さい(調整がたいへん) チームとして設計改善スキル向上に取り組む →チームで認識を合わせやすい領域は限定されるが、 チーム全体で取り組む効果は大きい 19

Slide 20

Slide 20 text

③直面しているタスクの範囲で設計改善 直面している機能の修正や機能の追加に対象を限定し、 機能変更の準備として設計改善する 全体の技術負債に対象を広げると費用対効果が悪化 直面しているタスクの範囲に限定した設計改善 → 費用が小さい、難易度も下がる → 改善効果を即時に体感できる(準備→効果) 20

Slide 21

Slide 21 text

即時に体感できる設計改善効果 コードを理解するまでの時間が少なくなる • コードを読む範囲が狭くなる • コードの意図を読み取りやすくなる コードの修正箇所が減る • 関連するコードが狭い範囲に集まる • 関連するコードの重複がなくなる • 変更の影響範囲が狭くなる 検証作業が減る • 狭い範囲の検証で品質を保証できる 21

Slide 22

Slide 22 text

開発チーム・開発組織の 設計改善スキル向上に取り組む 22

Slide 23

Slide 23 text

設計改善スキルの速習性を重視する 改善対象の特定、改善のやり方、改善効果をチーム全体 で認識を合わせやすい方法に集中する 改善効果を全員が即座に実感できる対象に集中する 落とし穴や逆効果が起こりにくい方法に集中する (トレードオフの議論が起きにくい方法を選ぶ) 23

Slide 24

Slide 24 text

設計改善スキル向上の取り組み方 おすすめメニュー 24

Slide 25

Slide 25 text

開発チームの設計改善スキル 初級レベル 乱雑なコードを整頓する6つの技法 ① コメントアウトコードの削除 ② デッドコードの削除 ③ チャンキング(空白行によるコード分割) ④ 説明用変数の導入 ⑤ ヘルパーメソッドの抽出 ⑥ ガード節の導入 全員が、いつでも、自発的に (相談・レビューなしで) 目指す状態 25

Slide 26

Slide 26 text

開発チームの設計改善スキル 中級レベル 複雑なロジックをクラスに抽出して整理する4つの技法 ① 値の算術演算・比較演算の抽出(値オブジェクト) ② コレクション操作の抽出(コレクションオブジェクト) ③ 条件分岐の抽出(区分オブジェクト) ④ 計算判断文脈の分離(メソッドオブジェクト) 全員が技法を知っていて リード役が支援、レビュー 目指す状態 26

Slide 27

Slide 27 text

開発チームの設計改善スキル 上級レベル 全体の方向性、一貫性、持続性を維持する4つの技法 ① 入出力モジュールと計算判断モジュールの分離 ② アプリケーション記述とプリミティブ記述の階層化 ③ 業務知識を使って名前空間を改善 ④ ソフトウェア設計を事業戦略に整合させる (事業視点で優先順位を判断する) 中核メンバーが リードする 目指す状態 27

Slide 28

Slide 28 text

チーム・組織の設計改善スキル向上 ✓ 設計改善に注目する ✓ 三つのレベルを同時に進める ✓ 今すぐ始める(行動する) ✓ すこしずつ進める ✓ 持続する 28