ISO22000の外部監査指摘を受けた、約1,000人が利用する工場インシデント管理システムの内製リプレイスプロジェクト。
PM兼リードエンジニアとして、開発メンバー2名(インフラ1名、DB移行担当1名)の進行管理と、依頼部門である品質保証部門との要件調整を担当しました。
監査指摘の期限内にリプレイスを完了させ、指摘事項をすべて解消することが最優先の責務でした。ただし、既存の外注システムが業務実態と乖離していたことが指摘の原因だったため、単に納期内に作るだけでは同じ問題が再発します。そのため「期限内に完了させること」と「現場が実際に使える状態にすること」の両方を満たす責務を負っていました。
加えて、当時の部門はローカルでファイルを複製してバージョン管理する状態で、共同開発の基盤がありませんでした。このプロジェクト単体を終わらせるだけでなく、部門として内製開発を継続できる状態を作ることも自分の責務と捉えていました。
## 納期と実用性を両立させるための方針決定
期限が監査によって明確に切られている一方、既存システムが業務実態と乖離していたことが指摘の原因でした。仕様を固めきってから作る従来の進め方では、要件定義に時間を取られて納期を圧迫するうえ、出来上がったものが再び現場と乖離するリスクがあると考えました。
そこで、最小機能でまずリリースし、実際に使ってもらいながら改善する方針を採用しました。実際の利用と開発を並走させることで、乖離が生まれる前に修正できる状態を作ることを狙いました。結果として、6ヶ月の予定を4〜5ヶ月で完遂し、監査指摘もすべて解消できました。
## 要件が発散する問題への対応
依頼元は品質保証部門で、要望を数多く挙げてくる一方、優先順位や実装工数についての共有がない状態でした。すべてを受けると納期に間に合わず、逆に断り続けると信頼関係が損なわれ、必要な要件も引き出せなくなると考えました。
そのため、まず要望を否定せずに受け止めて内容を理解することを優先し、そのうえで優先順位と工数感をこちらから提示する進め方を取りました。仕様については都度コミュニケーションを取り、判断の背景を共有しながら合意していく形にしました。信頼関係を作りながら整理することで、要望の取捨選択について納得を得られる状態を作れたと考えています。
## メンバーの強みに合わせたアサイン
チームメンバーはアプリケーション開発の経験に差がありました。全員に一律で実装を割り振ると、不得手な領域で詰まって全体の進行が滞ると考えました。
そこで、アプリ開発は不得手であるものの、DB操作に精通しているメンバーがいたため、旧DBから新DBへのデータ移行を担当してもらう配置を提案しました。得意領域に割り当てることで、そのメンバーが最も価値を出せる形にしつつ、自分はアプリケーション側の設計と実装に集中できる体制にしました。
## 部門としての開発基盤の整備
当時、部門ではローカル上でファイルを複製してバージョンを分ける運用が行われており、変更履歴が追えず、複数人での並行開発ができない状態でした。このまま内製開発を進めても、プロジェクトが増えるほど破綻すると考えました。
そこでGit環境を部門に新規導入し、バージョン管理と共同開発の基盤を整備しました。目の前のプロジェクトを終わらせるだけでなく、部門として内製化を継続できる状態を作ることを意図した判断です。
## 情報のない技術への対応
採用されていたフレームワークは普及率が低く、Web上の情報も書籍もほとんど存在しませんでした。当時はAIによる補助も実用に足るものがなく、調べても解決せず一日進まないこともありました。
公式ドキュメントの精読と、フレームワーク内部のクラス実装を直接読み込むことで挙動を把握し、仮説を立てて検証するサイクルを回して習得しました。PMとして進行を管理する立場でありながら、技術的な不確実性が最大のリスクだったため、ここは自分が引き受けるべき領域だと判断しました。
## 結果
6ヶ月の予定を4〜5ヶ月で完遂し、ISO22000外部監査の指摘事項をすべて解消しました。利用者からも感謝のフィードバックを得ています。また、0→1で要件定義から開発・運用までを主導した経験を社内LTで共有し、部門の内製化推進につなげました。