最恐の技術的負債に挑むリニューアルプロジェクト

はじめに

価格.com開発本部ショッピングメディア開発部の佐々木健@kaisou4537)です。
価格.comは20年以上にわたって稼働しているサービスです。
そんな長い間稼働し続けていることもあり、技術的負債もたくさん抱えているため、
簡単には移行できず、結果として20年以上前に作られたプログラムも現役で使用されています。

私たちのチームではそのなかでも特に重要な製品詳細ページをリニューアルする業務を進めていきました。
今回はどのように取り組んだか、その一部始終を簡単にご紹介したいと思います。

技術的負債のある日常

価格.comを改めて紹介すると、家電やカメラなど膨大な製品の販売価格を比較できるサービスで、
稼働実績は20年を超えています。

開発の多くが既存のコンテンツの部分的な修正となることが多いのですが、
その際に新しい仕様書は作成されるものの、機能全体を網羅した頼れる仕様書がない現状です。
まさしく秘伝のタレの継ぎ足し状態です。

日常の光景としては以下のようなことがよく発生しています。

  • たぶん必要がないコードに見えても、消すのが怖いので念のため残す
  • 1行追加するだけの改修にも、コードが巨大で複雑なせいで影響調査やテストに10人日かかる
  • ある機能を追加したら、まったく想定外の別の機能が壊れる 等

皆さんの購買活動を支援する価格.comですが、その内部は日々の開発によって巨大かつ複雑に・・・
様々な機能が入り乱れるスパゲッティ状態で、まさに手に負えない状況になっておりました。

実は過去にある機能のリプレイスを試みましたが、課題管理・情報共有が甘く
勢いに任せた進め方をしてしまい失敗した経緯もあります。
半年間挑戦しても目途が立たず諸々の理由で中断、その後も機能は追加されさらに複雑化していく・・・
手を入れようとするだけで怖いシステムで技術的負債の塊ともいえる代物で
まさしく最恐のシステムとなっていました。

プロジェクトの結成

そんな状況から脱却すべく、リニューアルを進めるプロジェクトが発足しました。
きっかけは比較的大き目の機能のリニューアルを進めたいという話が舞い込ん来たことにあります。
過去のリプレイス時には課題管理・情報共有が甘く勢いに任せた進め方をしてしまった反省を活かし、
課題を整理し関係者に共有しながら、組織的に進めて行きました。

大ボリュームな規模で一見絶望的な状況ではあったものの、
この機能の改修は技術的負債を解消する上で必ず通る道。
逆に言えば、うまく行けば道が拓けるチャンスになり得ると前向きに捉えてチャレンジしてきました。

その準備として、まずはプロジェクト化しました。
システム部だけでなく企画部や営業部など他部署から責任者を集めて、
専任体制で臨む体制作りを行ないました。

また、プロジェクト結成の際に2つの目標を掲げました。

過去リニューアルに失敗した経験がありましたが、捲土重来の精神で再び立ち上がりました。
この目標を達成するための準備として、仕様の表記揺れをなくす用語集を作成したり、
仕様書の体系や書き方を企画部と相談しながら決めて取り組みを進めていきました。

降りかかる最恐

最恐で複雑難解なコンテンツリニューアル

準備万端で臨んだプロジェクトですが、やはり最恐の名は伊達ではなくスムーズには進みませんでした。

今の製品詳細ページの仕様について過去の経緯を知る人がいないため、
リニューアルの仕様を検討することが難しい状況になっていました。
仕様を調べるためにソースコードを解析しましたが、その作業には半年かかりました。
満を持して仕様書の作成を進めたものの、不要な機能が目立ち、その整理も難航しました。
これらの作業により初期段階に立てたスケジュールから遅延が発生し、広がる一方でした。

他にも細かい課題が山積みとなりなかなか進みません。
当時は本当に終わらせることができるのかと日々思いながら過ごしていたのを今でも思い出します。

それでも当初の目的を忘れず着実に進めてまいりました。

課題が次々と発生しましたが、すべてを課題管理し、1つずつ解決していきました。
時には他部署の運用チームからも資料を入手し、仕様の妥当性を確認しながら定義を進めていきました。
また、安易な選択をしてしまうと今後「何故このような仕様になっているか?」となりますので
出元の妥当性を確認しながら、仕様定義を進めていきました。
スケジュールは遅延していましたが、根拠を持って仕様定義するよう整理を進めました。

前途多難だがベストを尽くして推進していく

仕様書作成を手を抜かず進めた結果生じた遅延を解消するために、
プロジェクトとして施策を打ち続けました。
当初予定していた稼働が取れなかったのでシステム部内に人員増加のヘルプを要請したり、
リソース投入以外にも作業計画を見直して簡略化・省略しても問題ない箇所を整理したりするなど
作業工数軽減策を企画部に講じながら進めました。

本来システムの領分だったテスト実施のフェーズ等で他部署の方の協力を得ながら進めて行きました。
目標を共有しながら進めたこともあり、
多少の無茶な協力にも快諾・協力いただきながら完遂に向けて動いていきました。

そして、その時はついにやってきます・・・!

リリースしました

リニューアルした製品詳細ページがリリースされました!!!

リニューアルされた製品詳細ページはサイズやカラーの違い、スペック違いのバリエーションや
旧モデルなどが一目でわかり、簡単に製品ページを切り替えて比較・検討ができるようになりました。
滞在時間や回遊率の向上にもつながり、良い結果を生んでくれました。

また、今までのように仕様が分からず対応に時間がかかっていた点についても
誰もが分かる仕様書作成を目指した結果、仕様に明るい開発現場になり、
今までにないスピードで機能追加/改善施策を実施できるようになりました。

終わりに

リリースは無事完了し、開発現場も明るくなっておりますが、
今回解消した技術的負債はまだ一部にすぎません。
これからも技術的負債解消に向けて突き進んでいく所存でおります。

技術的負債はシステムのみに起因するわけではありません。
もちろんシステムの問題も存在しますが、表面化するまでにさまざまな過程があります。
誰かが悪いという話ではなく、組織として対応していかなければならない問題であると考えています。

当然ですが、リニューアルして終わりでもありません。
この状態を維持して今までと同じ失敗を繰り返さないようにしていく必要があります。

今回のリニューアル対応を総括しまして、
「各部門と協力しながら技術的負債を "コントロール可能な状態" にすることが大切」
このメッセージをブログをご覧の皆さまにお伝えしたいと思います。

先述の通り、今回解消した技術的負債はまだ一部です。
私たちの戦いはむしろこれから始まります!頑張っていきたいと思います。

カカクコムでは、ともにサービスをつくる仲間を募集しています!

カカクコムのエンジニアリングにご興味のある方、
一緒にリニューアルを進めていきたい方は、ぜひこちらをご覧ください!

カカクコム採用サイト