生産性とはインプットから得られるアウトプットのことで、生産性が高いと少しのインプットで大きなアウトプットが得られます。システム開発における生産性は要件の内容や作業の進め方によりケースバイケースです。具体的に、時間、難易度、労力の観点からそれぞれ考えて見ます。時間に関して、開発が短時間で済めばその後の作業も早く終わり、軌道修正せざるを得ない場合があっても柔軟に対応できます。難易度については、ライブラリやフレームワークなどを上手く使って上級開発者がいなくても進められるようにしてしまえば、人材確保が難しい場合でも生産性を維持することができます。労力に関しては、作業を自動化できるところは自動化して行うべき作業タスクを減らすことで、時間の削減に加え開発者の負担も減ります。したがって本来の開発業務に労力をまわせます。これらの観点で生産性を意識することでプロジェクト全体の生産性を向上させることができます。
生産性が高いことの一番大きなメリットは、より少ないコストで大きな成果を得られることです。生産性が上がることでより少ない人数で開発を行うことになると、作業分担がやりやすく認識のずれも少なくなるため生産性を相乗的に上げていくことができます。また、一度ベストな方法を見つけてしまえば似たようなケースに応用することもできるので、ノウハウとして蓄積することができます。
上で生産性が高いことのメリットを説明し、いいことばかりのように思えますが、見落としてはならない注意点が4つあります。1つめは目的に適さないものを採用してしまうことです。生産性が高いといっても様々な視点から考えることができ、それは開発する内容によって異なります。その中から目的に最適なものが求められます。2つめは決定をトップダウンで行ってしまうことです。現場で開発する人のスキルやスタイルを考えずに方針を決めてしまうと十分に生産性を向上させることができません。3つめはコストを考えずに導入してしまうことです。導入後にはそのことをメンバーが知っていたり開発者が使えるようになったりしなければなりません。このようなことを考えずにすぐに別のものに替えてしまうと生産性を下げる原因になりかねません。4つめが導入後に確認をしないことです。生産性を上げるために取り入れたことがあれば定期的に確認し、導入したことによって効果が出ているのかどうかを比較検討していく必要があります。
システム開発は言語や環境だけでなく、実際に作業する人が効率的にならなくてはなりません。そこで、開発手法から生産性を向上させることもできます。開発チュートリアルを用意し新規参画者の初期コストを下げたり、開発スタイルの統一を行ったりして情報を共有することが必要です。また、言語の特徴や利用できるライブラリから目的に最適でそれが容易に達成でき得るのかという点から言語を選択することも重要です。
プログラミングが早い人、ただ早いだけではなく本サイトのテーマの通り、生産性の高いプログラマの特徴を紹介します。生産性の高いプログラマは、広い視野を持って全体を俯瞰しています。目の前にあるコードだけを見るのではなく、最終的な完成形の一部としてプログラムを捉えられるかどうかで、その完成度には違いがでます。コードを書く速度はとにかく毎日書くことにつきます。毎日書いて、かつ、公開することがポイントです。
システム開発プロジェクトにおいて生産性向上をめざすにあたっては、陥りがちな落とし穴にも気をつけなければなりません。仕様も納期も決められた中での開発なのか、開発しながら仕様を決めるケースなのかによっても、生産性向上のための選択は変わります。目的に合わせたものを採用すること、トップダウンで決定しないこと、導入コストを考えること、そして導入後の現状確認を怠らないことが、落とし穴を避ける秘訣です。
プロマネという道を選択したがために、好きなコーディングがなかなかできなくなってしまい不満があるなら、プログラマに戻り、転職やフリーランスへの転身を考えてみるのも一つの手です。ただし、どちらにしても本当に自分がやりたいことを実現できるのかどうかを見極めて行動に移しましょう。転職の場合は選考の時点で確認を行い、フリーランスの場合は目的や方向性がマッチするようであれば多くの案件をこなし、場数を踏んで実績を積みましょう。