【プロジェクト概要】
建設業向けサプライチェーンマネジメントERPパッケージの開発。取引先管理/与信管理モジュールを担当。
【担当フェーズ】
要件定義、設計、開発、テスト、運用保守、進捗管理
【業務内容】
・内製フレームワークからAngularへの機能置き換え
・顧客要件の新規機能設計開発
ex.) 工事受注実績の集計・出力機能の設計開発
・顧客利用機能の不具合修正
ex.) 承認時編集機能が利用できない不具合の改修
・顧客トラブル対応
ex.) バリデーションをすり抜けて申請できてしまうトラブルの原因特定/不具合解消/データリカバリー
・チームマネジメント
ex.) スクラム運用、設計相談、コードレビュー
などなど
【実績・取り組み】
■コード品質向上による開発速度の向上
発足から5年以上経過したERPパッケージ開発プロジェクトのため、数多くのレガシーコードや技術的負債を抱えており、近年どの部署でも開発速度が落ちていることが問題視されていました。そこで自身の開発ではアジャイル開発手法やドメイン駆動設計といったコードの質を向上させる施策を導入しました。機能開発や不具合改修をしながら周辺コードのリファクタを実施し、メンテナンス性を向上させることを意識して開発業務取り組んできました。結果として、コードの質の向上に伴って自身の開発速度も向上させることに繋がりました。チーム最若手でありながら着任から現在までの19ヶ月で84件の機能開発/不具合修正を達成しており、これは同期間の実績としてチームメンバー8人中2番目の多さです。
■工事受注実績の集計・出力機能の設計開発
「工事受注実績の集計・出力機能の設計開発」の開発案件では3人1チームとなり、APIコールさせるたびに実行されていた集計・出力のロジックを、日次での集計バッチ処理と都度の出力処理に分離する、という開発を行いました。他チームのヘルプであったため業務背景が何も分からない中、納期2週間でテーブル設計・SQL/Javaロジックの分離・新旧差分テストを行わなければいけないという非常にタイトかつ求められる技術領域の広い案件でしたが、チームで協力し期日内に納品することができました。その中でも最も困難だったのはJavaロジックの分離でした。既存のJavaロジックでは集計と出力のための変換処理が各クラスにごちゃ混ぜになっており、本案件の業務背景に詳しくない自分が触るのは非常に危険な状態でした。そこで、既存の処理は残しつつ集計用のインターフェースを別途作成し、集計に必要な情報のみピックアップすることで、ロジックの分離を実現することができました。これは以前独自に勉強していたドメイン駆動設計の「腐敗防止層」という考えから着想を得ています。日常的にキャッチアップしていた技術的な知識を実務に活かすことができた好例だと思います。
■チームマネジメント
自身の所属している開発チーム(メンバー5~8名程度)では参画当初、チームとしての連携が全くできておらず、特定の人に業務負荷が集中してしまったり、顧客提供価値の低い(≒優先度の低い)機能開発を勝手に行なっているメンバーがいたりと、チーム全体としての生産性が非効率的な状態でした。いわばマネジメントのない個人事業主の集まり、のような状態だったと思います。そのような状況に危機感を感じた私は「スクラム」の手法をチームに導入しました。以前からスクラムの存在は技術ブログ等を通して知っており、この状況を改善するのに適していると考えたからです。当初は導入に反発するメンバーもいましたが、既存のやり方を少しずつ変えメンバーの負担にならないよう工夫することで、チーム全体に浸透させることができました。その結果、「チーム全体として優先度の高い課題から順に解決していく」という意識が生まれ、メンバーの協業(ペアプロやタスクの交換など)や顧客提供価値向上についての議論(プロダクトバックログの整理・検討)が活発になりました。またこれらの活動により、チーム全体での開発件数が前年比39%増加しました。