メソッド屋のブログ

米マイクロソフト Software Development Engineer 牛尾の日記です。ソフトウェア開発の上手なやり方を追求するのがライフワーク。本ブログは、個人の意見であり、所属会社とは関係がありません。

技術なきマネジメントの衰退とその対策

今回は、マイクロソフトにいて自分が感じているIT業界の大きなスタイルの変化の兆候とその対策について書いてみた。今回もいつも通り、単に自分の意見をシェアしているだけであって、他の人にどうこうしろと言いたいわけではない。ただ、日本のIT業界が米国に追いつき、追い越すための議論のきっかけになるといいなと思っている。自分も楽しみながらも、もがいていることと、そこで見えた光について書いてみたい。

f:id:simplearchitect:20170618224052j:plain

世界は「技術力」の重視に向かっている

 私のキャリアは、某大手SIerを12年勤めた後、ITコンサルティング企業に3年在籍して、主に超上流を実践した。その後独立し、ビジネスモデリングから、アジャイルや、DevOpsの導入支援、マネジメント、開発などを実施していた。

 私がマイクロソフトを受けてみようと思ったのは、友人からの推薦の要素が大きかったのだが、その背景では、海外で勤務したいという希望があったのと、「技術力」を磨きたいというのがあった。ラッキーなことに、海外転勤ではないものの、インターナショナルチームエバンジェリストというテクニカルな仕事ができているので大変幸せだ。

 なぜ当時「技術力」を磨きたかったかというと、私は、アジャイルや、DevOpsの導入、超上流の技術をはじめとして、「人」系の技術を磨いてきたので、アジャイルのような新い考え方を日本に導入するということに関しては絶対の自信もあったのだが、プログラマとしての技術力は、過去のキャリアを見てもらっても分かる通り、正直3流だ。

技術力がないのは何となくやばい

 お客様と接している時に、ふと「このまま技術力」を磨かないと将来やばいとぼんやりと不安に思っていた。特にクラウドコンピューティングが普通になってきた頃から、そろそろやばいという感覚があった。しかし、私にはキャリアがないし、大手SIだったので、そんなにガッツリ自分で開発もしていない。今はいいけど、近い将来やばいんじゃないか。だから、ガチのプログラマとしては通用しないと思うので、プレゼン力とか、トランスフォーメーション力がとても有効で、しかも技術力も成長できるDevOps のエバンジェリストの職はまさに私が求めていたものだった。

f:id:simplearchitect:20170618225239j:plain

たった1年で起こったマイクロソフトのトランスフォーメーション

 最初の1年目は私はとても良い成果を出すことができた。皆さんのご協力、そして持ち前のトランスフォーメーション力もあり、とてもいい事例も作れた。プレゼンも神のようなレベルの人に直接教えてもらえて上達したし、プレゼンの評判もありがたいことに、とても良かった。当時のエバンジェリストの評価は色々あったが、最重要の指標の一つは、プレゼンなどを実施した時の「顧客満足度評価」の指標だった。技術力は、人前で話をしたり、デモをしたりというレベルで良かったので、頑張って学んで実践していれば、対応することもできた。ところが、技術のデモやプレゼンをして人々に、新しい技術を広めるという「エバンジェリスト」の職業は、たった1年でまるっきり評価基準が変わったのだ。

ハックフェストと技術力がエバンジェリストの世界を支配した

 期が変わると、評価基準が一転した。プレゼンや、「顧客満足度評価」はもはや、エバンジェストの評価としては、ほぼ意味がなくなり、お客様のところに行って、ハックフェストというイベントを実施して、最も難しい問題を「コード」で解決してくること評価に変わった。ハックフェストは、3−5日で、お客様の環境でガチでコードを実装したり、自動化したりするようなイベントだ。そして、例えば、世界で誰も解いていない問題を解いたり、オープンソースにコントリビュートするようなことが「インパクトがある」という考え方に変わった。  これはとても大きな変化だ。開発者ではないので、マーケティングのような技術者のような中間のセンスが要求されたエバンジェリストは、そこまで正直技術レベルを要求されなかった。ところが、この方針では、かなりのテクニカルスキルを要求されるようになる。プログラマとして3流の私は死ぬ気で頑張るしかない。

米国のハックフェストで感じていたレベルの高さ

 日本では、正直なところ、新しい技術や方法を導入するためには、技術力というよりその前にステークホルダーの人をうまく巻き込んだり、モチベートしたりといった「技術以外の要素」が実際に技術を導入する前に必要とされることが多いように感じる。私はそういうのがとっても得意だ。だから、日本では活躍ができた。

 ところが、米国で先の「ハックフェスト」を実施すると、様子が日本と全く違うことに気づいてきた。お客様のレベルが平均的レベルが非常に高い。

 日本でハックフェストをやると、例えば、最初の数日は、新しい技術のハンズオンみたいな感じになる。だから、達成できることもあまり多くないことが多いが、米国でのハックフェストの場合、お客様は、チュートリアルはおろか、新しい技術でも、すでにガンガンに本番に適用していて、基本的なことはみんなわかっていて、実際使っていて、その上で、「難しい問題」をお客様と一緒に解決することになるので、インターネットで探しても解決しない「世の中で未解決」の問題に向き合うことになる。

f:id:simplearchitect:20161202162159j:plain

米国では、「技術以外の要素」の重要度は低い

 日本では、このような「ハックフェスト」を実施する前に、たくさんの準備、訪問、説明などような「種まき」が必要だが、米国だと、「お客様」の方からリクエストが来るので、日本で必要な「技術以外のこと」があまり必要なく、「技術力そのもの」がお客様に求められる。

 また、入門レベルのことも、米国の場合はお客様が自分で勝手にやってくる。世の中にチュートリアルや、ビデオは散々あるのでそういう情報は、ハックフェストの場では、我々に特に求められない。これに関しては「英語」のハードルも違うかもしれないし、向こうの人は、基本的にコンピュータサイエンスを出ていることも関係しているかもしれない。だから、プレゼンとか、デモとかの重要度が下がって、「ガチの問題を一緒に解決してくるれる技術イケメン」への需要が高まっているのもうなづける。現にマイクロソフトの本社の「//Build」で多く発表しているのは、プロダクションチームが多く、エバンジェリストではない。(ただ、キーノートのデモとかは、エバンジェリストが作っていたりする)

f:id:simplearchitect:20170618230921j:plain

マネージメントスタイルの違いと技術

 マイクロソフトに入ると、そもそも「コードが書けない」マネージャは、少なくとも私の上には存在しなかった。当たり前かもしれないが、技術のプロジェクトをやるのに、技術がわからなければマネジメントもクソもない。だから、彼らと話をしても、「あー、技術わかってないねんなー」とか「勘違いしてはるわ、、、」と言う場面に全く出会ったことがなく不思議だった。日本ではそんな場面はしょっちゅうなのに。だから、会話もすごくかんたんで、日本で必要な「上司の説得」みたいな場面は必要ない感じだ。

 また、このブログでも触れているように、少なくともマイクロソフトでは、「サーバントリーダーシップ」というマネジメントスタイルが主流だ。チームを「管理」するのは「チーム自身」そして「個人」が実施するので、彼らを「信じて」「任せる」スタイルだ。彼らが困っている時は、マネージャが、サポートしてくれる。だから、マネージャが指示を出すようなマネジメント方法ではなく、チームが考えて、チームが問題を解決して、マネージャがそれを支援するようなスタイルだ。

 この方法は、生産性的に細かい管理が不要になり、意思決定が高速化するので、圧倒的に高く、メンバーもモチベーションも高くなる。だから、マネージャも、我々をリーディングしてくれたりサポートしてくれるだけではなく、メンバーと一緒になってハックフェストをしたりする。リーダーシップではなく、「管理」だけする人はもはや不要だ。

simplearchitect.hatenablog.com

さらなる技術シフト

 マイクロソフトエバンジェリストチームに入るとさらなる「技術シフト」を感じる。先日も、HackWeekという、本社のエバンジェリストがいろいろなものをハックするイベントが開催されたが、その時に、エバンジェリストの長が発した言葉には驚いた。「マネージャであっても、全員L3を取ること」L3というレベルは、お客様の所で、ガチのプロダクションに使えるソリューション(コード)を書いて貢献すること。という意味だ。つまり、日本でいうと、部長も課長も全員お客様の所でコード書いてバリュー出せるレベルになりましょう。ということだ。

 そのエバンジェリストのトップ(日本でいうと事業部長クラス)は、さらに、そのHackWeekで自ら、CosmosDBなどのハックに参加して、彼自身が時間をとってハックをしていた。

 技術の進展はめまぐるしい。だから、少なくとも米国では、マネージメントであっても、最新の技術をハックしていないと話にならない時代が来ているということだ。もちろん米国にも、プレゼンや、デモが強く、そんな技術力が高くない人もまだいるだろう。去年変わったばかりだから。しかし、急激に、マネージャであっても「技術力」のある人が求められているのは間違いない。

 これは、実は米国では顕著だが、日本でも始まっている気がする。だって、そうでないと、これから、自動翻訳もできて、海外との言語の壁が少なくなると、日本マーケットに、そういう技術力が高い人が押し寄せて勝負をすることになる。

simplearchitect.hatenablog.com

そんな時に、どうやって効率が悪いことをやって勝てるのだろう。

f:id:simplearchitect:20170618225748j:plain

じゃあどうすればいいのだろう

 私のように、SIer出身で、若い頃からPMとかコンサルとかやっていた人はどうしたらいいのだろう?自分の当面の目標は、「世界のどこにいてもご飯が食べられるスキル」を身につけることなのだが、私のスキルは、「日本」にのみ特化している。他では現在のままでは食べられない。ポイントは「技術力」だ。これさえあれば、多少英語がしょぼくても、米国でも通用する。

 しかし、現状の技術力を鑑みると、そもそもこの業界を諦めた方がいいのだろうか、とか色々考えた。今は、マイクロソフトを首になるまで、エバンジェリストとしてスキルアップをひたすら頑張るしかないと考えて、なんとか頑張っている。しかし、私は本社メンバーの仲間に比べると、まだまだなので、いつ首になってもおかしくない。もしかすると、多くの日本のマネージャの人も、薄々技術力が必要になることはわかっていても、何十年もコード書いてないし、新しい技術はバンバン出てくるしどうしたらいいのだろうと途方に暮れているかもしれない。私も似たような感じなので、このギャップがここ数年の私の最大の悩みだ。

 プロダクションコードを何年も書いている人に渡り合う為には、自分でチュートリアルをやって、本を読んで自習したところで、到底及ばないだろう。しかし、技術なき人に明日はないと感じる。

Mob Programming の衝撃

 しかし、私は、その解決のための一つのヒントを得た。それは、Mob Programmingだ。Mob Programming はチーム全員が同時に、同じ場所で同じコンピュータを使って同じことをする。1台のコンピュータとプロジェクタ2台を用意して、全員で、1台のコンピュータをシェアして、メンバーがドライバーと呼ばれるキーボードを入力する役とそれ以外の人がどういうコードを書くかを議論するスタイルだ。

f:id:simplearchitect:20170618224052j:plain

 ペアプログラミングを知っている人は、それをチームでやった版だと思うだろう。だから、私も、最初はあまり興味がなかったのだが、実際にMob Programmingを体験したら世界観が一変した。これはものすごいメソッドかもしれない。アジャイルがプログラミングの世界を変えたように、このメソッドがまたプログラミングのやり方を変えるかもしれない。下記のスライドは、楽天の及部さんが発表したスライドでMob Programming とその実際がよくわかる資料なので共有したい。

次の動画は、Mob Programming の提唱者であるWoody の講演

Mob Programming のメリット

 Mob Programming はチーム(たぶん4−5名がベスト)全員で1台のPCなので、従来のマネージャなら、効率が悪いから絶対認めないスタイルかもしれない。しかし、実際にやってみると、むしろ「効率が良く」感じる。よくよく考えると、プログラミングをしていて、最も時間がかかるのは、「悩んでいる」時間だ。何かにどハマりするとか、初めての事、難しい事をやるときに、理解するのに時間がかかるとか。それがMob Programmingでやると、いろんな人が寄ってたかって、いろんな目線で解決を考えるので、詰まったり、ハマったりする事がなく、異常に早く終わる。ペアプログラミングも良かったが、その時とMobとの最大の違いは「心理的安全」かもしれない。

心理的に安全を感じること

 プログラミングをやる時に、現在では毎日のように「未知の技術」に向かわないと いけない。新しいことを覚えて熟練して使えるようになるには時間がかかるし、知らない技術をやらないといけない時は、自分にできるだろうかとか不安になる。先の及部さんと、ラッキーなことに、Mob Programming を体験させてもらえる機会を作っていただいた。

 Mobに最初に参加して衝撃だった一言がある。4人ぐらいのMobを常に実践しているチームがいて、彼らが、PHPを書いていた。彼らが、「Mobに加わりなよ!」って言ってくれたのだが、私は「わしPHP一秒も書いたことないねん」と言った。本当にそうなので。とても、貢献できると思えない。 

ところが彼は、「あー、この前〇〇の会社さんが来て、Mobに参加してコードかいて帰ったけど、彼らもPHP知らんけど、コード書いて帰って行きました」言っていた。

知らない言語でプロジェクトにいきなり貢献する衝撃

 自分が何も知らないチーム、そして知らない言語で構成されたプロジェクトに参加して、初日からコードを書くなどというのは、想像もできないが、Mobではこれが発生するようだ。しかも、続けて彼は言った。

そもそも、俺も、PHP初めてなんですよ」

えーーーーーー!彼曰く、

「Mobだと自分が知らなくても、他の人が知ってたらなんとかなるので、とっても気楽ですね」

 結局私もその日Mobに参加して、コードを書いて帰って来た。コードを書いている時も、不安が何もなかった。だって、自分が知らないこと、遅いことも、他の人がカバーしてくれるし、わからなかったら全員で調べてくれるので早いし、たとえつまづいたとしても、「あー、わからないの俺だけじゃないんだー」と言うことがわかる。つまりむっちゃくちゃ安心感があるのだ。だから、1日終わると、しっかりバリューもでるけど、すごく幸せて楽しい気分で帰ることができた。

Mobの効果はそれだけにとどまらない。

問題 vs 私たちで、問題をフルボッコにする

Mob Programming を実施するとかなり心理的に負担が少ない。今までは自分が初めてのテクノロジーに触れるときは慣れないので、最初に相当ハマることは覚悟しないといけない感じだが、Mob Programming でやると、触れたことのない新しいテクノロジーも全然怖くない。自分のチームに誰か知っている人がいたらものすごくスムースに新しいことを学べる。全員その技術をしらなかったとしても、「あー、知らないのはわしだけじゃないんだ!」と気楽に取り組める。それでも一人でやるときよりよっぽど早いし、ストレスもない。

 なんでかなと考えると、普通の問題だと、一人でハックをしているときは、問題1に対して人間1で1対1の勝負をしている感じだが、Mobだと、問題1に対して例えば人間4なので、問題をよってたかって、フルボッコという感じなので、大抵の問題はボッコボコにできる。

何より楽しい

私は、楽天さんで、Mob Programming を常に実践しているチームがあり、そこにお邪魔させてもらって数回体験させてもらった。理屈抜きに最高に楽しかった。マイクロソフトに帰ってからも、先の「ハックフェスト」を実施するときに、Mob Programming でやってみましょう!と提案してみた。お客様と、マイクロソフトエバンジェリストと Mob Programming をやってみた。最高に詳しいエキスパートがいたこともあり、私が初めてのXamarinの開発であっても、コーディングに参加することができたし、挙動やアーキテクチャもずっと楽に理解できたし、ディスカッションもすることができた。他のメンバーも、Mob Programming を実施して本当に楽しかったという話をしてくれていた。最後にお客様から聞いたハックフェストの感想でも、Mob Programmingへの絶賛にあふれていた。楽しさは、正義だ。

f:id:simplearchitect:20170618230241j:plain

暗黙知を共有できる

 次に暗黙知の共有だ。通常の技術獲得の時に、本を読んだりチュートリアルをしたりすることでは得られない部分が実際のプロジェクトで活躍するためには重要だ。ちょっとした「思考回路」だったり、「ツール」だったり、「ショートカット」かもしれない。どういう習慣で、開発をして、名前をつけて、どうやってコミットログをつけるか。

 これらの形式化できない「暗黙知」は通常自分が長年かけて積み重ねて、得られるものだけど、Mobだと、他人がどのように、考え、行動するのかを共有できる。これは体験してみないとわからないかもしれないが、相当協力だ。普通こんな機会はない。凄く技術的に優れた人がどういう考えで、どういう手順でコードを書くのか。これを共有できることは、チームのレベルアップの上でも最強だ。

詳細な管理が不要になる

 さらに、マネジメントの観点でも革命的なことがある。先の Mob Programming を実践し続けている楽天チームのメンバーが語ってくれたことだが、「タスクを管理する必要がない」なぜなら、常に一緒に作業をしているので、他の人が何をしているか?という情報交換や、シェアの時間が必要ないのだ。この工数はバカにならないし、伝わらない。それぞれがやったことを「レビュー」しなくても、そもそも常にレビューしている感じだから、そんなことも必要ない。

 彼らの壁にタスクKanban が張り出されていたが、「それはもう使っていない。Mob をやり始めてからいらなくなった」とのことだ。これって、実はものすごい事じゃないだろうか?もう細かい管理など必要ない。アジャイルやDevOpsの時代からすでに不要だったが、それを上回るほど管理が必要なくなってくる。

マネージャが本物の技術スキルを身に着けるためにも Mob をする

 Mob Programming はチームのためであり、マネージャのためのものではない。ただ、チームが Mob Programming に移行すると、私や、今まで技術をあまりやっていなかったマネージャで、本当に技術を今から身に着けたいと思っている人にも最高の仕組みだ。

 今まで自分が「管理」していたチームが Mob Programmingに移行して、自分が指示するかわりに、チームが全員で意思決定して、Mob Programming を実施すると、細かい管理は不要になる。その工数をどうしたらいいかというと、リーダーシップと、自分もMobに参加するようにしたらいいのだ。

 例えば、技術を本気で学びたい人がいたとしたら、自分で本を読んでコードを書いたり、チュートリアルはやるだろう。しかし、それでも「プロダクション」のコードに対応するためには、「現在のアーキテクチャによる本番でコードを書いて運用する経験」が必要になってくる。これは「独学」では体験できないし、体験したければ、技術力を身に着けるしかなく、卵が先か、鶏が先かという話になってしまう。

Mob Programming が日本の技術力不足を解消するかもしれない

 しかし、Mobであれば、自分で勉強は必要だが、Mob Programming に参加できれば、かなり心理的障壁低く、本物のプロジェクトに参加することができ、今の技術でどういうコードを書けばいいかも理解できるようになる。しかもかつてないほど参加への障壁が低い。日本では私含めて、実際こういう人がとても多いと思う。やる気は必要だが、そういう人が仕事をしながら「技術力」を身に着けるための、最高の方法なのではないかと思う。そして、自分のチームの技術を理解できるのだから、リーダシップを発揮したり、チームを助ける際も的確な行動がとれるようになるだろう。簡単ではないが、日本がソフトウェア技術的にも優秀になるためのチャンスがここにはあるのかもしれない。チームからしても、一人モブに加わったからといって生産性を損なうとかないので、この目的で考えると最高のツールだと思う。

simplearchitect.hatenablog.com

おわりに

私も今後は、楽天さんで教えていただいた Mob Programming をより実践して日本が、自分が世界でも勝てる方法を継続して探っていきたい。メソッド屋としては、最高にワクワクする方法を体験できて最高に幸せだ!是非皆さんも試していただきたい。

 私、もしくはマイクロソフトエバンジェリストのメンバーと、世界で誰も解いてない問題を、Azureで解決したいと思う方は是非私とハックフェストをMob Programming の形式で実施して、その威力を味わっていただきたい。楽天の先ほどのメンバーは現時点で日本最高のMob実践チームだ。NECの方面でも実践しているチームがあると聞く。皆様も是非 Mob Programmingの威力を実感していただきたい。Mob Programming でこの業界を変えよう!