こんにちは!株式会社ケップルのProduct Development Sectionでエンジニアリングマネージャーを務めている石野です。
2024年5月時点で、「KEPPLE」「KEPPLE DB」「KEPPLE CRM」「株主総会クラウド」の4つのサービスを開発をしております。
少数のメンバーで複数のサービスを手がける中、多くの企業が直面する技術的負債の問題にも積極的に取り組んでいます。
技術的負債の詳細に関しては、芹田さんの記事で深く掘り下げていますので、ぜひご一読ください。
この記事では、私たちがどのように技術的負債に立ち向かっているのか、その取り組みについてご紹介します。
今までの取り組み
これまで私たちは機能開発を最優先しており、リファクタリングやパッケージのアップデートなどを積極的に行えていませんでした。
当時は事業の加速が最優先だったこともあり、技術負債を受け入れるのは価値ある選択でした。しかし、技術負債が積み重なると、多くの問題が生じ始めます。
コードが複雑化し、開発速度が低下します。保守コストの増加も避けられません。さらに、パッケージのバージョンアップが必要になると、メジャーアップデートが積み重なり、どんどん手がつけられなくなっていきます。
このような状況に直面し、弊社のメンバーも頭を悩ませてきました。そこで試みた施策を次にご紹介します。
ボーイスカウト・ルールの普及
ボーイスカウト・ルール「来た時よりも美しく」を実践することにより、日々の開発業務でリファクタリングを推進しています。このルールに基づき、コードに触れた箇所では「適切な変数名への変更」など、可能な限り改善を行うよう努めています。
この施策は、全メンバーがより品質の良いコードを書こうとするマインドへのシフトには効果的でした。
しかし、大掛かりなリファクタリングは責務外と見なされることもあり、それにより大規模な改善が進めにくいという問題があります。そのため、根本的な技術的負債の解消には至りませんでした。
Renovate Bot を活用した定期的なバージョンアップ
パッケージのアップデートを検知し、定期的にバージョンアップをするためにRenovate Botを導入しました。
Renovate Botは、パッケージのアップデートが必要になった際に自動でPRを作成し、ランダムでメンバーをレビュワーにアサインします。パッケージのアップデートを見逃しがちであったので、非常に有効な手段でした。
一方で、1週間に一度、業務の合間に対応するというルールを設けておりましたが、業務の忙しさにより、これらのPRが放置されることがしばしばありました。そのため、この施策でも根本的な解決には至りませんでした。
機能開発と技術負債の解消を並行するのは困難
ここまでで既に感じているかもしれませんが、メイン業務と技術負債の解消を同時に進めることは非常に難しいです。特に、タスク間のスイッチングコストが高く、解消活動が十分に進まないと罪悪感を感じてしまうこともあります。そんな状況を打破するために私たちは次の施策を実行しています。
カイゼン活動日はじめました
「カイゼン活動日」と名付けた新たな施策を実践しています。
この施策は非常にシンプルです。毎週金曜日を既存コードのリファクタリング、新しいツールの導入、パッケージのアップデートなど、技術的負債に専念する日として設定しています。具体的には、エンジニアがJiraのエピックに発見した課題をタスクに追加し、実施前に各タスクの優先順位を決定して対応しています。
ちなみに、「改善」ではなく「カイゼン」と名付けたのは、トヨタを参考にしています。漢字の「改善」は「悪い部分を良くする」意味が含まれますが、カタカナの「カイゼン」には「現状に満足せず、常により良くする」という意味を込めています。この施策にピッタリだなと考えてこの名前にしています。
カイゼン活動日の成果
カイゼン活動日の導入以降、以下のような成果が得られています。
技術的負債の解消に集中
メイン業務から一時的に離れることで、チームは技術的負債に集中でき、技術的負債に対するモチベーションが前向きになりました。実際に停滞していた技術的負債が解消されつつあり、顕著な効果が見られています。
潜在的な技術的負債の明確化
今までは「リファクタした方がよさそうだけど後にしよう」といった感じで、後回しにされ、最終的には忘れ去られることが多々ありました。
しかし、カイゼン活動日を設けることでメンバーの意識が変わりました。
「リファクタした方がよさそうなので、カイゼン活動日にやれるようにタスクに追加しておこう」という心境になり、今まで放置されていたことが明確になってきました。
技術的負債の解消に向けた時間の確保
この取り組みを前提に開発スケジュールを計画することで、技術的負債を解消しないという状況が避けられるようになりました。また、POやPdMは技術的負債を気にすることなく、「どのような価値を提供すべきか」に集中できるようになりました。
まとめ
今回は、私たちが技術的負債にどのように取り組んでいるかをご紹介しました。カイゼン活動日は技術的負債の解消に一定の効果をもたらしていますが、次のような課題もまだ存在します。
重い技術的負債はカイゼン活動日でもなかなか進められていない
中長期的な成果の測定をまだ行えていない
これらの課題に対しては、実践しながら改善策を模索し、効果的な解決方法を見出していく予定です。得られた良い結果や新たな学びは、記事でまた共有しようと思います。