ストーリー
ミッション概要
| 項目 | 内容 |
|---|---|
| 演習タイトル | RFC/ADRプロセス構築 |
| 想定時間 | 90分 |
| 成果物 | RFCドキュメント、ADR、例外処理の審査結果 |
| 対象組織 | TaskFlow株式会社 |
Mission 1: RFCを作成する
要件
TaskFlow社で「バックエンドAPIの推奨言語をGoとTypeScript(NestJS)の2言語に統一する」というRFCを作成してください。
- RFCテンプレートに従った完全なドキュメント
- 少なくとも3つの代替案を検討し、それぞれのメリット・デメリットを記載
- 影響範囲と移行計画の概要を含める
解答例
RFC-0001: バックエンドAPI推奨言語の統一
概要: バックエンドAPIの推奨言語をGo(高負荷サービス向け)とTypeScript/NestJS(標準サービス向け)の2言語に統一する。既存のJava/Node.js(Express)サービスは段階的に移行する。
動機: 現在4言語(Go, Node.js, Java, Python)が混在し、ナレッジ断片化、人材流動性低下、運用負荷増大が発生。棚卸しの結果、月間約60万円の追加コストが発生していることが判明。
代替案:
- 案A: Go単一言語 → フロントとの共通化を断念。TypeScript人材を活かせない
- 案B: TypeScript単一言語 → 高負荷サービスのパフォーマンス要件を満たせない可能性
- 案C: 現状維持(4言語) → 問題が解消されない
推奨案: Go + TypeScript(NestJS) の2言語体制
移行計画:
- Phase 1(Q1-Q2): テンプレート整備、ガイドライン策定
- Phase 2(Q2-Q3): Express→NestJS移行(通知チーム)
- Phase 3(Q3-Q4): Java→Go/TS移行計画策定(課金チーム)
Mission 2: 反対意見に対応する
シナリオ
RFC-0001に対して以下の反対意見が寄せられました。各意見に対する回答を記載してください。
| 反対者 | 意見 |
|---|---|
| 課金チームリード | 「Javaは型安全性が高く、金融系の処理に適している。GoやTypeScriptで同等の信頼性を担保できるのか」 |
| データPFチームリード | 「Pythonを副言語にすべき。データ処理でPython以外は非現実的」 |
| モバイルチームリード | 「モバイルのKotlinとサーバーのKotlinで統一する案は検討しなかったのか」 |
解答例
課金チームへの回答
「ご懸念はごもっともです。Goは型安全性において Javaと同等の静的型付けを提供します。TypeScript(NestJS)もstrictモードにより高い型安全性を確保できます。ただし課金サービスは特に高い信頼性が求められるため、移行はPhase 3(最も後)に位置づけ、十分な検証期間を設けます。また、移行判断は別途RFC/ADRで議論し、技術的に懸念が残る場合は時限的例外として Java継続を認める余地を残します。」
データPFチームへの回答
「Pythonは今回のRFCの対象外(バックエンドAPI)です。データパイプライン用途でのPythonはSecondary Languageとして別途ADRで明文化します。バックエンドAPIとデータパイプラインは用途が異なるため、RFCのスコープを”バックエンドAPI”に限定しています。」
モバイルチームへの回答
「Kotlin Server Side(Ktor等) は代替案として検討しましたが、バックエンドでのKotlinの採用実績が組織内にゼロであること、日本市場での採用事例が限定的であることから、現時点ではリスクが高いと判断しました。将来的にテクノロジーレーダーのAssessに追加し、評価を継続することを提案します。」
Mission 3: ADRを記録する
要件
RFC-0001が承認されたと仮定し、対応するADRを作成してください。
- 拡張形式テンプレートに従ったADR
- 検討した選択肢と決定理由を明確に記載
- **ポジティブ・ネガティブな結果(トレードオフ)**を記載
解答例
ADR-0001 として、コンテキスト(4言語混在の問題)、検討した4つの選択肢(Go単一/TS単一/Go+TS/現状維持)、決定(Go+TypeScript)、結果(ナレッジ集約のメリットと移行コストのデメリット)を記録。関連RFC: RFC-0001、影響範囲: APIチーム、通知チーム、課金チーム。
Mission 4: 例外申請を審査する
シナリオ
以下の2つの例外申請が提出されました。各申請を審査し、承認/条件付き承認/却下の判定と理由を記載してください。
申請1: 課金チーム
| 項目 | 内容 |
|---|---|
| 対象標準 | バックエンドAPI推奨言語(ADR-0001) |
| 逸脱内容 | Java (Spring Boot) の継続使用 |
| 理由 | 決済処理の複雑性が高く、移行に12ヶ月以上の検証が必要。移行中の障害リスクが大きい |
| 希望期限 | 18ヶ月 |
申請2: 新規プロジェクトチーム
| 項目 | 内容 |
|---|---|
| 対象標準 | バックエンドAPI推奨言語(ADR-0001) |
| 逸脱内容 | Rustでの新規サービス開発 |
| 理由 | 高頻度取引処理で、GoよりもRustの方がレイテンシ要件を満たせる |
| 希望期限 | なし(恒久的例外) |
解答例
申請1: 課金チーム → 条件付き承認
判定: 条件付き承認(時限的例外、18ヶ月)
理由: 決済処理の移行は慎重に行うべきであり、リスク評価は妥当。18ヶ月の猶予を認める。ただし以下の条件を付す:
- 6ヶ月以内に移行先言語(Go or TypeScript)の選定と移行計画をRFCで提出
- 3ヶ月ごとに進捗を技術標準委員会に報告
- 新機能追加時は可能な範囲で移行先言語での実装を検討
申請2: 新規プロジェクトチーム → 却下(条件付きで再申請可)
判定: 却下
理由: 恒久的例外としては認められない。Rustは組織内に実績がなく、採用・教育の追加コストが大きい。ただし、以下の条件で再申請を推奨:
- まずGoでプロトタイプを構築し、レイテンシ要件を満たせないことを実データで証明する
- Rustが必要と判明した場合、実験的例外(6ヶ月)として再申請
- 並行してRustをテクノロジーレーダーのAssessに追加するRFCを提出
達成度チェック
| 観点 | 達成基準 |
|---|---|
| RFCの完成度 | テンプレートに準拠し、動機・代替案・影響範囲が網羅されている |
| 反対意見への対応 | 技術的な根拠に基づき、感情的にならず論理的に回答できている |
| ADRの品質 | コンテキスト・選択肢・決定・結果が明確に記録されている |
| 例外審査の妥当性 | 組織の利益とチームの事情のバランスが取れた判定 |
推定所要時間: 90分