# プロジェクト概要(目的・人数・体制)
契約に合わせて各サービスへアカウント解説、契約変更などの指示を出す共通の基盤システムのリプレイスを行っていました。
体制はSREチームが5名、私はプロジェクトマネジメントと設計に携わっていました。
# プロジェクトにおける自身の役割
SREチームが管理しているシステムとなっているため、現状の課題と改修コストなどを整理した上でプロジェクトの立案とそのマネジメントを主に担当していました。
2023年度に並行して進めている自社DCへのKubernetes基盤導入とも連携しており、そちらで構築したエコシステムの導入なども担当しています。
また、私が現行システムのドメインに詳しい状態でしたので、要件や仕様のレビューなども担当していました。
逆に詳細な設計や実装などはメンバーに移乗し、各自に自走してもらう体制で進めていました。
# 当時の背景/抱えていた課題と対策
当該システムは構築されてから時間が経過しており、構築当初に考えていたスループットでは今後の契約件数の増加耐えられないことが試算結果から明白になっていました。。
また、ドキュメントなども残っておらずツギハギのコードはメンテナンス性が低く、サービスを運用する基盤としてもリスクを抱えていると考えていました。
場当たり的な対応ではシステム的にも限界が来ること、属人性の高いシステムはコアメンバーの退職などによる崩壊のリスクがあることを関係部署へ説明し、リプレイスするプロジェクトを立ち上げることとしました。
# 課題へのアクション
### 進め方
SREチーム発案のプロジェクトですが、契約管理を担当するビジネス部門の業務と非常に関係性が高いものとなっていましたので、当該部門と巻き込んで現状のシステムや業務を元に要件再整理して、その情報を元に開発を進めました。
※契約管理の担当部門が処理したデータに合わせてユーザのアカウントを解説したり変更するため、この部門はシステムのユーザに該当する
RDRAとDDDを利用して現行のシステムからバックトレースで要件を定義、それを元に再設計しながらドキュメントも整備していくような進め方をしていました。
### 使用した技術
- 開発言語 バックエンド : Go
- フレームワーク : Gin, gRPC:buf
- Kubernetes基盤 : VMware Tanzu
- DB : CloudNativePG
- マニフェスト管理ツール : Helm / Helmfile
- デリバリツール : ArgoCD
- バッチの管理ツール : Argo Worfflows / Argo Events
- シークレットの管理ツール : HashiCorp Vault / Vault Secrets Operator
- オブザーバビリティツール : Grafana Stack(Prometheus, Loki, Tempo)
- CI/CDのツール : GitHub Actions
また、新しい技術的の導入としてgRPCを利用したマイクロサービス構造のアーキテクチャを採用しました。
### その他の施策
レガシーシステムのリプレイスで元々の要件が不明瞭な部分が多かったため、
RDRAを利用してバックトレースで要件を可視化してユーザ部門と要件を再定義していました。
# 課題に対して自身が発揮したバリュー及び成果
要件の再定義の際、メンバーやユーザー部門のメンバーが現行のシステムの仕様に引っ張られがちでしたが、そもそも業務上で本当に必要なことは何なのか? ということを問うことで必要な機能に絞ってシンプルに要件を整理出来るようにサポートしました。
※リードしすぎるのはチームの成長を阻害するのでフォローがちょうど良いと判断
また、SREチームとしては今後もKubernetesやマイクロサービス化をリードしていくという目標を掲げているので、技術選定時にそこを強く意識する様にしました。
その際、マネージメント層が決定して下ろす形は成長を阻害するのでメンバーに提案のタスクをアサインするようにしました。
提案時も複数の選択肢を考え、それぞれのメリット・デメリットをしっかりと説明してもらった上で判断する形を取ることでメンバーの育成も意識しました。