やはり俺の「質 v.s. スピード」はまちがっている。 #eof2019

2019/10/31(金)に開催されたEngineering Organization Festival 2019 で @t_wada さんの「質とスピード」という講演を聞き、とても感銘を受けたのでメモ。

品質とスピードはトレード・オフの関係にある。どちらを優先するか?要バランスだ。
そう思っていた時期が私にもありました。
けど、そんなことはなかった!

素敵なグラレコ


犠牲にされる品質

  • 荒ぶる四天王(QCDS)があらわれた!
    • 「品質を犠牲にする」が選ばれやすい
    • プロジェクトマネジメントの現場で行われてきたこと
  • 品質を犠牲にすればスピードは得られる?
    • 短期的には得られる
    • 中期的には逆効果になる
    • 長期的には致命傷になる
  • 品質を犠牲にしてスピードをあげると言うが
    • 「品質とは何か?」

「品質」とは何か?という問い

  • “「品質」っちゅうから難しく聞こえてまうんや。「質」と言えば皆わかってくれる”
  • ワインバーグさん「品質とは価値である」
  • 無名の質
  • 狩野モデル
  • (お客様や非エンジニアから)見える品質と見えない品質
    • 外部品質(External Quality) と内部品質(Internal Quality)
    • 機能要件と非機能要件
    • 利用時の品質(SOE)と製品品質(SOR)
  • 内部品質を高めた先に外部品質がある

内部品質(のうち保守性)を犠牲にしてスピードを得る

  • では、どのような内部品質を犠牲に捧げたのか?
  • 一番犠牲にされがちな内部品質は「保守性」

  • スピードを得るために犠牲に捧げられた「保守性」
    • テスト容易性
    • 理解容易性
    • 変更容易性

  • 保守性(テスト容易性、利用容易性、変更容易性)を犠牲に捧げて、仮初の速さを得る
  • コピーアンドペーストによる増改築→荒みきったコード→「動くコードに触れるな」
  • 動いてるかどうかわからないけど、爆弾処理のようなリリース
    • 「たぶん動くからリリースしようぜ」

ビジネスをしていると常にスピード優先なので、品質を優先することは、永遠にこない

  • マスター先生「時間を優先するためなら品質を優先できると考えているものもいるようだが、それは間違いだ」





  • テスト容易性が下がる→テストされない→テスト容易性が下がる→ループ
  • 影響範囲調査と修正がひとつひとつの作業に乗ってきてしまう。
  • 「全体工数の4割くらい失敗するテスト直してる気がする」

品質とスピードは、トレードオフではない

  • 「要はバランス」おじさん

品質"実質無料"

  • 品質アップは、コストアップかコストダウンか?
  • Quality is free.

  • クオリティ&ダーティの神話
  • むしろ品質を高めることで、デリバリーが高速になることが多い by エクストリームプログラミング
  • 最高の開発者はいちばんのきれい好き
  • コードの品質を高く保っていた「からこそ」速い

QCDのトレードオフなんて本当は無かったんだ

  • 内部品質を高く保って、外部品質で勝負したかった。
  • 品質を下げると、デリバリーが遅くなる→スピードが遅くなると仮説検証の回数が少なくなる→検証できないので外部品質が低くなる

  • 4つのキーメトリクス(by Accelerate)
    • リードタイム
    • デプロイ頻度
    • MTTR
    • 変更失敗率

「質 v.s. スピード」という考え方は根本的にまちがっている

  • Done is better than perfect - をどう訳すか
    • 「多分動くと思うからリリースしようぜ」?
    • 「完璧を目指すよりまず終わらせろ」?
  • 片方を犠牲にした場合、知らぬうちに片方も犠牲にしている


  • コードがスパゲッティになったら直すのは、ほぼ不可能である
  • ファウラーさんが数字を出した。
    • 「内部の質への投資は1ヶ月以内に現れる」

まとめ

「質とスピードはトレードオフの関係にある」は大きな誤解です