たのしく生きたい

いつもニコニコゆるふわブログです

Web系エンジニアにおける生産性って何だろう?

この記事は「#しがないラジオ Advent Calendar 2019」 8日目の記事です。

adventar.org

はじめに

私は、しがないラジオのテーマ通り、「SIerのSEからWeb系エンジニアに転職した」エンジニアです*1。現在は、toC向けWebサービスを展開している(いわゆる)ベンチャー企業にて、フロントエンドやサーバーサイドの実装からインフラ構築までいろいろとやっています。

さて、エンジニアに限らず、労働をしているとさまざまな場面で「生産性」という言葉が話題にあがると思います。

例えば、自分のルーチンワーク的な業務を効率化して生産性を上げようとか、アジャイルスクラムを導入してチームの生産性を上げようとか、リモートワークでは個人の生産性が測れないのでWebカメラをつけて記録しようとか、「働き方改革」によって残業時間は減ったけど仕事量は変わらないので生産性を上げるしかない、とか*2。日々労働をするなかで、生産性について考えることは多いのではないかと思います。

しかし、そもそも生産性とは何なのか、自分ではよくわかっていません。なんとなくのイメージはつくけれど、どのように定義されるのか、またどのように測られるのか、明確に答えられる自信がありません。そのため、誰かが生産性について言及しているのを目や耳にすると「あなたにとっての生産性とは?」と聞いてみたくなってしまいます。

では、Web系エンジニアやソフトウェアエンジニアにおける生産性とは、いったいどのように定義されるのでしょうか?

一般的な「生産性」について

一般的に「生産性」といえば、時間あたりの労働生産性のことを指します*3。企業や組織が産出した付加価値と、投入された労働時間との関係が、生産性であると言えます。

そのため、生産性を上げるためには「同じ産出量に対してかかる時間を減らす」もしくは「単位時間あたりの産出量を増やす」ことが目標にされることが多いと思います。

SIerにおける「生産性」について

では、SIerにおいて生産性はどのように定義されるのでしょうか?

私がSI企業に勤めていた時期は短いですし*4、またSIから離れて久しいのであんまりわかったようなことは言えません。ただ、SIerにおいては上記の一般的な生産性の定義をそのまま当てはめることができるのではないかと考えています。

「人月商売」などと称されるように、SEひとりひとりに単位時間における「単価」がついており、それに「工数」という労働時間をかけあわせて算出された数字が「人月」という単位で測られ投入量とされています。

投入量に対する産出量としては、SESと呼ばれるいわゆる「下請け」企業においては「元請け」企業から受け取る金額がそのまま付加価値になるでしょう*5。そして「プライムベンダー」などと称されることもあるいわゆる「一次請け」企業においては、顧客に納品する「成果物」が産出物と言えるでしょう*6

こうしたことを考えると、顧客からの受注契約によるビジネスモデルで成り立つSIerにおいて、産出する付加価値が明確になっていると考えられます。そのため、単に 産出量/労働時間 で生産性を定義できるのではないかと考えています。

ただし、業務委託先のエンジニアの生産効率やプロジェクトの利益率を上げすぎるのも、場合によっては問題になったりすると思います。

よく言われる話ですが、業務委託では大抵の場合は時間契約となっていることが多いため*7、業務における生産量というよりも「いくら時間をかけたか」という指標によって金額が変わります。そのため、極端なことを言えば、たくさんの仕事をこなすよりもとにかく時間をかけて業務にあてる方が、委託先の個人や法人にとっては得だったりします*8

また、SIerは顧客からシステム開発や運用保守の案件を受注する形のビジネスを行っていると思いますが、その際の受注額はSEひとりひとりの「単価」に「工数」をかけた金額に対し、さらに利益率をかけて出すのがよくあるのではないかと思います*9。こうした場合、実際のプロジェクトの利益率が高すぎると事前の見積もりが過剰だったと見なされ、アサイン計画が失敗していると評価されかねません。

そういったさまざまな事情を踏まえると、SIerにおいて生産性の向上というテーマについては一筋縄にはいかないところが多いように思われます。が、今回は対象をWeb系エンジニアに絞り、SIerについては深く踏み込まないことにします*10

Web系エンジニアにおける「生産性」について

次に、Web系エンジニアにおける生産性について考えてみたいと思います。

SIer vs Web系 議論

SIerとWeb系がセットで言及されることはよくあると思いますが、労働生産性についてSIerとWeb系エンジニアで比較した下記の2016年の記事がバズったことがありました。

getlife.hateblo.jp

タイトルの通り「Web系の方がイケてる環境で開発しているはずなのに、SIerの方が生産性めっちゃ高い」という内容です。この記事が依拠するデータは総務省による「ICTの経済分析に関する調査*11」(平成27年度)なのですが、記事内では調査対象である「情報サービス業」とSIerとして、「インターネット附随サービス業」をWeb系として扱っています。それぞれ労働生産性を比較した結果、SIerの方が生産性が高いと述べています。

しかし、2016年当時にはこの記事に対する反応や反論はいくつか出ていました。他の調査データからエンジニアの給与を比較するものや*12SIerとWeb系の分類の仕方やデータの読み取り方に疑問を示すもの*13などあり、単純に「Web系の労働生産性SIerの3割しかない」とは言えなさそうです。

加えて、上記の記事が依拠している調査についても注意すべき点がありそうです。平成27年度の調査*14と現状の最新である平成30年度の調査*15を見比べてみると、情報産業における部門の分類方法に変化があるように見えます。例えば、次の図表は各部門における労働生産性を示したものなのですが、同じ部門でも平成27年度のものと平成30年度のものでは数値が一致していません*16

2016年版 64頁 よりそのまま抜粋2018年版 67頁 よりそのまま抜粋
総務省「ICTの経済分析に関する調査」図表

このような点を考慮にいれると、やはりSIerとWeb系を単純に比較するのは難しいと思います。

ソフトウェアエンジニアにおける生産性についての研究

続いて、ソフトウェアエンジニア全般における生産性についてアカデミックな観点から研究した論文がないか探してみました。てきとーにググってみると、同志社大学による「日本のソフトウェア技術者の生産性及び処遇の向上効果研究」という2014年度の研究結果が見つかりました*17

日本のソフトウェアエンジニアの生産性をいかにして向上させるかという問題意識から調査された研究ですが、生産性を決定づける要因について国際比較が行われています。そして、比較対象として用いられている生産性の指標としては「自己評価指標」と「職務満足度」が採用されています。これは心理的・主観的な指標ではありますが、チームやプロジェクトにおける客観的指標と強い相関関係にあることが過去の調査から示されているそうです*18

しかし、これは裏を返せば、生産性についてチームやプロジェクト間で比較できるような客観的な指標を採用するのは難しい、ということなのだと考えられます。つまり、ソフトウェアエンジニアにおける生産性を一般化するような指標を立てるのは難しい、ということになります。

英語ならさらに深く言及した論文があるのではないかと思いGoogle Scholerで "software engineer productivity" などのキーワードで検索してみましたが、良い感じの論文は見つかりませんでした*19

deploys / a day / a developer

ところで、エンジニアリングマネージャーのためのPodcast #EMFM や『エンジニアリング組織論への招待』などでおなじみの広木大地さんが、下記のようなツイートをしていました*20。「1日あたりのデプロイ回数を開発者数で割ったもの」を、エンジニアリング組織の健全さの指標にしようと提案されています。

「組織の健全さ」のための指標とされていますが、これをそのままWeb系エンジニアにおける生産性の定義に当てはめてみる、というのは結構ありなんじゃないかと思っています。もちろん「deploysとは何を指すか」「developerとはどのような範囲か」といったことを組織やチームに応じて明確に定義する必要はあるとは思いますが、計測しやすい指標ですし、またチーム間で比較しやすいのではないかと思います*21

Google re:Workを見てみる

ソフトウェアエンジニアの働き方といえば、Googleが公開している re:Work というページがとても参考になります。みんな大好き「心理的安全性」について言及したのもGoogleの研究ですし、ここを見れば全てが解決しそうに思います。

しかし、ページ内で「生産性」でキーワード検索してみましたが、ソフトウェアエンジニア一般の生産性を明確に定義している記事は見つかりませんでした*22。単に日本語の翻訳が遅れているだけなのかと思い、英語版でも "productivity" で検索してみましたが、やはり直接的に定義している記事は見当たりませんでした*23

とはいえ、生産性の定義について考える上でre:Workが全く参考にならないということではありません。例えば、それこそ「心理的安全性」は、Googleが効果的なチームを作り上げる要因とは何かを調べる過程で示された概念ですが、チームの効果性を測る指標としては、「四半期ごとの売上ノルマに対する成績」という客観的・定量的な指標に加えて、「マネージャー・チームリーダー・チームメンバーによるチームの評価」という主観的・定性的な指標があげられています*24。こうした調査手法からも、上述した同志社大学による研究では生産性指標として「自己評価指標」や「職務満足度」という心理的な指標が示されていましたが、Googleでも同じように定性的指標を用いていることから、生産性を測る上でチーム内の主観的な評価は欠かせないようです。

このように、re:Workではチームの生産性やパフォーマンスを測る上で、向上させるためのさまざまな知識や考えがわかりやすくまとめられています*25

まとまっていないまとめ

結局のところ、Web系エンジニアにおける生産性について共通の定義は見出せず、「チームやプロジェクトごとに測り方は違う」という当たり前の結論しか得られませんでした。結果として、この記事はタイトルの通り「Web系エンジニアにおける生産性って何だろう?」という疑問を世に投げかけるにとどまってしまいました。

もちろん、私のリサーチ不足に依るところが大いにあると思うので、今後も調べ続けたいと思いますし、また日々の業務に活かせるように考え続けたいと思っています。

Web系エンジニアやソフトウェアエンジニアにおける生産性の定義について、もし何か参考になりそうな記事や論文をご存知の方がいらしたら、ぜひ教えてもらえると嬉しいです。また、いろいろな方が生産性についてどう考えどう感じているのか、ぜひたくさんの意見を聞いてみたいです。

さいごに

ぜひたくさんのフィードバックをお待ちしております。

お待ちしておりま〜す。

*1:ただ、しがないラジオが転職の直接のきっかけになったというよりは、もともと考えていたことを後押ししてくれたという感覚です。いずれにせよ、しがないラジオに出会えたことは僕にとっては幸運だったと思います。

*2:なんか後半ネガティブな感じになっちゃいましたが、別に「生産性」という言葉にそういう印象を持っているということではないです。

*3:前提の議論をいろいろとぶっ飛ばした上で「指します」とか断定しちゃってますが、厳密に言えば「生産性」とは「投入量に対する産出量の割合」と定義されています。また、一口に「生産性」といっても「物的生産性」と「付加価値生産性」が分けられ、また投入される資産としては「労働」と「資本」があげられます。日本生産性本部という公共財団によるページカオナビによる解説記事が参考になります。その意味で言えば本文中の記述は正確ではありませんが、ソフトウェアエンジニアに限れば、産出されるアウトプットとは「付加価値生産額」であり、また投入されるリソースとは「労働」であると言えると考えられます

*4:新卒で入った、いわゆる大手SI企業には2年半しかいませんでした。

*5:本当はあんまり「上流/下流」とか「一次請け」「下請け」みたいな区別の仕方は良くないと思いますし、ここで「下請け」などと軽々しく書くべきかためらいはありました。とはいえ、このように称するのがSIerと呼ばれる産業における現状を言い表すのに最も適しているのだと思います。残念ですが。

*6:古の言い伝えによると、創世記においてはソースコードのステップ数を産出量として記録するケースもあったらしい。

*7:一般的には 160時間/月を基準にプラスマイナスいくら、みたいな感じだと思います。

*8:もちろん、そんなことが実際に行われるのは少数だと思います。思いたい。

*9:「よくあるのではないかと思います」とか書きましたが、自分の数少ない経験からそのように捉えているだけで、一般的にどうなのか本当によくわかっていません。「そんなわけねえだろ世間知らずのバカか」とか「たかだか2年半でわかったようなことを言うな」とか、みなさまからの愛に溢れたコメントをお待ちしております。

*10:この辺りはすでにいろいろなところで研究されているのではないかと思っています。具体的にはぜんぜん調べられていませんが。

*11:http://www.soumu.go.jp/johotsusintokei/link/link03_03.html

*12:WEB系3割の話 - プロジェクトの備忘録

*13:Web系の「労働生産性」が低いのは、Web系の仕事の効率が悪いからなのか? - あままこのブログ

*14:http://www.soumu.go.jp/johotsusintokei/linkdata/ict_keizai_h28.pdf

*15:http://www.soumu.go.jp/johotsusintokei/linkdata/h30_01.pdf

*16:ついでに述べると、労働生産性の数値について平成27年度では確かに「情報サービス業」>「インターネット附随サービス業」であり、また後者の労働生産性は著しく低いです。しかし、平成30年度では双方の数値は平成27年度のものとは大きく違っており、2015年から2017年においては後者が前者を上回っています。

*17:https://www.ipa.go.jp/sec/reports/20161125.html

*18:この辺りの記述は、上記を参照した論文でもある次の論文を参考にしました。中田喜文,2018,「日本のソフトウェア技術者の生産性と労働条件の決まり方:アメリカ,中国,フランス,ドイツとの比較を交えて」

*19:ていうか英語が読めないので見つけられませんでした。英語を勉強したい。

*20:#EMFM は毎回楽しく聞いています。このPodcastのおかげで、エンジニアリングマネージャーってかっこいいし面白いかもな、と思うようになりました。この記事のようなテーマを考え始めたのも、もしかしたらその影響かもしれません。

*21:この記事では全般的に、個人における生産性の議論と、組織における生産性の議論をごっちゃにしてしまっています。本来はこの辺りは明確に区別すべきとは思いますが、ひとまず「Web系エンジニアにおける生産性一般について」の記事ということで、勘弁してください。

*22:https://rework.withgoogle.com/jp/search/?q=%E7%94%9F%E7%94%A3%E6%80%A7

*23:https://rework.withgoogle.com/search/?q=productivity

*24:Google re:Work - ガイド: 「効果的なチームとは何か」を知る

*25:調べている過程で思い浮かんだのですが、「生産性」と「パフォーマンス」とは似ているようで違う概念だなと感じました。例えば、OKRという目標設定の手法では、高い目標を掲げると高いパフォーマンスを出せると言われていますが、あくまでも掲げた目標に対するパフォーマンスであって、「高いパフォーマンス=高い生産性」とそのまま言えるかというと微妙な気がします(Google re:Work - ガイド: OKRを設定する)。この辺りの関係性についても、どこかで考えてみたいです。