Developer Experienceを良くしよう

English version

最近「Developer Experience(デベロッパー体験)」という表現をよく聞くようになりました。ソフトウェア・エンジニアの方であれば誰もが大事だと感じつつ、うまく言語化できていないもののように思います。自分もなかなかうまく説明ができていませんでした。ただ、組織の中で立場なども上がっていくに連れて、これをうまく他の方(特に非エンジニア)に説明しないと行けない場面が増えてきていたので、これを気に少し調べてみたので、それについて、特に強く感じたものを書きたいと思います。

今回、特に取り上げるのは以下の4つになります。

  • 「フロー」を保てるようにする

  • フィードバックループを速く回す

  • 認知的負荷をうまく調整する

  • いいツールを使う

「フロー」を保てるようにする

「フロー」状態については一度は聞いたことがあるかと思います(「ゾーンに入る」とも言います)。「フロー」は、自分の眼の前にあるタスクに完全に集中している状態のことです。プログラミングをしている状況で言えば、目の前のコードや設計に集中していて、次に何をすべきかが見えているような状態です。このフロー状態を保てていると、生産性が向上したり、成果物の質が良くなったり、ストレスが少なく満足度が上がる、と言われています。

ここで重要なのはフロー状態を「保つ」ことにあります。フロー状態は、電気のスイッチみたいにパチっとすぐに入れるものでもなければ、自分でスイッチを簡単に入れられるようなものでもありません。作業をしていく中で徐々に入っていくものです。研究結果によると、フロー状態に入るには、おおよそ15〜20かかると言われています。見ているものの広告やら、スマホやら、Slackやら、メールやら忙しい現代においては、なおさら入るのが難しいものです。

フィードバックループを速く回す

フィードバックループは自分が行ったことに対して結果が返ってくるループのことで、これを速く回すことができることが良い体験には重要です。例えば、自分がコードを書いたら、コンパイラのエラーがすぐに返ってきたり、テスト結果がすぐに出ることを指します。ベストは保存を押した瞬間にすぐに出てくるのがベストですね。
では、反対にループが回るのが遅いとどうなるかというと、そのループが返ってくるのを待っている間に高確率で別のタスクに移ってしまい、ループが返ってきたら、また元のタスクに戻る必要が発生します。結果、1つ前の点で述べた通り「フロー」状態も当然ながら崩れてしまいます。
また、こういうフィードバックが遅いと、無駄にストレスが高くなりますし、その億劫さにより、同じ行動を取る時に躊躇するようになってしまいます。

具体的には以下のようなものを指します。

  • 遅いPCやサーバー

  • 遅い開発ツール(コンパイラ、IDE等)

  • 遅いCI/CDパイプライン

  • 返事が遅いプルリクエストのレビュー

ちなみに速いフィードバックループについては、 以前もブログにも書きました ので、興味のある方は、そちらもご覧ください。

認知的負荷をうまく調整する

認知的負荷とは、人があるタスクを完了させるのに必要な脳内のメモリー量(正確にはワーキングメモリー)のことです。プログラミングにおいてもいろいろな理由でメモリーを使うのですが、一部例を挙げると、以下のようなものがあります。

  • 利用しているプログラミング言語の文法

  • 開発している機能の仕様

  • 読んでいるコードの変数名やその中身

  • コーディング以外で行わないといけないタスク(ドキュメント作成、設定変更、等)

これらを脳の中に入れておきつつプログラミングしないといけませんが、当然脳の容量には限度があり、たくさん入れておこうとすればするほど、プログラミング作業が遅くなり、質も下がります。
この際に大事なのは既存コードの質によって認知的負荷が大きく変わることです。当然、質が悪いコード(読みにくいコード)であればあるほど、認知的負荷は大きくなります(コードが読みにくくて、頭が痛くなったことがある人は多いと思います)。
また、コードの質が悪く、認知的負荷が大きいほど、脳の余裕もなくなり、たたでさえミスをしやすい環境なのが一層ミスをしてしまいやすくなります。

認知的負荷をゼロにするのは不可能ですが、コードのリファクタリングやフォーマットの統一化,
ドキュメントをしっかり書くなどして、なるべく認知的負荷を抑える努力をすることで、デベロッパー体験を維持するようにしないといけません。

いいツールを使う

当たり前のことかもしれませんが、開発をする際にはツールの良さは重要です。エンジニアであれば、エディタやIDE等などが良い例ですね。VS Codeのように無料なもので十分と思う方もいらっしゃいますし、それでももちろん良いのですが、優良なもので非常に優れたものもあることを頭に置いておくべきです。例えば、JetBrains IDEAとかがその1つです。月70ドルと安くないのですが、そのツールを使っている時間や、そのツールを使っていることによって、開発スピードがどれだけ上がるかを考えると、十分元が取れると思います。
インフラの部分でもCI/CDなども良いものを選ぶ必要があります。先程の「フィードバックループを速く回す」の項目でも書きましたが、CI/CDパイプラインからのフィードバックの速度もとても重要です。
他には普段の開発ツールではないのですが、タスク管理(JIRA、GitHub Projects等)やコミュニケーションツール(Slack、Teams等)、ドキュメント管理(Confluence、Notion等)も良いものを使うことで、デベロッパー体験を向上させることができます。

細かいものも重要

いかがでしたでしょうか?今回書いたものは細かく、見落とされやすいものですが、重要な要素です。なんでもそうかもしれませんが、細かいものも大切で、こういう細かいものを大事にすることにより、全体のデベロッパー体験を向上させることができます。

参考


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