# SRE Book - Chapter 18: Software Engineering in SRE
## 要約
本章は、SRE チームが社内の本番環境の課題を解決するためにソフトウェアエンジニアリングをどのように実践するかを論じている。SRE は本番システムへの深い理解、ドメイン知識、ユーザーとの直接的なフィードバックループという3つの優位性を持ち、スケーラビリティや障害への優雅な対処を考慮したツールを開発できる立場にある。章の中核をなすケーススタディとして、Google の意図ベースのキャパシティプランニングシステム Auxon を詳述する。Auxon は従来のスプレッドシートによる手作業の計画を、サービス要件を機械可読な「意図」として記述し混合整数計画法で最適化するアプローチに置き換えた。さらに、SRE 組織内にソフトウェアエンジニアリング文化を醸成するための戦略として、適切なプロジェクト選定、段階的な導入、品質基準の維持、専任時間の確保といった実践的指針を提示している。
## 主要概念
- **SRE におけるソフトウェアエンジニアリングの優位性**: SRE は本番環境の専門知識、ドメイン理解、直接的なフィードバックという3つの戦略的利点を持ち、社内ツール開発に独自に適した位置にある。組織的には SRE チームの成長をサービス成長に対してサブリニアに保つという原則が、継続的な自動化とツール最適化を要求する。
- **意図ベースのキャパシティプランニング(intent-based capacity planning)**: 「実装ではなく要件を記述せよ」を核とする手法である。サービスの依存関係やパラメータを機械可読な意図として符号化し、パラメータ変更時に計画を自動再生成する。抽象度はレベル1(明示的リソース指定)からレベル4(信頼性目標のみ)まで4段階あり、レベル3(運用要件)が柔軟性と理解容易性のバランスとして最適とされる。
- **Auxon**: Google の SRE チームが2年かけて開発した意図ベースのキャパシティプランニングシステムである。設定言語エンジン、混合整数・線形計画ソルバー、パフォーマンスデータ、需要予測、リソース供給・価格データを統合し、数百万ドル規模のリソース配分計画を生成する。
- **ローンチと反復改善(launch and iterate)**: 不確実性の高い SRE ソフトウェアプロジェクトでは、完璧を追求せず「愚直なソルバー(Stupid Solver)」のような単純なヒューリスティクスで概念を検証し、モジュール化された設計で後から洗練する方針が有効である。
- **採用戦略と顧客サービス**: 既存のキャパシティプランニングプロセスを持たないチームを初期顧客として狙い、早期の成功事例を通じて組織横断的な採用を推進する。ホワイトグローブサポートにより、自動化への恐れを払拭し、退屈な作業の所有権から結果の所有権への移行を示す。
- **チーム構成**: 効果的な SRE ソフトウェアチームはジェネラリストと幅広い専門家を組み合わせ、プロジェクトの成熟に応じてオペレーションズリサーチや統計の専門家を巻き込む。
- **ソフトウェアエンジニアリング文化の醸成**: SRE 組織にソフトウェア開発モデルを導入することは、技術的変化ではなく組織的変化である。明確なコミュニケーション、組織能力の評価、品質基準の維持が鍵となる。
## 実践的指針
- SRE チームの成長をサービス成長に対してサブリニアに維持するため、継続的にツール開発と自動化に投資する
- キャパシティプランニングでは「実装ではなく要件を記述する」方針を採用し、意図の抽象度はレベル3(運用要件: 冗長性や地理的制約)を目標とする
- 不確実性が高い段階では完璧なソリューションを追求せず、単純なヒューリスティクスで概念実証し、モジュール化された設計で後から置き換える
- 初期の採用では、既存プロセスを持たないチームを狙い、時間削減やトイル削減を定量化した事例で他チームを説得する
- ソフトウェアの汎用性を設計原則とし、特定のデータソースやツールへの依存を避ける「そのまま来い(come as you are)」方針で採用障壁を下げる
- ソフトウェア開発に携わる SRE は専任開発者にならず、オンコールや本番運用に関わり続けることで、作り手と使い手の両方の視点を保つ
- 中断のないプロジェクト専用時間を確保し、タスクスイッチングによる生産性低下を防ぐ
- 品質基準は妥協せず、コードレビュー・テスト・他チームによる本番準備レビューを実施する。信頼性は築くのに数年かかるが、失うのは一瞬である
- 6か月のリリースサイクルから始め、有用な機能の特定とチーム生産性の学習を行い、成熟後にプッシュオングリーンモデルに移行する
## 関連
- [[@2016__OReilly__SRE Book - Chapter 1 Introduction]]
- [[SRE Book]]
- [[SRE]]
## 出典
Beyer, B., Jones, C., Petoff, J. & Murphy, N.R. eds. *Site Reliability Engineering: How Google Runs Production Systems*, O'Reilly Media, 2016. Chapter 18: Software Engineering in SRE (Written by Dave Helstroom and Trisha Weir with Evan Leonard and Kurt Delimon; Edited by Kavita Guliani).