この記事は SUPER STUDIO Advent Calendar 2023 の1日目の記事になります。
前提
弊社ではecforceというシステムをSaaSという形でサービスを提供しています。
その中で、別のカートシステムを現在使っており、ecforceに乗り換えたいというクライアント様がいます。
そのようなクライアント様に対して、既存データを引き継ぐために、データの抽出/加工/インポートを行なう「移行業務」を弊社では行なっています。
これは半年前の話です。
私は2023年1月に、別の事業部から今のチームに異動し、現在に至るまで在籍しています。
私のチームでは、上記「移行業務」を行うための、社内システムの開発と運用を行なっています。
私が異動する前は、
- チーム発足当初から在籍している2人
- 半年〜1年以内に参画したメンバー3人
- EM1人
といったチームメンバー構成でした。
本題
当時の業務やチーム、メンバーは以下のような状況でした。
- ベースの機能が開発し終え、システムとしては一段落。ここからは運用改善フェーズ
- 事業部内で新しいサービスの開発/運用をするメンバーが必要、新たなチームを発足
- 私が異動したことで、チームメンバー数が計画よりも多くなった
このような背景があったので、チーム発足当初から在籍している2人が別のチームに異動が決まりました。
引き継ぎの期間は3ヶ月とわずかです。
そこで異動する2人には、以下のようなお願いをしました。
不要なコードを全て排除してほしい、引き継ぎ資料は作らなくて良い
システムを開発/運用している中で、今までリポジトリ内を見直す機会がありませんでした。
そこで2人には、具体的に以下のような作業を依頼しました。
- 過去のスクリプトをアーカイブとして、別のリポジトリに移植
- 5回くらいに渡り、コード削除のPRを作成、本番にマージ
なぜ資料作成や勉強会等をお願いせず、不要なコードの削除をお願いしたかは、以下2点が理由です。
中期的に不具合や障害が減ると思ったから
開発や運用は、リレーのようなものです。
そのため、メンバーが入れ替わることをある程度想定して、コードやコミットを残していく必要があります。
特に今回異動したメンバーが、チーム発足当初から在籍している2人でした。
ここを逃すと、必要なのか不要なのかよくわからないコードが一生残り続けると思いました。
「本番で動いているコードを消す」という作業は、中身や経緯を分かっているメンバーでないと、遂行できない難しい作業です。
不要なコードを全て排除となると、リポジトリ全体を見渡し、嫌でもコア機能に手を入れる必要があります。
そのため、不具合をある程度覚悟し、関係者にも周知していました。
また半年〜1年を過ぎると、高確率でシステムの中身や経緯を忘れてしまいます。
例えば異動後にチャットで質問をしても、100%の回答が得られないことがあります。
そのため、チームに在籍している今がチャンスだったのです。
引き継ぐ範囲を最小限にする方が、残るメンバーが楽になると思ったから
もし引き継ぎ資料の作成にリソースを割いた場合、
- 未更新のドキュメント
- 引き継ぎ資料
- 本番で動いている必要なコード
- 本番で動いている不要なコード
の4つを引き継ぐこととなり、それだけでボリューミーになってしまいます。
それであれば、
- 未更新のドキュメント
- 本番で動いている必要なコード
の2つに絞った方が、残るメンバーとしては引き継ぎが楽になるのではないか、という発想の元で不要なコードの削除を依頼しました。
未更新のドキュメントについても、残るメンバーで追従できそうだったのも、一つの理由です。
まとめ
引き継ぎには正解がない中で、
- 中期的な障害発生の削減
- 引き継ぎ対象の最小化
を目的に不要なコードの削除にフォーカスしました。
最終的には、Rubyコードや使っていないshellスクリプトを合わせて 58000行
320ファイル
を削減しました。
小さな不具合は検知されたものの、大きな障害は発生しませんでした。
また小さな不具合をいくつか検知したことで、ソースコードの繋がりやミスが起きやすい箇所を改めて認識することができました。
結果として引き継ぎは成功し、半年間で移行業務のシステムのさらなる拡大/改良に繋がりました。
不要なコードを片っ端から削除してくれたメンバー2人には、とても感謝しています。
ただし社内システムだからこそ、ここまで思い切れたということもありますので、引き継ぎの1つの選択肢として伝われば幸いです。