負債返済日の取り組み

TL;DR

  • 負債返済日は、月に1回「普段あまり優先度が上がらないが、やったほうがいいこと」をやる日です。
  • いわゆる「技術的負債」の返済だけでなく、生産性を上げるためのツールやしくみを作ったり、ドキュメントを書いたりといったこともしています。
  • Chapter 単位で行っています。

Why

一言で言うと、システムや使用技術、開発方法などを、中長期的によりよい状態にしていくためです。
システムや使用技術、開発方法などは、時間を経るに連れて、サービス自体の進化、組織の変化、技術の発展、外部環境の変化などの様々な変化によって、徐々に最適な状態から離れていきます。 これらの最適な状態からの乖離は、溜まっていくとどんどん解消のために必要なコストが増えていくので、こまめに「返済」していくことが大切になります。
一方で、普段各メンバーが所属する Squad ではある程度短期的な成果を目指して活動します。そのような活動をしていると、短期的な成果につながらない活動は優先度が上がらずに、 なかなか取り組めなかったりします。そのため「しくみ」として、月に1回強制的に「普段あまり優先度が上がらないが、やったほうがいいこと」に取り組む日を組織的に設けています。

What

例として以下のようなことをやっています。が、具体的に何をやらなければいけないというルールはありません。
  • 依存ライブラリのアップデート
  • 社内ライブラリのメンテナンス
  • ドキュメントライティング
  • ツールの導入
  • CIの高速化
  • いらないコードの削除
  • リファクタリング
  • バグフィックス
  • セキュリティフィックス
  • flaky テストの解消
  • 開発用の便利機能を作る
  • ...

各 Chapter の過去の取り組み例 (internal)

Who

基本的にはエンジニアメンバー全員が参加します。 任意参加にすると、よほど意志の強い人でない限り、Squad でのメインの活動に比べて優先度が低くなり、参加しなくなるという流れになりがちなため、全員参加というルールにしています。 また、Why のところで書いたような背景から「メインのプロジェクトが忙しいから不参加」も基本的には許容しない方針としています。
活動は主に Chapter 単位で行っています。

When

1ヶ月に1回行っています。
日にちについては、まず Chapter 内では同じ日に行っています。また Chapter 間でも、必須ではありませんが、なるべく合わせるようにしています。 これは、Squad 内に複数の Chapter のメンバーがいるときに、負債返済日に参加中のメンバーとそうでないメンバーとがいると Squad 内コミュニケーションが煩雑になるためです。このような意図のため、Infrastructure のように Squad と Chapter が実質一致しているような Squad は必ずしも日にちを合わせる必要性はありません。

Where

コミュニケーションを取りやすいようにオフラインで集まってやっていたときもありましたが、今は特に共通のルールは設けていません。 このあたりの運用は各 Chapter に委ねられています。

How

どのように行うかの運用も各 Chapter に委ねられています。 多くのケースでは、だいたい前日くらいまでにやることを決めておき、当日は朝からそれに取り組み、夕方 Chapter で集まって成果共有をする、という流れで行っています。
やるタスクの決め方は、Chapter 内で相談してアサインしたり、自分自身でやることを表明したりで決めています。