ソフトウェア開発の世界には、様々な法則があります。
遅れたプロジェクトに人数を追加しても、さらに遅らせることになるという「ブルックスの法則」は有名ですね。他にも、ソフトウェアの構造は、それを作った組織の構造が反映させるという「コンウェイの法則」などなど。(参考)
最近、ソフトウェア開発を通じて感じていることは、ソフトウェアの仕様を決める人の数は、ソフトウェアをプログラミングする人の数と同じだけ必要なのではないか、ということです。
そこで、この記事ではこれを「人数等価の法則」として考えてみることにしました。
目次
これまで考えられてきた開発にかかる人数の感覚
ソフトウェア開発には、何を作るかを考えるという段階があって、どう作るかを考えてプログラミングするという段階があります。それを2人以上の人間で役割分担するとしたら、その間に入るものが「仕様」となります。
「仕様」とは「何を作るのか」ということであり、プログラムを作る前に仕様を決める必要があります。「仕様」が決まれば、プログラミングで表現をして、プログラムが出来上がります。
ウォーターフォールであれば一度に仕様を決めて、一度にプログラミングするでしょうし、アジャイルであれば少しずつ仕様を決めて、少しずつプログラミングしていきます。基本的な行為が変わることはありません。
そうした前提で、昔から考えられてきたことは、仕様を考えて決めるコストに比べて、実際にプログラミングにかかる人数のことの方が大きなコストだということでした。たとえば仕様担当が1人だとして、それに対するプログラマが3人とか4人とか。
果たして、今の時代、それは本当に正しいのでしょうか。
プログラミングにまつわる環境の変化
ソフトウェア開発におけるプログラムを作るための生産性は、昔に比べて圧倒的に向上してきています。たとえば、以下のような要因があるでしょう。
- オープンソースによるコードの共有
- インターネットにおける知識の共有
- ハードウェアの進歩とクラウドの出現
昔といっても数十年前ですけれども、ソフトウェアに必要なすべての部品は自分たちで作らねばならず、開発に必要な知識はメーカーのマニュアルを読み込み、ノウハウは自分たちで経験して蓄積せねばならないような時代がありました。
また、コンピュータリソースは有限で、人の働く時間よりもコンピュータの稼働時間の方が貴重な時代もあったと聞いたことがあります。
そんな時代であれば、仕様を決める人間に対して、プログラマは数倍〜数十倍の人数が必要だったのかもしれません。
しかし、ハードウェアは年々進歩しており、当然のように人の考える時間の方が貴重になりつつありますし、オープンソースを使わないでゼロから作るなんてこともありません。困ったことがあれば、インターネット上に沢山の知見が共有されています。
そして、クラウドの出現と台頭によって、プログラミングをしていたプログラマ自身が運用環境もプログラムを扱うように扱えるようになってきました。
今の時代は、1人のプログラマがカバー出来る作業工程が広くなり、産み出せる生産量も増えてきているのです。
ソフトウェア開発における「人数等価の法則」
1人のプログラマが、仕様を決める人とのコミュニケーションから、ソフトウェア内部に関する設計をすべて行ってプログラムとして表現するところまでをカバーできるようになってきたとしたら、間に人を介する伝言ゲームがなくなります。
これは決してウォーターフォールがなくなることを意味している訳ではありません。ウォーターフォールとしては一度に仕様を決めて、一度にプログラミングする、という形は変わらないけれど、中間の階段がなくなるということになります。
ともかく、イマドキの技術や環境を活用し効率化すれば、プログラマの仕事は本当に頭を使う部分だけになってきます。一方で、仕様を考えて決める仕事は、もとから頭を使う部分だけなので、これ以上の高速化はできないでしょう。
そうした結果、プログラマの数を増やすのであれば、そのプログラマたちが作るだけの仕様を考える人数も同じだけ必要になるのではないか、と考えられるのです。もしくは、仕様を考える人数と同じだけのプログラマで十分なのではないか、ということです。
期間に対する限界人数というものがあると思います。1ヶ月に100人の人間を投入したからといって、沢山の機能をもったソフトウェアを一度に完成させることは現実的に難しいでしょう。仕様を考えて、出来たプログラミングを確認するだけの期間と同じだけの期間は、プログラミングにも必要でしょうし、逆もしかりでしょう。
かつては確かに、「仕様」を決める工程は「頭」を使うことが多く、それ以降の工程では「頭」よりも「力」をつかう割合の方が大きい時代があったかもしれません。
しかし、今の時代、これからの時代は、「仕様」を考えて決める工程で使う「頭」と、それ以降のプログラミングで使う「頭」の時間の割合は同等になってきており、そこに必要な人数は同等なのではないか、と考えるのです。
これはアジャイルだとかウォーターフォールだとかは関係なく存在している法則ではないかと考えています。
『ソフトウェア開発において、仕様を考えて決めて出来たものを確認する人数・コストと、仕様からプログラミングする人数・コストは同等になる』という法則を「人数等価の法則」と呼ぶのはどうでしょうか。