エンジニアの個人技でチーム開発を加速する
ひとりひとりのソフトウェアエンジニアの生産性には顕著な差があり、いわゆるスーパーハッカーはひとより100倍生産性が高いみたいな話は世にありふれている。 個人的な実感としても正直これはそうかなと思う。自分と比較して、圧倒的な生産性を発揮するソフトウェアエンジニアは実際何人か出会ってきた。(本題からそれるけど、そういう人に出会えているのラッキーだ。)
自分よりすごい人達を目の当たりにしているので、そこまで自惚れるつもりはないが、まぁ自分もそれなりには生産性が高いソフトウェアエンジニアをやれていると思っている。 結局のところは人によって得意不得意があって強みが活きるように動けているかが大事だったりするので、あまり汎用的な生産性というものを論じる意味はないのかもしれないが。
自分は個人開発者ではなく会社の一員として活動をしているので、組織として勝つことに興味がある。 ソフトウェアエンジニアが組織として勝つことに貢献する方法のもっともストレートなものは、良いプロダクトを速く作ることなので、自分もプロダクト開発に全力を注いできた。
が、最近このやり方が最適なのか疑問に思っている。 自分くらいの生産性だと、自分ひとりで組織の問題をふきとばすほどのアウトプットは出せない。そういうレベルの人も世にはいるかもしれないが。 となると、自分ひとりでのアウトプットだけで戦っていては結局組織として勝つことができない。 だけど、組織として勝つためにもっと個人として貢献できることがあるんじゃないか?そうなることを目指すべきなんじゃないのか?と思うようになった。
こういうことを考えていると出てくるのはマネジメントっぽい話かモブプログラミングみたいなチーム開発手法の話だが、自分はなんとなく即座にその二者に話がいくのは違うんじゃないかなと思っている。
マネジメントについては、ソフトウェア開発そのものにきちんとコミットするソフトウェアエンジニアでなければできないことがあると思っているので、話を飛ばし過ぎだと思ってしまう。
チーム開発については、自分の受け取り方の問題かもしれないが、なんというか人を平準化しようとしすぎていると思ってしまってあまり前向きになれないところがある。 モブプログラミングなどを通じても、ひとりひとりのメンバーが交換可能になることはなく、むしろ個々が活きるようにのびのびやれるほうがいいんじゃないかと思っている。 (モブプログラミングの目的にはいろいろあって、総論としてモブプログラミング自体にはポジティブではある。今の会社でもむしろ推進してたりする。)
ソフトウェアエンジニアはまだまだ職人技で、人と領域の組み合わせによって圧倒的に生産性に差が出る、という立場を自分は取っている。 結局は個人技で成果を上げていった先の組織的勝利なんじゃないかと、根っこでは思っている。 ソフトウェアエンジニアは個人個人のスキルがとても大切だし、結局そこが一番組織の強さを決める第一の要素だと思う。(他の職種もそうなのかもしれないけど、よく知らないので)
でもそれは、チームでの開発をないがしろにするという意味じゃない。ここが結構履き違えられがちだなと思う。 個人技を発揮するというのは、チームメンバーを気にせず自分の好きなように大技を繰り出すことではない。 というか、それも個人技なんだが、それはレベルの低い個人技だと思う。 本当にレベルの高い個人技というのは、むしろチームの生産性をあげるために辣腕を振るうみたいなものだと思う。 (まぁこれはちょっと「本当に頭のいい人ならもっとわかりやすく説明できるはずだ」論法に近いものだという自覚はある。でもソフトウェアエンジニアはそれを目指すべきだとは思うんだよな。)
勉強会とかペアプロ・モブプロとか、そういう活動ももちろん大切だし、それによって教育的な効果やチームでの認識を揃える効果を狙うのは実際にチームの生産性に寄与すると思う。 だけど、それ以上に、普通にめちゃくちゃいいコードを書いたり、みんながよく苦しんでいる部分のリファクタリングをしたり、チーム向けのライブラリ的なコードを書いたり、そういうソフトウェアエンジニアリングど真ん中の貢献をやっていきたい。 ソフトウェアエンジニアなので。