生産性が高いってどういうこと?
生産性が高いとは
生産性という言葉が、さまざまな分野において使われるようになり、一般的な単語となりました。しかし、よく使われるようになった反面、その意味はあいまいです。生産性が高いということが「良いこと」だということはわかりますが、具体的に何が良いのかは明確ではありません。例えば、「生産性が高いからこのフレームワークを採用します」といった場合に、その生産性とは一体何を指しているのでしょうか。
「生産性が高い」とは、少ないインプットで大きなアウトプットを生むことですが、求められるアウトプットはさまざまですし、少なくできるインプットもさまざまです。上述のフレームワークの例で言えば、仮に少ない時間で一般的なWebサイトを構築できる「生産性の高い」フレームワークだったとしても、複雑な要件を満たす必要のある業務アプリケーションの開発ではそれほど生産性は上がらないでしょう。
よって「生産性が高い」といううたい文句だけで採用してしまっては、逆効果の場合もあります。どのようなインプットを少なくできて、どのようなアウトプットを生むことができるのかをそれぞれの場合にあてはめて考える必要があります。
システム開発における生産性とは
システム開発で求められる生産性はケースバイケースです。仕様と納期が決まっている場合には、要件に適合した技術や環境を選択することで生産性を高めることができます。一方、開発しながら仕様を詰めるようなケースでは、アジャイル開発と呼ばれる短い期間で成果物を作成する手法が優位になります。これはアジャイル開発が、短い期間で都度判断ができるため、リスクを少なく押さえることができるからです。
では、ここでシステム開発における生産性を「時間」「難易度」「労力」の3つの視点から考えてみましょう。
1つ目が「時間」です。短時間で動作するものを開発できれば、初期段階で成果物を確認することができますし、もしバグや仕様の漏れがあれば軌道修正を柔軟に行うことができます。また、実験的な開発のプロトタイプを作成するような場合にも向いています。当然ですが、全体の納期を短くできること自体も優位です。
2つ目が「難易度」です。ライブラリやフレームワークなどを有効活用することで、難易度の高い部分を意識せずに開発できれば、上級開発者の確保ができなくても開発を進められるため、人的リソースが厳しい場合にも高い生産性を確保できます。チームで開発する場合には非常に重要な視点です。
3つ目が「労力」です。同じタスクでも手作業で行うと時間がかかりますが、自動化できる環境があれば、必要なコストを削減することができます。必要な作業タスクを減らすことは開発時間の削減にもつながるだけでなく、自動化できるような単純な作業を減らすことで開発者は本来の開発業務に集中することができます。
開発規模によっても求められる生産性は大きく変化します。大規模な開発では携わるメンバーが非常に多くなります。新しくプロジェクトに参画したメンバーへの教育コストや人材獲得の難易度もプロジェクト全体の生産性として考慮しなければなりません。例えば、理解している人がほとんどいないような技術を採用すると、その場でみれば生産性が向上したとしても、人員増強が非常に難しくなるので、プロジェクトとしては生産性が低下することがあります。