技術的負債を見つめなおす

2564c99f616f1ecfc0f617a6fe87e2a9?s=47 penguin045
September 16, 2020

 技術的負債を見つめなおす

#RAKUSMeetup

2564c99f616f1ecfc0f617a6fe87e2a9?s=128

penguin045

September 16, 2020
Tweet

Transcript

  1. Meetup Meetup Meetup Meetup Meetup Meetup Meetup Meetup Meetup Meetup

    Meetup ©2020 RAKUS Co. Ltd. 技術的負債を⾒つめなおす 技術的負債を⾒つめなおす やなせ たかし
  2. #RAKUSMeetup やなせ たかし つよいプログラマーになりたい 最近Clojureはじめました 18年モノのシステムを開発しています

  3. #RAKUSMeetup もくじ 1. 技術的負債ってなんだ 1. 負債とは 2. 技術的負債とは 3. ケーススタディ

    2. 技術的負債に⽴ち向かう 1. でもその前に 2. 技術的負債にも種類がある 3. 返済戦略を考える
  4. #RAKUSMeetup 技術的負債ってなんだ

  5. #RAKUSMeetup そもそも負債とは︖

  6. 負債とは 負債とは 資産と表裏⼀体 純資産 + 負債 = 総資産

  7. 会計的な(経営的な)負債 返さなくてはいけない資⾦のこと 他⼈の⾦と考えるとだいたいあってる 返さなくていいなら返さない⽅がお得

  8. 脱線ここまで

  9. #RAKUSMeetup 技術的負債とは 技術的負債とは

  10. 技術的負債 ⾒逃し(され)た品質の低い部分 アーキテクチャ コード ⻑期的に引き起こす問題 バグの増加 開発速度の低下

  11. それでもリリース(価値提供)のためには必要

  12. #RAKUSMeetup なぜ︖ なぜ︖

  13. ケーススタディ あるソフトウェアの開発 開発費以外は変動しないものとする ちゃんと作ると⾚字になることがわかっている ちょっと何かを改造したら利益が⾒込める ただし技術的負債がたまる

  14. 損益計算書を⾒てみましょう

  15. ちゃんと作る場合 想定通り⾚字になります

  16. 技術的負債を受⼊れ 技術的負債を受⼊れ 開発コストを下げる 開発コストを下げる

  17. するとこうなる 開発費を圧縮・⼀気に⿊字化

  18. 何が起こった︖ 何が起こった︖ 損益計算書から読み取れること 開発費が下がった 利益が出た すばらしい︕プロジェクトは成功だ︕

  19. 完 完

  20. 技術的負債はどこに︖ 技術的負債はどこに︖

  21. バランスシートを⾒てみましょう

  22. ちゃんと作る 安く作る

  23. ⾒えない ⾒えない

  24. 技術的負債が⾒えない理由 技術的負債が⾒えない理由 返済期⽇がない 借りて資産が増えるわけでもない 起こったのはP/Lの費⽤が下がっただけ つまり、帳簿上認識されにくい

  25. そのままP/Lに異変が起こるまで 問題に気付かない

  26. P/Lに起こる異変 P/Lに起こる異変 開発費・販管費が増加する 開発スピードの低下 品質の低下 → いわゆる技術的負債の「利息」

  27. でも技術的負債を受け⼊れないと︖ でも技術的負債を受け⼊れないと︖ ⾚字 ビジネスとして成り⽴たない可能性がある

  28. #RAKUSMeetup ここまでのまとめ ここまでのまとめ 技術的負債は⾒えにくい 返済期限がない 短期的にデメリットが⾒えない ある時急に影響が⾒え始める 技術的負債の分布の偏り 指数関数的な利息の増加

  29. #RAKUSMeetup もくじ 1. 技術的負債ってなんだ 1. 負債とは 2. 技術的負債とは 3. ケーススタディ

    2. 技術的負債に⽴ち向かう 1. でもその前に 2. 技術的負債にも種類がある 3. 返済戦略を考える
  30. #RAKUSMeetup 技術的負債に⽴ち向かう 技術的負債に⽴ち向かう

  31. その前に その前に

  32. 漠然としたイメージ P/Lへのインパクトが少ないうちに返せばよさそう

  33. 質問 本当に技術的負債は致命的な問題に直結する︖ 回答 たぶんそう 部分的にそう

  34. なぜ「たぶん」「部分的」なのか 技術的負債は、多くの場合局所的なもの そこに触れなければ問題は表⾯化しない 全体に対して影響があるものは問題 アーキテクチャレベルでの負債 要件レベルでの負債 これは別の問題

  35. 技術的負債にも種類がある 技術的負債にも種類がある 局所的な技術的負債 全体に影響を及ぼす技術的負債

  36. 局所的な技術的負債 返さなくてもいい場合が多い 直接関係なければ影響がない 壊れていないコードを直すな → コスパが悪いと判断されがち

  37. 全体に影響を及ぼす技術的負債 まず直す価値があるのはこちら 修正コストが⾼くなりがち 影響が⼤きいため 問題と認識された頃には影響が⼤きすぎる → コスパが悪いと判断されがち

  38. #RAKUSMeetup 返済戦略を考える 返済戦略を考える

  39. 基本戦略 基本戦略 費⽤対効果が⾒込めそうなときに、 技術的負債の返済をする

  40. ビジネスなので仕⽅ない

  41. おさらいすると、 局所的な技術的負債 → コスパが悪いと判断されがち 全体に影響を及ぼす技術的負債 → コスパが悪いと判断されがち

  42. なぜなのか 技術的負債の返済にもコストがかかる → ⾒込めるリターンが説明しづらい 問題が表⾯化したときには影響が⼤きすぎる → コスト⼤、費⽤対効果が⾒込めない

  43. 詰んでます︖

  44. もちろん 修正コストが低いうちから返済するのがベスト → コストが低いうちは費⽤対効果も⾼い

  45. でも気づかれない でも気づかれない

  46. #RAKUSMeetup 結論︓技術的負債の返済はコスパが悪い いわゆる気づいたときには⼿遅れ状態

  47. #RAKUSMeetup もういちど基本戦略 もういちど基本戦略 費⽤対効果が⾒込めそうなときに、 技術的負債の返済をする

  48. どんな時がチャンス︖

  49. 技術的負債を返済できるチャンス 返済コストが安く、すぐに効果が⾒込めるとき 返済しなければ破綻するとき ⼤きな⼯数を稼げそうなとき

  50. いわゆるレガシーシステムの場合 返済コストが安く、すぐに効果が⾒込めるとき 返済しなければ破綻するとき ⼤きな⼯数を稼げそうなとき

  51. つらいケース つらいケース

  52. 返済しなければ破綻するとき 借⾦の返済期限が来た 問題が肥⼤化しており、返済コストが⾼い状態

  53. 品質の低下で損失を出す、 納期の⼤幅超過が続くなど危険な状態

  54. ⻑く苦しい戦い ⻑く苦しい戦い

  55. ベターなケース ベターなケース

  56. ⼤きな⼯数を稼げそうなとき 技術的負債の返済を紛れ込ませる 過去の技術的負債を取り込まない 品質を作りこむチャンス

  57. こちらを狙いたい

  58. #RAKUSMeetup じつは最近チャンスが到来しました ⼤きな新機能の追加がある かなりの規模の開発になる 追加部分からアーキテクチャ刷新に着⼿

  59. チャンスを逃さないために チャンスを逃さないために レガシーでもあきらめない 座して死を待つだけではただつらいだけ できることを考える

  60. チャンスを逃さないために チャンスを逃さないために 負債の局所化 負債を作りこまない 汚染を広げない リファクタリングしやすい状況を整える

  61. #RAKUSMeetup まとめ 技術的負債 と 負債 は確かに似ている 技術的負債は⾒えにくい 返済もコスパが⼤事 チャンスはやってくる そのための準備はしておく