保守開発チームの効果的な目標設定と実績管理法

この記事は「ウィルゲート Advent Calendar 2024」の 5 日目の記事です。 adventar.org

こんにちは。ウィルゲート開発室PMO(プロジェクトマネジメントオフィス)を担当している大嶋です。 今回はウィルゲート開発部門で、主に保守フェーズのシステムを担当しているチームの目標設定や実績管理についてお話しします。

はじめに ~ 保守開発チームの目標設定の重要性 ~

新規のシステム構築、グロースハック、新規技術の導入といったチャレンジングな取り組みは、花形のプロジェクトに位置づけられがちで、キャリア形成するためにも携わりたいというエンジニアが多く、取り上げられる機会も比較的多いのではないかと思います。 一方でプロダクトやサービスとして投資し成長させていく時期を過ぎ、安定的に運用し投資回収していく時期も少なからずやってきます。 こういったフェーズはエンジニアにとっては新規構築とは異なる開発経験をする機会であり、目的意識を持って取り組んでほしいと考えています。

ウィルゲートの評価制度

MBOによる評価

ウィルゲートの評価制度は半期ごとにMBOによる目標設定と実績評価で行っています。 目標設定の内訳としては、大きく

  • 業績評価(短期目標)
  • 能力評価(中長期目標)

に分けて構成されています。 目標は将来に向けたキャリアビジョンなどを踏まえて、上長と相談しながら設定していきます。

目標設定が保守開発チームに与える影響

システムの運用保守業務はプロジェクトのように目標を明確にした取り組みと比較するとややもすると変わり映えせず、退屈なものとなりがちです。 しかし既に事業として成立しているプロダクトを安定的に運用することはないがしろにはできません。

こうした状況において、エンジニア個々の目の前のミッション(短期目標)とキャリアビジョン(中長期目標)を連動させることが重要です。エンジニアにとって業務を通じて成長につながるような納得感のある目標設定とすることは、安定したシステム運用の実現のためにも重要になると考えています。またそうすることで会社やビジネスと個々のエンジニアがともに成長できる状態にしたいと考えています。

保守開発における目標設定の位置づけ

ビジネス目的と開発業務の整理

プロダクトを通じたビジネスの最終的な目的は、継続的に利益を出すことにあると言えるでしょう。これを要素に分解すると、以下のように売上増加とコスト削減構成になると考えます。

ビジネス目的の分解

各種活動の分類

これを踏まえて、ビジネスに直結する開発現場のエンジニアの活動レベルまで掘り下げ、次のように整理しました。

各種活動の分類整理

※実際の現場ではこれ以外に、より間接的な活動としての環境改善などDevOps*1の範疇の動きや、各種活動をコントロールするマネジメントの動きもあります

保守開発チームのための目標設定のステップ

理想状態の定義

次に実態の状況と、理想状態について考えてみました。

システムの運用保守の理想状態としては、

  • 維持保守として定常的あるいは突発的に発生する業務は極小化されており、発生したものは速やかに対処されている
  • 保守開発は整った開発環境やテストコード、レビュー運用、CI/CDなどのもと効率的に行われている
  • 運用保守に充てる工数(エンジニア稼働コスト)は一定範囲内に収まり安定的に運営されている

といったイメージかと思います。

この理想状態に向かっていくための要素をKPIとして設定することにしました。

現状分析と課題の特定

主に開発の生産性と品質の維持という観点で、以下を対象に過去1年の実績を分析しました。

  • 運用保守に投下した工数(人月)
  • コミットした案件のストーリーポイント*2の合計(≒ベロシティ)
  • 人月あたりのストーリーポイント(Point/工数)

これまでは案件ごとのストーリーポイントについてはこれまで設定していませんでした。そのため、過去対応した案件について後付けで当時のメンバー達とプランニングポーカーを行って設定しました。

生産性指標の過去実績

この結果、直近の半年について投下工数は計画通り減っている一方で、生産性(人月あたりのストーリーポイント)もやや下落傾向にあることがわかりました。 今後の課題として、投下工数を増やすことなく生産性を高めていくことに注力する方針としました。

成果指標(KPI)の設定

人月あたりのストーリーポイント

過去実績の分析結果から出てきた直近半期の人月あたりのストーリーポイントの実績である4.8ポイントを基準として、これを5ポイント、6ポイントと段階的に向上させることを生産性指標の目標としました。

本来ストーリーポイントやスプリント期間で完了した合計数であるベロシティは評価には使用するべきではないとされています。 ここであえてこの指標を設定したのは以下の運用を前提としたことにあります。

  • 個人の評価ではなく、プロダクトごとや複数プロダクトを含めたチーム全体に適用する
  • 本質的には工数見積ではなく、創出価値の見積もりとしたいが、現段階ではエンジニア内で運用できる指標にする
  • ポイントの設定は現場メンバーだけでなく評価するマネージャーも入り、一貫性を担保する

また、単純に「開発要件を実現するための工数見積」という軸だけではなく「開発要件で創出できる価値を鑑みて最大でもこの工数までに抑えるべき」といった観点を加えてポイントを設定する(結果、現実的な見積工数に収まらない場合は要求を見送る判断もする)ようにしました。

この目標設定をするにあたり、以下記事を参考にさせていただきました。

note.com

優先順位をつけた目標設定

基本的には特に生産性の指標となる人月あたりのストーリーポイントを優先度高く設定しました。これに加えて以下の指標を補助的な位置づけとして設定しました。

変更失敗率

リリース後に障害や何らかのインシデント対応によってホットフィックスによる修正が必要になったもの。生産性を上げるために急ぎすぎて品質を落とさないことを担保するための指標。 これは扱うシステムの特性によって変わるという前提の上で、過去の実績をもとに15%以下を目標としました。

維持保守対応率

突発的に発生する維持保守作業については発生から一定期間内に対応できた比率を設定しました。 具体的には、

  • 優先度・緊急度の高いものは、半日以内に何らかの対応を取る
  • そうでないものは1営業日以内に対応する

といった形にしました。

期間内に完全にインシデントを解消するという基準ではなく、発生を早期に検知しアクションを取ることを主眼に置いています。根が深い問題は課題として切り分けて暫定措置を取る、一定期日までに対応することが求められているものであればタスクとして積みその旨を回答する、などです。

業務が属人化してしまうと、担当者が休暇で不在の際などに放置されてしまうので、なるべくチーム内で冗長体制化して滞りなく対応できるような形を理想形としています。

チームのモチベーションを維持する目標管理のポイント

定期的なプランニングポーカーの実施

チームの開発サイクルは概ね2週間単位で計画し振り返りをしているため、これに合わせて新規に発生した開発案件のプランニングポーカーを行うようにしていました。プロダクトごとに主担当となるメンバーはほぼ決まっていますが、このタイミングで開発要件や想定している対応内容などを共有することで情報共有のいい機会になりました。プランニングポーカーは以下のサイトを使用しオンラインで行っています。

Hatjitsu :: Online Scrum Planning Poker for Agile Projects

成果の可視化と達成感の提供

目標と実績については数値化するとともに、この先の計画を入力することで着地見込のシミュレーションができるようにしました。

生産性推移の数値化

保守開発生産性の推移グラフ

これによって、この先どのくらいのペースで開発にコミットすればいいのか、どの開発を優先しそのためにはどういった役割分担にすればいいのか、 といったことを現場が主体となって考えて動くようになり、自分たちで決めて達成していくといったサイクルが構築できました。

まとめ

半期運用してみての実績

実際に運用した結果としては、以前と比較して遥かに客観的な指標で評価が行えるようになりました。 日頃から経過状況も見れるようになり、現場でも定期的にモニタリングする習慣が根付いたことから、評価時期になって「蓋を開けてみた結果どうだった」ということはほぼなくなりました。

また指標値の実績としては、

と以前の1.2倍の生産性になり、特に期末にかけては高い目標達成に向けて目的意識を高く持ったチーム主体の動きが見られました。

今後に向けた課題と改善事項

今回導入した制度については「短期的な業績評価」の位置づけとして、直接的に売上や利益への貢献度を計測しづらいエンジニアの成果を測るためのものであり、こういった目の前の数字を改善することで意識高く動くメンバーがいる一方で、短期的な評価や効率的な指標の改善にとらわれずに、エンジニアとしてより良い設計や技術的な取り組みを追求したいというスタンスも見られました。 今後はこういった多様性にも目を向けながら、運用の改善をしていければと考えています。

「ウィルゲート Advent Calendar 2024(https://adventar.org/calendars/10272)」、翌日は岩田さんによる「PHP未経験から始めるペアプロ」です。 お楽しみに!

*1:DevOpsとは、開発と運用が連携・協力して効率化を図る手法のこと

*2:ストーリーポイントなどアジャイル開発に関しては書籍『アジャイルな見積りと計画づくり ー価値あるソフトウェアを育てる概念と技法』を参照ください