ソフトウェア開発の生産性

はじめに

最近は生産性について考える機会が多く、生産性は今年の僕のテーマの1つになりそうです。一通り自分の理解が整理できたら記事に書こうかと思っていたのですが、なかなか手がつかなそうだったので、書きながら徐々に整理していこうと思います。

生産性

生産性の定義

生産性の定義は様々ありますが、共通して生産性はインプットに対するアウトプットの比率と言えるでしょう。

 \displaystyle \frac{Output}{Input}

インプットとアウトプットの間にはプロセスがあります。

f:id:gkuga:20200419230724p:plain

生産性を改善しようという時には、このプロセスの部分にすぐ目が行きがちですが、求められているアウトプットは何かという、アウトプットの再定義から手を付けるのが良いそうです*1

なぜ生産性か?

私が思うのは特にIT業界は知識がコモディティ化していて、どの企業も似たような製品を作れるから生産性の重要性が相対的に増しているのだと思います。つまり、競争の優位性を出すポイントが生産性なんだと思います。さらに言うと、生産性よりも広い意味で、オペレーションが重要になっていると思います。オペレーションとは企業の戦略を実際に実行するプロセスのことです。

私はまだ整理できていないのですが、LeanとDevOpsの科学で出てくる話とどう関連するかというのは気になるところです。何かしら気づきがありましたらまたブログに書こうと思います。

gkuga.hatenablog.com

生産性に関わる手法など

  • Lines Of Code
    • 役に立たないと言われているコードの行数を指標にする手法
  • ファンクションポイント法
  • 能力成熟度モデル
  • COCOMO
  • アジャイル開発で使われるベロシティ
    • ただし、ベロシティを生産性の指標にするのは誤用だそう
  • ROI
    • 投資に対する利益
  • トリプルPモデル
  • PEモデル

生産性の難しさ

ソフトウェア開発における生産性の難しさについてです。世界的に成功している日本の自動車業界のノウハウがソフトウェア業界にも応用されているのを見ますが、製造業と違い形のないものを作っているのが難しさを生み出すポイントかなと思っています。

また、生産性を向上するために「こういうプロセスに変えます!」「こういうツールを導入します!覚えてください!」と言って直ぐにできるかと言ったら結局動くのは人なのでそこにも難しさのポイントがあると思います。しっかりと背景や理由を伝えて納得感を持って取り組んでもらうのも重要だと思います。

資料

今後目を通そうと思っている資料を載せます。何か良い資料がありましたら教えてください。

*1:例えば目指す品質が過剰ではないかなど