ニフティ株式会社でシニアエンジニアしています芦川です。今回は、最近調べた開発生産性の中で語られるフロー状態について書きます。
要約
エンジニアの開発生産性を向上させるためには、「開発集中時間」を確保することが不可欠です。この集中時間とは、エンジニアが中断なく作業を遂行できる時間のことで、これにより作業に没頭できているフロー状態に入ることができます。フロー状態に入るには、コンテキストスイッチをなくすことが重要であり、1つの実践例では、slackやメールの未読表示をOFFにすることで集中時間を確保できます。
開発集中時間とは
開発集中時間とは、エンジニアが中断なく作業を遂行でき、フロー状態となる時間のことを指します。フロー状態とは、作業に没頭し、時間の経過を忘れるほどの集中状態を意味します。
開発者の生産性は複数の指標を持って測るべきと書いてある、「SPACE」フレームワークの中でもフロー状態の重要性について触れられています。
Some research associates productivity with the ability to get complex tasks done with minimal distractions or interruptions.2 This conceptualization of productivity is echoed by many developers when they talk about “getting into the flow” when doing their work—or the difficulty in finding and optimizing for it,
https://queue.acm.org/detail.cfm?id=3454124
一部の研究では、開発生産性を『気を散らせず中断を最小限に抑えながら複雑なタスクを完了する能力』と関連付けています。この生産性の概念については、多くの開発者が、フロー状態に入り最適化することの難しさを共感しています。」
この状態に入るためには、少なくとも1時間以上の連続した作業時間が必要です。例えば、「1時間の作業+1時間のMTG+1時間の作業」と「2時間の作業+1時間のMTG」では、後者の方が集中度が高くなります。つまり、作業時間を1日の中でどれだけ確保できるか、ではなく、どれだけ連続した時間で確保できるか、ということになります。
「なぜ、エンジニアの”フロー状態”は見落とされるのか? 継続的なフロー状態が開発生産性を高める」の中でさらにまとめられている記述があるのでご参考ください。
つまり、ミーティングとミーティングの間に1時間が2つある状態の開発生産性と、2時間まとまった空きがある状態での開発生産性は等価ではありません。その時間の連続性が非常に重要です。
https://codezine.jp/article/detail/19022
コンテキストスイッチの影響
エンジニアが現在取り掛かっているタスクの作業中に他のタスクを行うと、コンテキストスイッチが発生し、脳にストレスがかかります。これにより集中が途切れたり、あとあと疲労を感じやすくなったりするかと思います。以下のような要因がコンテキストスイッチを引き起こします。考えられる要因としては数限りなくあると思います。
- Slackやメールの未読数表示を気にしてしまい、ついついタスクを中断し、そちらを読んでしまう。
- デスクトップ通知に気を取られてしまう。
- オフラインで急に声をかけられてしまい、タスクが中断する。
- システムから通知されるメッセージが常に多く気になってしまう。
- 急なMTG招集があり、タスクを中断する。
- トラブルが発生し、そちらの対応を優先することになる
コンテキストスイッチをまるでなくすには、1人でそもそも完結する仕事の仕方をしていなくてはなりませんが、チームで開発していたり、システムの運用保守もする立場では、ある程度その時に必要なコミュニケーションや、急なアラート対応は見過ごすわけにはいきません。
とはいえ、日々、工夫することで、自身やチームの開発集中時間を確保することはできると思います。
コンテキストスイッチを減らす方法
ここでは、私が実践している、しようとしている方法をいくつか紹介します。
Slackの未読表示や通知の無効化
デスクトップアプリのSlackの未読表示や通知を無効にします。これにより、作業中に通知が気になって中断することがなくなりました。何名かのメンバーにも試してもらいましたが反応は上々です。Windowsでは以下のように設定できます。
![](https://engineering.nifty.co.jp/wp-content/uploads/2024/06/image-1-1024x350.png)
![](https://engineering.nifty.co.jp/wp-content/uploads/2024/06/image-2-1024x843.png)
注意として、数時間全くSlackを見ないようになってしまっては、緊急のシステムアラートや連絡について無頓着になってしまうので、それはだめということです。私は30分-1時間の作業の間に意図的な休憩時間を5分設け、その間にSlack通知を確認するようにしています。(フロー状態と言っても適切な休憩時間は取ってくださいね!)
チームでの改善策
システムアラートを見て常に作業が中断してしまうようであれば、システムアラートの量やレベルの最適化がもしかしたらできてないこともありそうです。つまり、INFOレベルの通知の量が多かったり(都度見る必要はない)、調査や対応不要なシステムアラートもCRITICALレベルで通知しているかもしれません。(WARNレベルでよい)このあたりは、SREでのトイルマネジメントにも共通するところであり優先度をあげて対応したほうがよいと思います。
もう1つ、これから実践してみようと思うことに、MTGのクラスタリング化があります。こちらはまだ実施前ですが、会議を 2 ~ 3 時間の枠にブロックし、残りの時間はMTGを入れずに作業時間に充てるようにします。これをチームとして意図的に設定します。例えば、スクラム開発では、プランニングやタスクリファインメントなどイベントが数多くありますが、それらは小分けにせず(適切な休憩時間を持って)集中的に行うようにし、また、開発以外のチーム会など開催時間も午後のど真ん中にやるのではなく、1日の最後にするなど、連続する作業時間の確保については組織的に工夫できるところはあると思います。
まとめ
今回はフロー状態について書きました。エンジニアの開発生産性を向上させるためには、開発集中時間を確保し、コンテキストスイッチを減らすことが重要です。個人としてできる対策や、チーム全体での改善策を実践することで、より効率的で満足度の高い開発環境を作りましょう。そして生産的で充実したエンジニアライフを送りましょう!
We are hiring!
ニフティでは、さまざまなプロダクトへ挑戦するエンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトよりお気軽にご連絡ください!
Tech TalkやMeetUpも開催しております!
こちらもお気軽にご応募ください!