エンジニアの生産性の構成要素・QUANTSとは何か?

今回はGoogleのソフトウェアエンジニアリングのノウハウをまとめた『Googleのソフトウェアエンジニアリング ―持続可能なプログラミングを支える技術、文化、プロセス』の記述から、エンジニアの生産性の構成要素を考えていきます[1]竹辺 靖昭 (監修)、Titus Winters (編集)、Tom Manshreck (編集)、Hyrum Wright (編集)、久富木 隆一 (翻訳)『Googleのソフトウェアエンジニアリング … Continue reading

全体の生産性を下げないために気を付けたい5つの要素

QUANTSとは、Googleがエンジニアチームの生産性を考える際に注意している5つの構成要素のことです。
「QUANTS」という名前は、以下の5つの構成要素の名前に由来します[2]『Googleのソフトウェアエンジニアリング、155~156頁。』

  • コード品質(Quality of the code)
  • エンジニアの注意(Attention from engineers)
  • 知的複雑性(Intellectual complexity)
  • テンポと速度(Tempo and velocity)
  • 満足(Satisfaction)

これらの5つの要素は相互に影響しており、1つの要素を改善しようとすると、他の要素に悪影響を与えてしまうこともあります。

ここからは、これら5つの構成要素を解説していきます。

コード品質(Quality of the code)

コード品質とは、コードの可読性や構成などを指します。
たとえば適切なコメントを施したり、うまくモジュール化したりすることで、コード品質を高めることができます(読みやすいコードについては、こちらの記事をご参照ください)。

生産性は一般的に「アウトプット ÷ インプット」で測られます。エンジニアであれば、作業時間に対して出来上がったコードの量が生産性の1つの尺度になります。
しかし、生産性向上のため、エンジニアにコーディング時間の短縮を安易に求めると、コメントの記述を省き、後から修正しにくいコードが出来てしまうかもしれません。

このように、エンジニアの生産性を向上させようとする時には、コード品質が保たれるか否かに注意しなければなりません。

エンジニアの注意(Attention from engineers)

人間が高いパフォーマンスを発揮する要因の1つとして、フロー(flow)状態が注目されています。「ゾーン状態」などとも呼ばれますが、他のことが気にならないほど集中した状態のことを指します。
エンジニアもフロー状態に入れば、高い生産性が期待できます。

一方で、フロー状態を邪魔するものに「コンテキストスイッチ(context switch)」と呼ばれるものがあります。コンテキストスイッチは作業中に別の作業が入ると、再度元の作業に戻る際に時間がかかってしまうことを意味しています。
つまり、フロー状態に入っているエンジニアの注意が他に向いてしまうと、再度フロー状態に戻るには時間がかかり、生産性が低下してしまいます。

たとえば、生産性の向上のためにコミュニケーションツールを入れすぎると、エンジニアが作業に集中できなくなり、かえって生産性を低下させてしまうかもしれません。

知的複雑性(Intellectual complexity)

知的複雑性とは、取り組んでいるタスクや課題の複雑性を指します。エンジニアリングのタスクに知的複雑性はつきものですが、無駄な複雑性が発生してしまってはいけません。
たとえば、多くのツールを導入しているため、ツールごとの対応が必要になっては、無駄な複雑性が発生してしまいます。

このように、ツールやルールを作る際は、得られる効果以上に複雑性が高まるデメリットが高まってしまわないか注意する必要があります。

テンポと速度(Tempo and velocity)

「テンポと速度」はその名のとおり、作業のテンポや速度を示しています。
一般的に、エンジニアの生産性を高めようとすると、このテンポと速度ばかりが注目されます。
しかし、上記のとおり、QUANTSは相互のバランスを重要視するため、テンポと速度ばかりを追って、他の生産性の要素が悪化しないかに注意しなければなりません。

満足(Satisfaction)

満足とは、エンジニアの満足度を指します。取り組んでいる仕事の満足度でもありますし、導入しているツールへの満足度でもあります。

この満足も、他の要素に影響されることが多くあります。
たとえば、あるエンジニアの作業速度を高めるために新しいチームに編集させた場合、もといたチームに満足していたら、そのエンジニアの生産性を低下させてしまうかもしれません。

生産性は各要素の相互関係に注意する

今回は生産性を考える際に注意すべき5つの構成要素であるQUANTSについて解説してきました。
繰り返しになりますが、QUANTSは各要素の理解を高めることも大切ですが、相互の関係について考えることが大切です。
とくに注意すべきは「テンポと速度」でしょう。作業の速度を求めるあまり、コード品質やエンジニアの注意が損なわれてはいけません。

何か生産性を向上させるツールを導入しようと考えている際は、QUANTSとその相互関係に注意し、全体として生産性が高まるようにしていかなければなりません。

1竹辺 靖昭 (監修)、Titus Winters (編集)、Tom Manshreck (編集)、Hyrum Wright (編集)、久富木 隆一 (翻訳)『Googleのソフトウェアエンジニアリング ―持続可能なプログラミングを支える技術、文化、プロセス』オライリージャパン、2021年。以下『Googleのソフトウェアエンジニアリング』と略記。
2『Googleのソフトウェアエンジニアリング、155~156頁。』