今回から新しい章に入ります。単純さ、システムがシンプルであることは保守や改善において、非常に有用であると想像できますが、今回の章で単純さついて、概要を見ていきます。
単純さを知る前に
元来、ソフトウェアシステムは、動的で不安定なものです。ソフトウェアが完全に安定するのは、そのソフトウェアが捨てられたときです。
SREは、システムの進化と安定性のバランスをとることが仕事になります。
システムの安定性とアジリティ
安定性が犠牲となることが妥当な時もあります。システム開発は試行錯誤をしなければ、問題点を発見することができないことが多くあります。しかし、その試行錯誤のすべてがリリースされるのは、安定性において、問題が生じます。そのため、試行錯誤のコードを有効期限付きのコードとして、リリースする方法があります。これにより有効期限があるコードはユーザーに使われません。また、SREは安定性の確保を行いますが、開発のアジリティへ与える影響を最小限にすべきです。プロダクション環境へのロールアウトの信頼性を高めることは、バグが生じたときの解決の速度を速めます。
退屈の美徳
ソフトウェアは、退屈であるべきです。ここでいう退屈とは、想定外のことが起きないということです。想定外のことを起こす可能性があるのは、それが流動的で複雑なものです。
ここで、受け入れるべき複雑さと必要のない複雑は分けることが重要です。
受け入れるべき複雑さとは、ある問題が本質的に抱えている向き合うべき複雑さです。必要のない複雑さとは、本質ではなく周囲の環境によって、流動的に変化することによる複雑さです。これはエンジニアリングによって、解決されるべきです。
システムの想定外の複雑さを差し戻し、継続的にシステムから複雑さを取り除く努力をしなければなりません。
コードはあきらめない
エンジニアは、自分の書いたコードに愛着を持つものです。そのため、ソースツリーから自分のコードが削除されることに抵抗することがあるかもしれません。しかし、ソース管理のシステムを用いれば、変更の取り消しは容易です。無用なコード(コメントアウトも)が残っていることは、後の負債になりえます。すべてのコードは、本質的な目的を持っているべきです。
まとめ
- アジリティと安定性のバランスを保つ
- 無用な複雑さは排除する
参考文献
- Betsy Seyerほか SRE サイトリライアビリティエンジニアリング オライリー 101-103