技術的負債にはメリットもあるという話

こんにちは! KEPPLE CREATORS LAB の Continuous Tech Improvement Team でエンジニアをやっている芹田です。

先月、2024年2月29日に、株式会社ビットキー様主催の フロントエンドリプレイスにおける苦悩と工夫 〜React/Next.js編〜 というイベントに登壇させていただき、「KEPPLE DB フロントエンドリプレースにおける技術的負債のバランス感覚」というタイトルで発表させていただきました。登壇でいただいた反応も踏まえつつ、改めて技術的負債について軽めに語っていきたいと思います。

なお、当日のスライドはこちらになります。

https://speakerdeck.com/yuichiro_serita/kepple-db-ripuresuniokeruji-shu-de-fu-zhai-nobaransugan-jue

技術的負債とは何であったか

技術的負債とは以下のようなものだと考えています。

  • 短期的に見ると便利だったが、時間が経つにつれ脚を引っ張るようになったもの

  • あらゆるコードは必ず負債になる

  • 負債になりづらいコードはあるが負債にならないコードはない

  • 負債になりづらさを追求すると開発速度が落ちる

技術的負債に対して「その場しのぎ」だとか「良いコード・設計を選択しなかった結果」のようなネガティブな印象を抱いている方も多いのではないかと思いますが、そうではなく、あらゆるコードは必ず負債になりますし、負債を負うメリットもあります。

技術的負債のバランス感覚とは

負債になりづらさを追求すると開発速度は落ちます。無借金経営よりも適宜資金調達しつつ経営する方が事業を大きくしやすいのと同様、うまく技術的負債を使いつつ (借金しつつ) 開発していくことが大事だと考えています。
特に、我々はスタートアップの一員として Web サービスを開発していますから、開発速度を上げて早く価値提供することが重要です。

一方で、負債を抱えすぎると開発効率も品質も著しく落ちてしまいます。技術的負債を使いつつ、負債が大きくなりすぎないように適宜返済しながら開発を進めていく必要があるわけです。このバランスのことを、当セッションでは「バランス感覚」と呼びました。

どこで技術的負債を使うか

どこで技術的負債を使うべきか? は、プロダクトの性質や使えるリソースによって変わります。

例を挙げましょう。登壇において、「やはり UI ライブラリを使うとリプレースで足枷になりますよね」という反応をいただきました。まったくおっしゃる通り! UI ライブラリは負債になりやすいです。仮に、我々の組織のデザイナーとエンジニアのリソースが潤沢で、独自のデザインシステムが必要だという判断があれば、UI ライブラリを使わない選択もあったでしょう。しかし、そうではなかったので、KEPPLE DB では、UI ライブラリを使うことでデザインの工数コンポーネントの実装の工数を削減し、開発速度を上げるという選択をしました。

当セッションでは、ディレクトリ構成、データフェッチ、ドメインロジックなどの例を挙げながら、どこで技術的負債を使うべきか、ひとつひとつ丁寧に判断しよう、という話をさせていただきました。

技術的負債とコミュニケーション

技術的負債は、エンジニアリングの観点だけでなく、コミュニケーションにも関係しています。

当セッションでは、あまり性質がよくない負債の例として、UI ライブラリのコンポーネントを過剰にカスタマイズすることを挙げさせていただきました。実現したい UI/UX への解像度が低いと、過剰なカスタマイズをせざるを得なくなりがちです。ビジネスサイド、デザイナーを巻き込み、密に連携し、より早くフィードバックをもらってより早く修正していくことで、不必要な負債の発生を防ぐことができます。

また、負債の返済が不可欠であるという認識を共有することも重要です。スケジュールに負債の返済を織り込んでおきます。幸い、今回のリニューアルでリリース頻度が爆増したので、この認識はより強くなったと感じています。

技術的負債の返済

我々は、継続的に技術的負債の返済に取り組んでいます。かつて膨らみつつあった技術的負債を一気に返済するために、通常の機能追加の開発のペースを落としてでも完遂するという強い意思で取り組み、昨年2023年12月に KEPPLE DB はリニューアルしました。リニューアル後の2024年現在、KEPPLE DB チームでは毎週金曜日をカイゼン活動日と呼び、負債の返済日としています。

カイゼン活動日については今後記事化される予定なので、お楽しみに!

おわりに

イベントに登壇させていただいた際の内容をベースに、技術的負債をうまく使いつつ開発していこう、というお話をダイジェストでさせていただきました。もともと20分で話した内容なので、分かりづらい箇所があったら申し訳ございません。参考になれば幸いです!