意外と忘れがちですが、システム開発する上で常に意識するようにしています。
技術的な選択が必要な場合、例えば、、、
- クラウド基盤をAWSにするか?GCPにするか?
- 開発フレームワークをAにするか?Bにするか?
とても重要な選択ではありますが、後に振り返ってみて正解だなと思える選択を常に行うことは未来を予測できない以上難しいです。
そのため、より正しい選択のためにしっかり検討することは大事ですが、スイッチングコストを低くしておくことも大事にしています。
スイッチングコストを低くすることとは何かと言えば、私はこの2つだと思います。
- 別の仕組みに移行しやすい実装にする。
- 仕組みに依存しない抽象的なレイヤをきちんと押さえておく。
1つ目については、コンテナなどのポータビリティの高い仕組みを導入したり、仕組み独自の機能(例えばAWS特有のサービスであったり、開発フレームワークのマニアックな機能)を過剰に使わないようにします。
後者については仕組みがもっているポテンシャルを最大限引き出せないことになってしまうため、賛否ありそうですが、私はやりすぎないように気を付けています。
2つ目については、開発であれば開発フレームワークに依存しない設計をしっかり行い、例えばDDD(ドメイン駆動設計)を取り入れてみたりします。インフラであればクラウド基盤やミドルウェアに依存しないレベルできちんと設計を行い、頭の中にイメージを持つようにします。
スイッチングコストを意識しましょうというお話でした。