ITエンジニアと生産性を考える デスマーチはなぜなくならないのか

f:id:konosumi:20180724012538j:plain

久しぶりに図書館に行ったら、たまたま目に止まったので「デスマーチはなぜなくならないのか」を読みました。

本書の感想から先に言ってしまうと、考察の対象、ないしインタビューがX社に偏っているため、本としての説得力には欠けます。しかしながら、インタビューの章は興味深く、考えさせられる本でもありました。

そして、ITエンジニアの生産性に関して興味深い記述があったので、自分の意見も交えつつ、少し紹介していきたいと思います。

目次

優秀な人とそうでない人

プログラマーの復権 新紀元社 2004

優れた人が優れたソフトウェアを作る、というのは昔からの考えだ

人月の神話

プログラミングマネージャーは、できるプログラマとできないプログラマの間に、大きな生産性の相違があるということに、前々から気が付いていた

とあるインターネットの投稿

プログラマの世界は、10%の優秀な人と、40%の普通の人と、50%の足を引っ張る人、からなっています。

生産性の隔たり

プログラミングの世界において、ここで述べられていることは、プログラマの生産性は個々の能力に大きく依存するということです。

1人日の開発タスクを、効率的に2時間で終わらせてしまう人もいれば、2日以上かかってしまう人もいます。

つまり、画一的な見積もりをしてしまうと、担当メンバーによって早く終ることもあれば、デスマーチに陥ることもあるのです。

なぜ生産性に大きな差が出るのか

理由は幾つも挙げられますが、私の考えでは、主に以下の2点が重要かと思います。

プログラムの再利用性

プログラムには、物理的な製品と違って再利用しやすいという特徴があります。

  • 優良なOSSを探す能力に長けている人
  • 再利用性の高い共通ライブラリを開発する能力があり、使い回す能力に長けている人

これは、プログラムの再利用性や共通性を有効活用することで、自分が書く絶対的なコード量を減らすというアプローチです。

ロジックを考案する能力

システム開発のプロジェクトにおいて、事細かに記載した完璧な仕様書は不可能なので、結局は個々のプログラマが考えながら実装する必要があります。

  • アルゴリズム力に長けており、ロジックがすぐ思い浮かぶ人
  • 該当システム(不動産、アパレル…等)の業界知識に長けており、勝手がよく分かっている人

平たく言ってしまえば、書くべきプログラムをすぐ思いつく人ほど、早くコードが書けます。

生産性をあげるための取り組み

上記のように、開発における生産性は、個々人の能力に依存することが分かりました。

そこで登場するのが、例えば「ペアプロ」や「モブプロ」といった取り組みです。これらは、上記の個人に依存する能力を、チーム内で共有するという効果を持ちます。

ペアプロは、二人の時間を消費してしまうからといって嫌われがちです。でも、こうやって考えてみると、意外と重要な役割があるわけです。

基礎を知っているかどうかで生産性が変わる

生産性には、個人のエンジニアの能力が密接に絡んでくると述べました。ただ、何故こんなにも生産性に差が出るかと言いますと、ITエンジニアは誰でもなることができるからです。

  • アルゴリズムを知ってる人、知らない人
  • セキュリティ対策の基本を知ってる人、知らない人

ITエンジニアは専門職であるにも関わらず、資格も不要なため、情報の基礎を学ばないままエンジニアとして入社する新人もたくさんいます。基礎を知っているのか、それとも知らないのか、これだけでも大きな差が生まれそうなのは、想像に難くありません。

作ったものが無駄になると、生産性がゼロになる

度重なる仕様変更によって、せっかく作ったものが無駄になってしまうことは往々にしてあります。作り直しになってしまっては、プロジェクト全体で見た時の生産性はゼロも同然です。

・・・となると、プロジェクト全体の生産性を上げるためには、極力無駄を省く必要があります。そして、システム開発プロジェクトにおいては、開発の序盤であるほど、仕様変更の影響が少ないという特性があります。

そこで登場するのが、例えば「プロトタイピング」といったテクニックです。深く作り込む前に、浅く作ったもので、まずは動作を確認してもらうのです。そこで認識が合えば、作り込みを開始していきます。

知見の共有による、生産性の平準化

自分だけが知っている知識を、周りに共有してしまうことは、自分だけの武器が減ってしまうということを意味します。ITエンジニアが専門職である以上、オンリーワンの知識を得て専門性に優位性を見出すのは、あり得る発想です。

しかしながら、知見はどんどん共有していかないと、チーム全体の生産性が底上げされることはありません。

そこで、最近のIT企業で多く取り入れられているのが、アウトプットに対する評価です。これは、知見のアウトプットを評価することで、上記のような抵抗をなくす効力があります。

さいごに

その他にも、CIの導入による自動化の推進や、スクラム開発の導入など、生産性を上げるための取り組みは、今後も尽きることはありません。

ペアプロやモブプロといった例外はありますが、チーム開発といえど、結局はプログラミングは、基本的に個々人が行ないます。

生産性と向き合い、生産性を上げるための努力こそ、今求められているのです。