見出し画像

システムや開発プロセスは変更せずに開発チームの生産性を上げる5つの方法

こんにちは、すべての開発組織の生産性を上げたいhamです。

開発チームの開発生産性を向上させる場合、システムの技術的負債を解消して開発しやすい状態に改善するなど、システム変更を伴った手法が挙げられることが多いです。
一方で、システム変更を伴った手法は工数がかかったり、システムの振る舞いが変わらないのにシステムに手を入れることへの理解が得られず、実行に移せないことが多々あります。

システムを改善する方法以外では開発プロセスを改善して生産性を上げることもよくあります。
例えば、開発開始からデプロイまでの全行程を開発チーム内で完結できるようにしたり、1つ1つの開発の粒度を小さくしてアジリティを上げるなどがあります。
開発プロセスを改善する手法は様々なところで語られているのでこの記事では触れません。

この記事ではシステムや開発プロセスを変更せずに開発生産性を向上する方法を5つ紹介します。

1. ミーティング時間削減

1つ目はミーティング時間の削減です。

ミーティングが入っていると、ミーティングの時間だけ開発する時間が削られてしまいます。
また、ミーティングは開始時間が決まっているため、開始時間になったらどれだけ集中できている状態だったとしても開発を中断する必要があります。

ミーティングは時間が決まっているため、複数のミーティングが入っている場合に開発できる時間が細切れになってしまうことがあります。
開発に使える時間が2時間だとしても、30分×4回と2時間×1回では全く違います。
前者のように開発できる時間が細切れになってしまった場合、ほとんど開発できずに終わるでしょう。

私の経験上、勤務時間の40%以上がミーティングの場合、開発に集中することが難しくなります。
1日8時間働く場合、約3時間です。

なお、ミーティングはブロックされている時間だけではなく事前・事後に作業が発生するものがあります。
例えば、面接であれば事前に経歴を確認する必要がありますし、事後にフィードバックする必要があります。
このような準備時間もミーティングの一部として計算に含めましょう。

私のとある1週間のプルリク作成数とミーティング時間を比較してみます。

2月12日〜16日

2/12〜16のプルリクエスト作成数です。(2/12(月)は祝日)
13日は0件で、残りの日は1件ずつで合計3件です。

2/13〜16 プルリク作成数

この週のミーティング時間は下記の通りで、毎日4時間くらいミーティングが入っていました。

2/13〜16 ミーティング時間

詳細は省きますが、この週は連続して2時間以上作業できる時間が2回しかありませんでした…それ以外はミーティングとミーティングの間隔が2時間未満です。
これでは集中して開発に取り組むことは困難でプルリクエスト作成数にも顕著に現れています。

1月15日〜19日

1/15〜19のプルリクエスト作成数です。
15日は1件ですが、残りの日は5件以上作成しておりかなり開発に集中できていたことがわかります。

1/15〜19 プルリク作成数

この週のミーティング時間は下記の通りで、ほとんどの日はミーティング時間が3時間未満です。
木曜日は4.5時間と長く見えますが、夜に職場の懇親会があり、その時間も含まれているため、日中のミーティング時間は2時間未満でした。

1/15〜19 ミーティング時間

この週は連続して2時間以上作業できる時間が8回ほどありました。
開発に集中できていたことはプルリクエスト作成数にも顕著に現れています。

このようにミーティング時間はダイレクトに開発生産性に響くので、ミーティング時間(事前準備を含む)を確認して、全体の40%未満を目安に削減すると良いでしょう。

2. 育成

2つ目は開発者の育成です。

開発生産性が低下する要因の1つとして、開発者のスキル不足があります。
スキル不足により実装方法を考えるまでに時間がかかってしまい開発着手が遅れたり、見落としや考慮漏れなどにより手戻りが発生することがあります。

開発者がスキルアップすることで、これらを回避できる可能性が高くなり、開発生産性の向上が期待できます。

開発者を育成する方法はいくつかあります。

  • シニアな開発者とのペアプロやモブプロを通して悩む時間を削減したり、開発手法を伝授する

  • 輪読会や勉強会を開催して知識を底上げする

  • 学習サービスを利用する

輪読会などの勉強会を業務時間内に開催することについては様々な意見があると思いますが、開発生産性の向上が望める内容であれば、たとえ業務時間の一部を勉強会に使ったとしても、その後の生産性が向上することで長い目で見るとお釣りがくると思います。
そのため、節度を保ちつつ積極的に開催していくと良いと考えています。

3. トイル削減

3つ目はトイルの削減です。

プロダクトを開発している場合、利用者や事業メンバーから問い合わせがきたり、本番システムのアラートがきて確認したり、デプロイなどの作業が発生します。
日々繰り返して対応していると、当たり前に発生する工数になってしまい、意識せずに時間が取られてしまい、開発に使える時間が減少して生産性が低下します

トイルを削減するには、1つ1つの原因を分析して、地道に解消していくしかありません。
問い合わせであれば、よくある質問リストを作ったり、ヘルプページを拡充するなど問い合わせが発生する前に解決できる仕組みを作ったり、問い合わせフォームを整えることで問い合わせ自体の数を減らしたり、問い合わせ対応にかかる時間を減らせるかもしれません。
アラート対応はログなど調査に必要な情報を拡充したり、必要な情報へのアクセスを容易にすることで調査時間が短縮できるかもしれません。
デプロイなど日々実施する作業は自動化することで、1回の削減は少なくてもトータルで考えると大幅に工数削減できるかもしれません。

1日30分のトイルが削減できると、月では30 * 20日 = 600分 = 10時間なので結構削減できます。
逆に1日数分の作業だとしても繰り返しのタスクはトータルで工数を圧迫します。繰り返しタスクを追加するときは注意しましょう。

トイルは当たり前にかかる工数になってしまい開発工数を圧迫していることに気づきづらいです。
まずはトイルにより消費している工数の可視化から始め、原因を分析して1つずつ潰していきましょう。

4. 開発ツール強化

4つ目は開発ツールの強化です。

エディターなどのソフトウェア、PCやモニターなどのハードウェアなどの開発時に使うものを強化したり、CI/CDなどのツール類に投資することで大幅に生産性を上げることができます。

JetBrainsなど高機能なエディターを使うことでコード補完などの恩恵を受けたり、GitHub CopilotChat GPTなどAIアシスタントを活用することで生産性を向上させることができます。

初期費用はかかりますが、高性能なPCを使うことで処理速度が向上し、ローカルでのテストやビルド時間など短縮でき生産性の向上が期待できます。

CI/CDは実行環境のスペックを上げることで実行時間を短縮したり、有償のサービスと連携することで生産性や品質を向上させることができます。

開発ツールを強化するためには追加で費用がかかりますが、開発生産性が向上して生産量が増えることで、トータルで考えるとコスト削減につながる可能性があります。

開発ツールを強化する際は費用対効果を正しく評価して、必要な投資をしましょう。

5. 採用

5つ目は採用です。

開発者を増やすことで、手数が増えるのでチームの開発生産性を上げることができます。

ただし、開発者の人数が増えたら、増加した分だけ生産量も増加するわけではないことに注意が必要です。
ジョインしてから活躍できるようになるまで、既存メンバーがメンターとしてオンボーディングする必要があるので、既存メンバーの生産量が一時的に低下します。
また、オンボーディングプロセスが整っていない場合、①メンターの負担が増える②新規メンバーの立ち上がりが遅れるという2つの理由で生産性が低下するので、オンボーディングプロセスの整備は必須です。
活躍できるまで3ヶ月かかっていたところをオンボーディングプロセスを整備することで2ヶ月に短縮できるとしたら、メンターの工数も削減され、新規メンバーも1ヶ月早く活躍できるため2倍お得です。

また、1つのシステムを大人数で触るとコンフリクトが増加したり、メンバー間で調整が必要になり生産性が低下します。
人数の増加に合わせてチーム分割でコミュニケーションパスを減らしたり、システム分割でコンフリクトのリスクを減らすなどの対策が必要です。

採用により人数を増やすことでチーム全体の生産性の向上が期待できますが、オンボーディングプロセスを整備したり、開発環境を整備しておかないと1人あたりの生産性は低下する可能性があるので、全体の生産性だけではなく、1人あたりの生産性にも注目して計画的に実施しましょう。

まとめ

この記事で紹介した通り、システムや開発プロセスを変更せずに開発生産性を上げる方法もあります。
みなさんの組織の開発生産性を上げるヒントになれば幸いです。



この記事が気に入ったらサポートをしてみませんか?