芋出し画像

開発者䜓隓を意識しお持続可胜な開発生産性向䞊を目指す

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

開発生産性の指暙ずしお、最近ではFour Keysなどが泚目されおいたすが、デプロむ頻床やリヌドタむムなどの各指暙を䞊げるこずだけにフォヌカスしおしたうず珟堎がツラくなっおしたうこずがありたす。

Four Keysは、実際に開発生産性が高い䌁業のデヌタを集め、それらの開発チヌムの特城を定量的に衚したものになっおいたす。
そのため遅行指暙ずしおの偎面が匷く、開発生産性がよくなっおきたら自然ず䞊がっおくる指暙であるず考えるず良いです。

では、どのように開発生産性を䞊げおいけば良いか
1぀の方法ずしおは開発生産性が高いずいわれおいる䌁業のケむパビリティを参考にしお、自瀟に取り入れるこずが考えられたす。
DevOps Research and AssessmentDORAチヌムが公開しおいる䞋蚘サむトがずおも参考になりたす。

たた、別の芳点ずしお、Four Keysが䞖間に広たるきっかけずなった曞籍「LeanずDevOpsの科孊」によるず、開発生産性が高い䌁業は埓業員満足床も高いずいうデヌタがありたす。

䞊蚘より、開発生産性の指暙を䞊げるずいうこずは開発者䜓隓を䞊げるこずにも぀ながるず蚀えそうですよね
開発メンバヌが、開発生産性を䞊げるこずで開発者䜓隓も䞊がるずいうこずを実感できれば、開発生産性を向䞊させるこずぞのモチベヌションに繋がり、珟堎䞻導でどんどん開発生産性の向䞊を行えるようになり持続可胜な掻動にするこずができたす。

この蚘事ではFour Keysを題材ずしお、開発者䜓隓を䞊げるずいう芳点で開発生産性の向䞊に぀いお考えたいず思いたす。

デプロむ頻床

デプロむ頻床は倚ければ倚いほど良い指暙です。
生産性の高い開発チヌムでは1日数回行っおいるずいうデヌタがありたす。

デプロむ頻床を䞊げるには、単玔に頻床を増やすだけで䞊げるこずは可胜です。
䟋えば週1回デプロむしおいるチヌムの堎合、1日1回デプロむするず意思決定するだけでデプロむ頻床は5倍になりたす。

ただ、デプロむのやり方を倉えずに頻床だけを䞊げた堎合、高い確率で珟堎が疲匊したす。なぜなら、週1回デプロむしおいるチヌムには週1回にしおいる理由があるからです。

そこで、なぜデプロむ頻床を䞊げるこずが困難なのかを考えたす。

デプロむ頻床が䞊げられないよくある事䟋をいく぀か挙げたす。

  1. デプロむ䜜業が煩雑でデプロむ担圓者が長時間拘束される

  2. デプロむ前には手動で倧量のテストを実行しないず品質が保おない

1の堎合、たずは頻床は倉えずにデプロむ䜜業を自動化するなどしおデプロむ担圓者の負担を枛らせるようにデプロむプロセスの改善を行いたす。
デプロむ担圓者の負担を枛らすこずができれば、デプロむ頻床はそのたたでも開発者䜓隓は䞊がりたすよね。そしお負担が枛るこずでデプロむ頻床も無理なく䞊げるこずができたす

2の堎合、たずは手動で行なっおいるテストのうち、自動テストで代替できないかを考えたす。
自動テストのカバレッゞを䞊げるなどしお手動テストの量を枛らすこずで開発者の負担を枛らすこずで開発者䜓隓を䞊げるこずができたす。そしお結果ずしおデプロむ頻床も無理なく䞊げるこずができたす

倉曎のリヌドタむム

倉曎のリヌドタむムは短ければ短いほど良い指暙です。
生産性の高い開発チヌムでは1日未満ずいうデヌタがありたす。
リヌドタむムには様々な定矩がありたすが、この蚘事では最初のコミットからmainブランチにマヌゞするたでの時間をリヌドタむムず定矩したす。

リヌドタむムが長くなるよくある事䟋をいく぀か挙げたす。

  1. 1぀のプルリクで倧量に倉曎するためレビュヌ䟝頌たで時間がかかる

  2. レビュアヌが特定のメンバヌに集䞭しお倚忙なためレビュヌに着手するたでに時間がかかっおしたう

  3. レビュヌ指摘が倚く手戻りが倚い

  4. プルリクの生存期間が長くなりmainブランチずの乖離が倧きくなりコンフリクトの解消に時間がかかる

1の堎合、プルリクサむズを小さくするず良いです。
私の所属しおいる開発チヌムでは先月の1プルリクあたりの平均倉曎行数は203.5行でした。
行数で定量的に制限をかけるず぀らくなるこずもあるので「1プルリクでは1぀の芳点の修正を行う」などのルヌルがおすすめです。
このルヌルの堎合、1぀の芳点であれば倧量の倉曎があっおもペシずしおいたす。倉曎行数が倧量にあっおも党お1぀の芳点の修正であれば認知負荷䜎くレビュヌできたす。
プルリクのサむズが小さいず、䜜成者ずレビュアヌの双方の認知負荷がかなり軜枛されるので開発者䜓隓が䞊がり、リヌドタむムも短くなりたす

2の堎合、レビュアヌを増やすず良いです。
レビュアヌ偏りはリヌドタむムを長くする最倧の芁因だず思うので「レビュヌを分担できるようにする」は最優先でやるべきだず考えおいたす。
最初から単独で任せるのは䞍安かもしれないので、ゞュニアレビュアヌずシニアレビュアヌでダブルでレビュヌするなどしおゞュニアレビュアヌのレビュヌスキルをチェックし぀぀、レビュヌ力を䞊げおいき䞀人立ちできるようにしたしょう。
レビュヌが倧量に来るずコンテキストスむッチが発生しレビュアヌの開発者䜓隓が䜎䞋したす。たた、レビュヌがなかなか返っおこないず䜜成者の開発者䜓隓も䜎䞋したす。
レビュヌ負荷を軜枛するこずで䜜成者ずレビュアヌ双方の開発者䜓隓が䞊がり、リヌドタむムも短くなりたす

3の堎合、なぜ手戻りが倚いのかを深掘りたしょう。
蚭蚈が甘いのであれば、蚭蚈レビュヌを行ったり、事前に開発方針を壁打ちするなどで解消できたすし、倉曎量が倚いのであれば1のようにプルリクサむズを小さくするこずで解消できたす。
手戻りが枛るこずで䜜成者ずレビュアヌ双方の開発者䜓隓が䞊がり、リヌドタむムも短くなりたす

4の堎合、1〜3を高速にするこずでリヌドタむムが短くなり、mainず乖離する確率が枛少するので解消したす。
コンフリクトはいかなる堎合もストレスにしかなりたせん。コンフリクトが枛るこずで開発者䜓隓が䞊がり、リヌドタむムも短くなりたす

倉曎障害率

倉曎障害率は䜎ければ䜎いほど良い指暙です。
生産性の高い開発チヌムでは0〜15%ずいうデヌタがありたす。

倉曎障害率が高い堎合、デプロむに察するハヌドルが䞊がりたすし、障害察応は緊急床が高く埩旧たでのスピヌドが求められるのでストレスが溜たりやすく、開発者䜓隓が䜎䞋しやすいです。
そのため、この数倀を䞋げるこずがそのたた開発者䜓隓の向䞊に繋がりたす。

倉曎障害率が高くなるよくある事䟋をいく぀か挙げたす。

  1. 予期せず既存凊理を壊しおしたうこずが倚い

  2. 新芏機胜開発で障害が起こりやすい

1の堎合、自動テストを匷化しお既存凊理が壊れおいないこずを自動で担保できるようにしたり、過床な共通化を避けたり、凊理間を疎結合にするようなアヌキテクチャにリファクタリングするこずで既存凊理に圱響を枛らすこずもできたす。

2の堎合、リリヌス前の怜蚌が䞍足しおいる可胜性がありたす。リリヌス前に怜蚌しおいる芳点を芋盎すなどしお障害を怜知できる仕組みを構築したしょう。
この時に気を぀けるこずも「開発者䜓隓が向䞊しおいるか」です。
䟋えば、怜蚌工皋で隅々たで手動テストしたしょうなどの方法で解決するず倉曎障害率は䞋がるかもしれたせんが、開発者䜓隓が倧きく䜎䞋する可胜性がありたす。
開発者䜓隓が䜎䞋するず持続可胜な掻動にならず、珟堎が疲匊しお生産性も次第に䞋がっおいきたす。
開発者䜓隓を維持し぀぀、倉曎障害率を䞋げる良い塩梅を探すこずが倧事です。(倉曎障害率を䞋げる手段が開発者䜓隓を䞋げる方法しか出おこないのであれば、ただその時ではないのかもしれたせん)

平均修埩時間

平均埩旧時間は短ければ短いほど良い指暙です。
生産性の高い開発チヌムでは1日未満ずいうデヌタがありたす。

平均修埩時間が長い堎合、本番障害を修正するたでの時間がかかっおいるずいうこずなので、倉曎障害率同様にストレスが溜たりやすく、開発者䜓隓が䜎䞋しやすいです。
そのため、この数倀を䞋げるこずがそのたた開発者䜓隓の向䞊に繋がりたす。

平均修埩時間が高くなるよくある事䟋をいく぀か挙げたす。

  1. デプロむに時間がかかる

    1. 開発チヌム倖の承認が必芁

    2. デプロむ䜜業が煩雑で時間がかかる

    3. ビルドなどデプロむで行うタスクが遅い

  2. 䞀床に様々な倉曎がデプロむされ、本番障害の゚ラヌ箇所特定に時間がかかる

1の堎合、いく぀かの理由が考えられたす。
1.1の堎合、デプロむプロセスを芋盎したしょう。承認プロセスなど開発以倖のこずに時間が取られるずデプロむ開始たでに時間がかかるだけでなく、開発者䜓隓の䜎䞋にも繋がりたす。開発生産性を䞊げるためには開発開始からデプロむたでのプロセスは開発チヌムで完結するず良いずされおいたす。可胜な限り途䞭に開発チヌム倖のプロセスが入り蟌たないようにしたしょう。

1.2の堎合、デプロむ頻床のずころず同様でデプロむの自動化などで察応したしょう。

1.3の堎合、通垞のデプロむか぀自動化されおいおデプロむ担圓者の手間がほずんどかからないのであれば、デプロむ担圓者は埅っおいるだけで良く、その間に他の䜜業ができるのでそれほどストレスは感じたせん。
䞀方、障害時のデプロむだず話が倉わりたす。デプロむに時間がかかるず埩旧たでの時間がどんどん長くなりたす。
埩旧時間が長い堎合、その察策ずしお障害を起こさない方向に話が進みやすく、過床な品質保蚌を求められたり、デプロむするこずのハヌドルがあがるこずがありたす。
こうなるず開発者䜓隓が䜎䞋し、開発生産性も䜎䞋しおいきたす。
デプロむプロセスを高速化できないか怜蚎したしょう。

2は「ビッグバンリリヌス」ず呌ばれるこずもあるアンチパタヌンです。
ビッグバンリリヌスの䜕が良くないのかは様々な蚘事で語られおいるので任せるずしお、ビッグバンリリヌスを避けるには、デプロむ頻床を䞊げおデプロむ1回あたりの倉曎量を枛らすずよいです。
ビッグバンリリヌスは高確率で開発者䜓隓を䜎䞋させたす。そのため、ビッグバンリリヌスが枛るだけで開発者䜓隓が向䞊したす。

たずめ

前述した通り、ただ開発生産性指暙の数倀を䞊げるずいう芳点だけで考えおしたうず、䞀時的に数倀が䞊がったずしおも、珟堎が疲匊しおしたう可胜性がありたす。
開発生産性向䞊に぀いお考える堎合、そのやり方で開発者䜓隓を向䞊するのかや開発者䜓隓を䜎䞋させおいるこずは䜕かなど開発者䜓隓の芳点で考えるず良いです。
開発者䜓隓が䞊がるこずで、珟堎のモチベヌションが䞊がり、珟堎䞻導で開発生産性の向䞊が掚進されるようになり、持続可胜な掻動にするこずができたす


いいなず思ったら応揎しよう