超巨大クラウドのシステム開発現場を行動観察。ガチ三流プログラマが米国システム開発の現状をリークする話(1) Regional Scrum Gathering Tokyo 2022

2022年1月18日

代表的なアジャイル開発手法であるスクラムをテーマにしたイベント「Regional Scrum Gathering Tokyo 2022」が、1月5日から7日までの3日間、都内およびオンラインのハイブリッドで開催されました。

そのクロージングセッションとして行われたのが、現在シアトル在住でMicrosoft Azureの開発を担当している牛尾剛氏による「アメリカの超巨大クラウドの中の人に転生したガチ三流プログラマが米国システム開発の現実をリークする話」です。

本記事ではほぼ90分におよぶセッションの内容を、前編後編(1)後編(2)の3本に分けて紹介します(この記事は後編(1)です)。

前編では、子供の頃からプログラマに憧れながらもプログラマとしての能力が認められず、アジャイルコーチなどを経てマイクロソフトに就職。社内転職でMicrosoft Azureの開発部門のプログラマになった牛尾氏。この後編では、自身の視点でアメリカと日本の開発現場の違いを語ります。

アメリカのガチのシステム開発現場を行動観察

ここからが今日の本題です。

元アジャイルコーチとして、アメリカのガチの、ガチのシステム開発現場に、言うたらエスノグラフィ(行動観察調査)をしてるようなもんです。三流プログラマながら。

そういうリファレンスみたいなことをお伝えしたら、皆さん(Regional Scrum Gathering Tokyo 2022の参加者)が喜んでくれるかなとか思って、内容を構成しています。

ただ、僕が知っているのはマイクロソフトだけですし、自分の職場だけなので、主語が大きすぎるとか、そう言うのはやめてください。心が傷つくから(笑)

そういうのを踏まえて聞いてください(笑)。全部一次情報で、人から聞いたものではないです。ちょっとだけマネージャ関連のところはマネージャに聞いたところもありますが、基本的には自分が経験したことのみで構成します。

ウォーターフォールは使われていない

まず滝。ウォーターフォールがどれぐらい使われてるのかって話ですけど、これは簡単です。ゼロパーセント、本当に見たことないです。

fig

だからといって本当に素晴らしいスクラムをみんなやってるかっていうと、そうでもない。どれぐらいプロセスに対してマチュア(成熟)かはチーム次第なんだけど、少なくともイテレーティブじゃないのはないし、アップフロントデザイン(開発前の仕様策定)を大量に時間をかけてやってるというのもない。

デザインドキュメントっていうのを書く人もいれば書かない人もいて、書く人が多いですけど、書いても5ページぐらい。

何年か前にサム・グッケンハイマーというDevOpsで有名な人が日本に来たときに日本のお客さんに「ウォーターフォールとアジャイルのメリットデメリットを教えてください」って聞かれて、彼が「ウォーターフォールは全くメリットがないのでやめておきなさい」って言い放って。

僕が当時そのことをブログに書いたらすごい炎上しましたけど。

分かります。誰も使ってないんだから。やっぱりもうやめといた方がいいですよね、正直話無理があります。

開発者それぞれが責任を持って設計し実装する

次は、僕のチームがどんな感じで運用されてるかっていうお話をします。

マイクロソフトには統一プロセスとかなくて、基本的にチームをどう回すかはチーム次第なんですよ。でもだいたいみんな似たような感じでやってると思います。

基本的にはスモールチームです。どんな大きなプロジェクトであっても、スモールチームの集まりって感じです。

自分のチームについては、これがよいやり方かは分からないですが、個人商店みたいなもので。「IC」というのはIndividual Contributorですね、開発者。

fig

マネージャからアサインされるバックログが基本的にはふわっとしているので、ICがそれを明確にします。

ICが仕様を自分で明確化して、自分でデザインして、インプリメントする。だからそれぞれがレスポンシビリティを持っていて、それぞれが実装をする。

ただ、同じマイクロサービスをメンテする役割の人みたいなのがいて、それは「Buddy」(バディ)みたいになっていて、僕の場合は例えば「スケールコントローラー」っていうのを開発していますが、スケールコントローラーのチームでバディになってると、質問というかお互いに話が聞きやすい。すぐに答えてくれやすいですね。

他のチームとかになると、ちょっとバリアがあって。やっぱりみんなそれぞれの仕事をやっているので、プライオリティがそれぞれあるんですよ。だから違うチームの人になると意地悪じゃなくて彼らのレスポンスは1日に1回とかになったりするわけですよね。仕方がないことです。

多分このチームの単位はマネージャが管理できる最大以下の人数で構成されてるんじゃないかなと思います。だから本当に自分のチームはそれぞれが個人商店みたいな感じですね。自分でレスポンシビリティを持って自分でやる。それは新人であっても一緒です。

司会)ここでちょっと会場から質問が入りました。このチームというのはどういう単位なんでしょうか。プロダクトの単位なのか、どういう単位なのか。

(右下の点線で囲われたところ)このチームはスケールコントローラをやっていて、(右上の3つのICを指して)このあたりはプラットフォームと言って中の基盤みたいなことをやってたりします。

でも基盤もかなり巨大なので、内部でいくつか分かれているんですけど、同じマネージャが見て、みんなを助けている、という感じですね。

司会)隣のチームと、このチームを分けているのは、マネージャが違うだけ?

ええと、大きな機能で分かれているというのがあります。例えば隣のチームはランタイムっていうチームなんで、Azure Functionsのランタイムを担当してるんですよ。

給料を上げるのは他人との競争ではなく自分との戦い

さて、エンジニアの評価っていうのはどんな感じになってるかっていうと、この図にはマイクロソフトは入っていないのですが、僕の友達に「ゆうさん」っていう人がいて、彼がブログでGAFAの給与体系みたいなをまとめてくれて、マイクロソフトも似たような感じです。

参考:GAFA米国本社のエンジニアの年収をジョブレベル別に比較してみた【Google・Amazon・Facebook・Apple】

この図がまさに僕が言いたいことなので、この図を使います。

fig

こういう情報って外部に公開されてるので別に隠すことはないし、マイクロソフトの給料の額とかも調べられるんですよ。

どういうふうになってるかっていうと、エンジニアとしてランクがあるんですよね、「SDE1」「SDE2」とか。マイクロソフトの場合は「シニアソフトウェアエンジニア」があって「プリンシパルエンジニア」がある、みたいな。

このランクの人はこういうことができる、っていうのが明確に定義されていて、それによって給料が決まるんですね。

だから自分が給料を上げたかったらどうするかっていうと、プロモート(ランク上げ)してもらえるように頑張るって感じです。他の人との戦いじゃないんです。

いまより一つ上のランクの仕事をしばらくしていれば、マネージャが「こいつは今はシニアだけどプリンシパルの仕事してるからプロモートしよう」とノミネートしてくれる。

そうやってノミネートされたら次のレベルに行けるし、行けなかったら転職をする。転職するとそこでネゴシエーションしやすいので、その時に例えばシニアとかプリンシパルになれればその給料がもらえる。

ただ、そういうふうに上に行くとレスポンシビリティも大きくなるので、自分でチョイスする感じですね。自分でチョイスするし、自分との戦いなので。だから他の人と比べて不公平とか全然思わない。

給料を上げたかったら次のレベルになればいい。そういうアクションをとればいいので、あくまで自分との戦いって感じになります。

マネージャが自分の仕事やキャリアを助けてくれる

マネージャの存在っていうのは僕的にはすごい(日本と)違ってるように感じています。

日本にいるときはマネージャって進捗管理や課題管理をしたりとかして、プログラマとか開発者を指揮するとかそんなイメージだったんですかね、僕のイメージとしては。

アメリカの場合は、彼らが重視してくれるのは僕のキャリアなんですよ。僕がハッピーかどうかとか、僕がキャリアで成功するかっていうのをすごい重視してくれるんです。

fig

これまで何人かマネージャが変わりましたけど、みんなそうでした。マイクロソフトには明確にそう定義されているんです。だからマネージャはみんなそういう動きをしてくれます。

マネージャの大事な仕事「アンブロック」

マネージャのすごく大事な仕事に「アンブロック」というのがあります。IC、つまり開発者の人がどこかで詰まっている状態になると、マネージャが助けてくれる。ブロックされているものをアンブロックしてくれるんです。

fig

例えば、僕が技術的に詰まるとして、誰かに聞かなあかんけど、誰か聞かなあかん人がなかなか答えてくれへんとか、そういうこともあるかもしれないです。

そういうブロックをされる状況が一番生産性を阻害すると思うんですね。

そういうときにマネージャがアンブロックを手伝ってくれる。ある人に繋いでくれたり、マネージャ経由で他の人が僕に協力してくれたりとか。

マネージャが、このプルリクエストを見たら分かりやすいよと教えてくれるとか。

基本的に納期の設定はない。マネージャも急かさない

あと結構面白いのは、少なくとも今の僕の職場では、納期が基本的にない感じです。

fig

あるときもあるんですよ。どんなときかっていうと、マイクロソフト最大のイベントの「Build」というのが5月ぐらいにあって、そのキーノートで発表される予定のプロダクトみたいなもの。それが決まったら納期があるのかもしれないですけど。

基本的に納期的なものはなくて、できたときが終了なんです。

マネージャも僕に対して「早くしてください」って言ったことは1回もないですね。どっちかというと、僕が「何か遅くてごめんな」とか言ってたら、「いやそんな気にすんなよ」って、「よくあることだよ」とか言われたりする。

これは多分いろんな意味合いがあるんですよね。多分クラウドのプラットフォームって、難しいことがいろいろあって、例えば自分が1週間でできるって思ったのに2カ月かかったりとか、ほんまにあるんですよ。

例えば、JVMにあるJarをアタッチするだけに見えた仕事に、僕は半年かかりました。

僕の能力のなさもあるかもしれないですけど、そういういろんな予想外のことが起こる。

やっぱり世界中の人が使うプラットフォームなので、よく分かってない実装とかしたらむちゃくちゃになるんです。ちゃんと理解して、より良いアーキテクチャを作らないとひどい目にあう。

だから多分マネージャは絶対に急かさないんだと思います。ちゃんと理解して出来るようになれば、次からは開発が速くなる。だからマネージャとしてはそこで急かさないことによって未来への投資をしてる感じなんじゃないかなと、僕は思ってます。

バックログはあり予定もあるが、達成されないこともしょっちゅう

司会)すいません、マネージャの話しに行く前に。質問が集まっていて。納期がないという話に関して皆さんが大混乱に陥っていてですね(笑)。納期がないとすると逆に何があるのか。バックログみたいなのがあるのか、ロードマップがあるのか。どういうものを始点に駆動されていて、牛尾さんの仕事が始まるのか。

バックログですね。大きなトピックだけはある。今期はこれをやろう、というのはあるんですよ。

だいたい今期はこれとこれをやっていこうというのがあって、それを荒い粒度ですけどブレイクダウンしたストーリーにして、それをICにアサインするんです。

でも、それが今期に達成されないということはしょっちゅう起こります。

思ったよりもすごく難しかったとか、あるシステムで改変が入るのでそれまで作れないとか、そういうのがしょっちゅうある。でもそれでそのICが責められることはないです。

変化は見通せないので仕方ないですよね。オーガナイズはされているけど、できなかったときはできないと認める、ということです。

司会)お客様からバックログの元になるような要求がきて、それがリリースされるまでのタイムスパンはどのくらいなんでしょうか?

僕らの場合はプロダクトオーナーみたいなチームとしてプロダクトマネージャがあって、バックログの発生元はプロダクトマネージャが決めるのですが、そのインプットソースとしては、彼らの戦略(ストラテジ-)とカスタマフィードバックですね。

あとはハッカソンでエンジニアがなにかプロポーズするときもあります。

そういうもののなかからプロダクトマネージャが、今期これをやればインパクトがあるんじゃないかと考えるものがピックアップされます。

で、それが達成されてリリースされるまでの期間は本当にピンキリです。

僕の場合は、早いときは1週間で終わりましたけど、さっきの話みたいに1週間で終わると思ったやつが半年かかったこともあります。

僕の上司で僕よりもプログラミングができない人はいない

ではマネージャの技術力の話に進みたいと思います。

僕の上にはプリンシパルマネージャがいるんですね、それが日本で言ったら課長みたいなもので、その上に部長みたいなのがいて、で、テクニカルフェロー、これは事業部長みたいな感じです。

彼らの技術力はどんな感じか。

僕の1つ上の上司は、Azure FunctionsのJavaランタイムをイチから書いた人です。

その上の人は、Azure Automationの開発をしている人で別チームなので細かいところまでは知らないのですが、技術力がハンパない、ということだけは分かります。

何でかと言うと、どんなテッキーな話題を振っても、ものすごく早く深く理解するんです。彼が経験したことのないことであっても、Kubernetesでも、彼がやったことのないPythonとかでも、完璧に理解してアーキテクチャの深い話をするんです。

給料が高くて当然だと思いますね。

fig

で、テクニカルフェロー。これはAzureの主要なサービスをイチから書いていたりします。

つまり何が言いたいかというと、僕の上司で僕よりもプログラミングができない人なんて一人もいないんです。

そしてこういう人が僕の仕事のサポートをしてくれる、応援をしてくれるわけです。

だからこんな上司に何かを説得する必要なんてないんです。彼らがテッキーなミーティングに参加して、しかも僕らにすごい鋭いアドバイスをくれるんですよ。

皆さんがもしマネージャをやるときには、こういう人たちと世界で戦わないといけない、ということをちょっと意識していただきたいんです。

≫次の記事に続きます。次の記事では、日本と米国のエンジニア層の違い、イノベーションの背後にあると思われるもの、そして会場からの質問などに答えていきます。

関連記事

2016年に行われたエバンジェリスト時代の牛尾さんの講演も非常に大きな反響がありました。あわせてお読みください。

Regional Scrum Gathering Tokyo 2022

このエントリーをはてなブックマークに追加
follow us in feedly


関連タグ Microsoft Azure / クラウド / 働き方 / 給与・年収 / Microsoft



タグクラウド(β版)

クラウド / AWS / Azure / Google Cloud
コンテナ / Docker / Kubernetes
クラウドネイティブ / サーバレス
クラウド障害 / 運用・監視

プログラミング言語 / 開発ツール
JavaScript / Java / .NET / WebAssembly
HTML/CSS / Web標準

アジャイル開発 / スクラム / DevOps / CI/CD
ソフトウェアテスト・品質
ローコード/ノーコード開発

データベース / RDB / NoSQL / 機械学習・AI
Oracle Database / MySQL / PostgreSQL
Office / 業務アプリケーション

ネットワーク / HTTP / QUIC / セキュリティ
OS / Windows / Linux / VMware
ハードウェア / サーバ / ストレージ

業界動向 / 働き方 / 給与・年収
編集後記 / 殿堂入り / おもしろ

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed


最新記事10本