技術選定に解はなく、組織やユースケースなど様々なファクターが絡み合う、という大前提の上で自分は枯れた技術を選びがちである。
例えば不確実性の高い要件であれば、チームや自分の経験値が高い枯れたフルスタックフレームワークを選択するし、なるべくシステムをシンプルに認知負荷が上がらないようにする気持ちがある。その枯れた技術の中で少しずつ新しい技術を取り入れてリスクテイクしている感じ。
流行りの技術=枯れていない技術とすると、流行りの技術は以下のような懸念があるのかなと思っている。
- なにか技術的な問題が発生したときに自力で解決できる技術力が必要
- 流行りの技術が何かに秀でている要素が合ったとして、トレードオフがある可能性があり、結果枯れた技術を採用するのとプラマイゼロのケースがある
- 「流行りの技術を使って楽しい」と思えるのはせいぜい数ヶ月から1年くらいな気がする
一方で枯れた技術を選択し続けることで、学習機会を奪ってしまっているのではないかという懸念もある。 既存技術の延長でしか成長できないのではないか、とか。
また、以下のようなケースであれば新しい技術を採用するのは良いと思う。
- なにかパフォーマンスの問題などでマイクロサービスで局所的に解消できるケース
- その技術選定にチームが中長期的に覚悟を持って取り組めるケース
- なにか問題が発生したときに捨てれる、あるいはビジネスに全く影響なく作り直すなどなんとかする技術力を有しているケース。あるいはドメイン的に作り直しが全く問題ない、リスクがないケース。
ビジネス要件と技術選定が紐づくため、枯れた技術で解決できない課題があれば積極的に新しい技術を検討すべきだし、 採用など中長期的に覚悟を持って取り組めるのであれば止めるものは何もないのかな、といった感じ。
逆に避けるべきケースとしては↓こんな感じ。
- チームとしてその技術を使ってビジネスを遂行できない
- 中長期的なPros/Consを検討できていない。例えば運用負荷・認知負荷を全く検討できていない、とか。
とはいえ、技術選定に解はない(再掲)なので難しいんだよなぁ。