$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

技術的負債のパターンと悪影響・原因・返却方法について考える


FX

いろんな問題が技術的負債という一言にまとめられてしまっているので、負債の性質に合わせて、技術的奨学金、技術的FX、技術的年金、など用語を分けると良いのではないか、という話をした

  (@hitode909) 2018327
 
 - hitode909

3

3










変更困難パターン









no















  • 一気に返すのは難しいので、新しい機能を実装を作る時はいつもリファクタリング期間込で見積もりを立て、機能を作る前に先にリファクタリングする
  • 一旦その部分のことは一人の人が責任を持つようにして、その実装部分のタスクを特定の人に集中させる。それでコードの整理がある程度ついたら他の人に知見を共有する
  • あまり変更の必要がないようなあまり重要ではない部分だったらいっその事放置する

期限付き返却パターン


OSLong-term supportAPIdeprecatedLong-term support










使












  • 期限と、その期限が過ぎることによるデメリットが、どちらかといえば見えやすい。そのため先に調査だけすることで新機能作成との優先度を比較がしやすい。簡単な調査を行い、実際のプロダクトバックログに乗せてしまうのが良い
  • 可能ならの返却期限(Long-term supportなどの期限)と、絶対の返却期限(これを過ぎるとサービスが動かなくなる)の二つを可視化して、絶対の返却期限は守れるようにしておく

ヒヤリハットパターン
























まとめ

今回は技術的負債のパターンと悪影響・原因・返却方法についていろいろ考えてみたことを書いてみた。この三つのパターンをあげてみたけど、実際にはパターンが組み合わさったりしてより複雑になっていることも多い。
例えば

  • JSのフレームワークのバージョンが古くなっていて、Long-term supportの期限が切れそう
  • サポートが切れた時に、ブラウザのdeprecatedの機能を使っていた部分がfixされないこともありそうで、どこかで動かなくなりそうという期限付きの場合がある
  • またJSのフレームワークが古いため、開発速度のスピードが下がり(変更が容易でなくなり)、変更困難パターンも包含している

みたいなこととか?


これが正解だとも思えていないけど、技術的負債にパターンを見出し、それぞれの返却方法について深掘りしていくという考え方は良いような気がする。なので他の人はどういうパターンを見出しているのかとかを聞いてみたい。

2018/03/29 21:30追記


Twitter













技術的負債、グッドパターンとアンチパターンに分けて考えてみたい気がする。計画的に借り入れられて、そのおかげでビジネスが成功して、計画的に返済できるのはどういうときなのかカタログ化したい https://t.co/5eZhXfL4Ma

  (@shinpei0213) 2018329
 

中には「借り入れてるつもりじゃなかったのに負債化しちゃってる」みたいなやつがあるんだよな。これはなんかレベルを上げて殴る以外の方法で解決できない気がしている……

  (@shinpei0213) 2018329
 

グッドパターンって返済時期の目安が決まっている(例えばサービス規模がこのくらいになったときには返済しよう)ものとかですかねえ。早すぎる最適化をしないとかもある意味グッドパターンかもしれない。

  (@shiba_yu36) 2018329
 

「借り入れているつもりじゃなかったのに負債化しちゃってる」というがほとんどだと思っていて、それってもしかしたら負債という言葉が適切じゃない気もしますね

  (@shiba_yu36) 2018329
 

たしかにそうですね。「なんのために借り入れるのか」というのが明確な負債はたぶん前向きな負債だと思っていて、それを取るのは悪いことではないことも多いと思っています。そういう負債と、「いつのまにか変更のコストがでかくなっちゃった」みたいなやつは分けて考えたい気持ちは大きいです

  (@shinpei0213) 2018329
 

のですが、現在地点から見ると「このコードのせいで早く価値を届けるのがむずかしい」というのは一緒みたいなのはあるかも……とも思います

  (@shinpei0213) 2018329
 

同じ悪影響でも理由は違うことはありますね。ただ今は「このせいでバグが起きやすい」「このせいで変更がしにくい」など、実際の起きている悪影響もまだちゃんと分離できてなくて、ごっちゃになっている気がするので、まずは悪影響の分離をしたい気がしますね

  (@shiba_yu36) 2018329
 

たしかに、「どういう負債の結果なにが起こるのか」の軸と「なんのためにその負債を取るのか」の軸は別の軸として考えたほうがよさそうな気がしますね

  (@shinpei0213) 2018329
 

というのも、悪影響とその悪影響を取り除く時間を明確化できれば、他タスクとの比較が可能になるからです。ただし昨日言っていたとおり、悪影響が「開発時間」に影響をおよぼす場合、観測が難しいので、別指標に変換もしくは分離できるとさらに良いですね。

  (@shiba_yu36) 2018329
 

悪影響具合、返済コスト、あえて負債を作ることのベネフィットなどが少しずつ明確になってくると、グッドパターン・アンチパターンが見えてくる気がする

  (@shiba_yu36) 2018329
 

2018/03/29 22:00追記

さらにいい意見が出てきたので引用させてもらいます。