Agile開発には、開発対象の機能(ストーリーという)の単位で一人でこれを受け持って開発して(コーディングしたり)試験して本番環境にデプロイして、と全工程を完結できる多能工「フルスタック・エンジニア」と呼ばれる人々で開発チームを組成して臨む、という哲学があります。今回はこの件について書こうと思います。
専門家と呼ばれる人たち
音楽などの芸術家、スポーツ関連の選手、そしてITの専門家も不思議なもので、その後それで「生活ができる」という次元に能力を高めている方々というのは、20歳よりも若い段階で自ら、自発的に動いて何らかの専門的分野に取り組み始めているという経験則があります。
私自身で言うと今こうしてIT系の分野で専門家として仕事をしていますが、この分野について一番最初に取り組んだのは、1年間の浪人が明けたすぐ後のタイミングから(20歳になる年の春でした)自作パソコンに関しての本を読んで秋葉原に出向き、部品をそろえて自分のマシンを組み上げたという経験があります。この自作PCは、当時まだマニアックだった3DCGの制作をやるにはビデオカードにそれなりに拘った、メモリも潤沢に積み、光線の挙動計算にも対応できるそれなりにCPUパワーのあるマシンというのはプリセットの筐体ではなかなか手に入らなかったので、自分で組み立てるしかなかったということがありました。そのために組み上げたマシンでした。
どれだけ教育のカリキュラムが充実していたとしても、この手の「自発性」を持った人以上に専門性を高めた人間を量産するというのは至難の業で、ITに関してそもそも興味を持ってない人に対してどんなに充実したカリキュラムのIT系の専門学校に通ってもらってもホントに育ちません。カリキュラムで受け身で学習できるのはせいぜい、1日4-5時間。しかし専門家足りうるにはこのインプットの時間に加えて自分なりに試行錯誤して何かを組み上げたりといった「自学」の時間がそのインプットの時間以上に必要になります。この時間を持つことに何らの苦を感じない、むしろ楽しんで取り組むというのがもはや「才能」と呼べる領域になり、専門家になるにはこの有無が決定的に重要になります。
得難いAgileの多能工
ひとつ、これという専門分野があれば御の字なのですが(例えばJavaが書ける、ネットワークの構築ができる、DBが構築できるといったこと)Agileで必要になってくるのは一人で複数の専門分野を跨いでシステムを組み合わせてサービスと呼べる次元にまで仕立ててしまうという人間です。いたら間違いなく助かるし、「これができる」「あれができる」ということでそのスキルセットを定義することも可能なのですが、必要な能力を増やせば増やすほど級数的にその人材というのはレアな存在になっていきます。
そんな多能工でチームを組んでシステムを作るのですから、それは間違いなく効率がいいし素晴らしいものができるであろうことは想像に難くないのですが、いかんせんそういう人たちは「得難い」のですべてのプロジェクトがそんな恵まれたリソースをそろえて体制が組めるはずもありません。
現場はどうか
フルスタックエンジニアだけをそろえてチームが組めるかというと現実はそうならず、そうなるとチームのメンバーは自ずと「DBが得意」「コーディングが得意」という形で職能というか専門性でどうしても別れたチームになります。こうなると、一人でストーリー(バックログのチケット)を担当して完結するということは現実的に難しくなる。結局、複数人数で「バーチャルな一人の多能工」的なものを作り上げて担当するしかありません。
理想は間違いなく一人ですべてを完結できるエンジニア。しかし、そういう天才的な人材をそろえて開発できるというのはよほどの高収益を上げるソフトウェアを売っているかそれでサービスを提供しているかという事業体であって、ここでもまた、Agileの哲学というのは現実に直面して補正を余儀なくなれます。