おいしいビールを飲んで酔っているので思いついた話をします。
技術は腐敗する
技術負債の話をしていて、これって技術負債というより技術腐敗という方がしっくり来るな、と思ったのがあります。
技術負債と言うのは、行き当たりばったりに作ったせいであとでやることが増えている事を指していると思います。
でも、必ずやらなきゃならない事以外を先送りにするのは、設計として一つの方法だと思ってます。YAGNIです。
ただ、設計としてあるべき姿にしたとしても技術は腐敗すると思ってます。
技術は進歩する
ある時に最高の状態であった設計も3年後やら5年後には時代遅れになります。
それは常に技術が進化しているからです。
日々誰かがより良い解決策を探していきます。だから日々より良い技術が出てきて新しい技術が出てくるわけです。
個別最適と社会最適は違う
自分が使う前提で最適な技術の設計とチームが使う前提で最適な技術の設計は違うます。社会全体で使う技術の最適な設計も違います。
チームが使う場合は少なくともチームメンバーが抱える問題を解決するようにYAGNIで設計を進めると思います。
でも、社会のスタンダードななる前にもっとたくさんの考慮が必要になります。時間もかかります。
それを一つのプロダクトの開発の中で開発するのはオーバースペックなようにも感じます。(巨大なプロダクトが持続性を高めるために社内の仕組みをオープンソースにするのは一つの方法だと思いますが)
プロダクト個別に最適した作り方と社会に最適化した作り方は違うと思うのです。
いつまでも最高の技術はない
プロダクト個別に最適化した作り方をしてると、同じ機能を持った技術が出てきて、そっちがスタンダードになったりします。
HTTPが通信で幅広く使われる前は、ソケット通信のプロトコルをプロダクト独自に作っていたとしても僕らなんら疑問がないと思ってます。通信速度や処理速度のような制約があって少しでも削りたい気持ちがある可能性もありますし。
でもそれらが進歩した時代で、10年前に最適だった方法を使うのは愚かなように感じます。
プロダクトは育てなければいけない
ここまでの話を考慮さると、同じプロダクトであったとしても使う技術を新しい技術に更新していかなければならないのがわかります。
プロダクトは何らかの問題を解決しますが、長く使われるプロダクトは、同じ問題を解決するために保守されます。
その時に新しい技術で同じ問題を解決するように作る必要があります。
でないと当時の技術を使える人も少なくなりますし、標準化された技術を使わないのは非効率だからです。
だから、同じプロダクトでも同じ機能を新しい技術で作り直すタイミングが必要だと思うわけです。
システムも育てなければならない
プロダクトだけでなくシステムやサービスも同じ話だと思います。
作られた当時の特徴を色濃く反映してると思いますし、それは時が進めば時代遅れになって、理解できる人が少なくなります。
そうなるの保守が難しくなるので、新しい技術に置き換えていかないと、継続性が危ぶまれると思います。
組織も同じだと思う
この話は組織も同じだと思います。法律は新しくなっていきますし、会社の中の仕事をやるためのツールやサービスもどんどん生まれてきます。
だから新しいことを採用しなければ組織は腐敗していき、継続が難しいなると思うのです。
おわり
なんとなく夜の勢いで、思ったことを文章にしてみました。
乱文になりますが読んでくれてありがとうございました。
ではでは。