君はJeff Deanみたいになりたくないか?
効率的に働くエンジニアになるためには
まずはレバレッジを意識しよう。
この画像から学んだことを整理する記事です。
読み終わって、自分に照らし合わせることができれば、仕事の効率は劇的に向上するでしょう。
さあ、レバレッジという考え方はこうだ。
その仕事を通して与えたインパクトを投資した時間で割ったものがレバレッジとする。
彼は、Quoraを辞めて2年ほど
エンジニアが高いレバレッジを出すにはどうしたらいいかを問い続けた
Facebook, Google, Airbnb, Lyftなど様々な規模の成長企業のメンバーから情報を集めた。
その集大成として、本を出した
https://www.amazon.co.jp/Effective-Engineer-Engineering-Disproportionate-Meaningful/dp/0996128107
それでは投資効果の高い、つまりはHighレバレッジの5つの活動内容を紹介していこう
Contents
1、もっと良い学習方法を身につけること
1, Optimize for learning
キーポイント
・キャリアの変更も本も書くことも、学習効率をあげるとわかったから実施してきたと云う
・学習効果は複利で増える。(まさに投資と一緒ですね。) 1.01 ** 365 = 一年で人は37倍成長できる
Boxのエンジニアディレクター Tamar Bercoviciは言いました。"Own your story"
どいう意味かというと
自分の学習と成長に当事者意識を持て、何かいいことが向こうからやってくることを待つな、ということです。
何かいいことっていうのは
本を読むこと、クラスに参加する、コードを書く、ブログを書く、サイドプロジェクトをやる、とか行ったことです。
じゃあ、
どうやって1%成長を続けることができるのか?
そのキーは習慣にあります
2、繰り返す作業にはツールを書け
2, Invest in your own iteration speed
元facebookディレクターのBobby Johnsonは”私の知っている成功しているエンジニアは全員、たくさんのツールを作っていた"
こうして
平凡な作業にすることに時間を掛けよ
重要なので繰り返すが、これは平凡に見えるが、かなり効果的な投資である。
証拠に、大きな組織であるGoogle, Facebook, Twitter, Linkedin, Dropboxにはツールを作るためだけのチームがあるくらいだ。
かなりいい経験則(Good rule of thumb)としてTwitterでインフラチームを50名から450名に成長させたRaffi Krikorianはいいました
"二回以上おなじ手作業を行ったら三回目はツール書いて、それで自動化しましょう”
あなたのプロジェクトで
何が開発サイクルのボトルネックになっているのか考える時間を持ちましょう。
ここでは反復作業にテコ入れする考えを伝えてきた、
ここで考えておきたいのが、何にテコ入れするかだ。当然、より良いことに注力すべきだ。そこで次にあげるHighレバレッジな活動は
3、そのアイデアをなんども積極的に多角的に検証すること
3, Validate your idea aggressively and iteratively
このことは去年、20億ドルの利益を達成したオンラインでハンドメイド商品を得るEtsyから学べる。
Google画像検索みたいにインフィニートスクロールを数ヶ月かけて実装したが、
直前のABテストで結果、ページビューで10%悪くなり、購買率は25%も落ちることが分かって、数ヶ月の投資がオジャンになった。
だから仮説をいかに簡単に試すかがキーだ。
前の例で言うと
一ページにより多くの商品を見せればいいんじゃないか?はページ一枚の検索結果を増やすだけで簡単に試せる
それに教訓を得たEtsyの次の戦略は功を奏した
商品ページを徐々に変更していく、というものだ。
まずは14の仮説を立てることから初めて、
それぞの仮説をそれぞれ、検証できるテストに落とし込み、一つづつ効果を見ていくということを繰り返した。
これが味噌だ。
当時のEstyのVPプロダクトエンジニアリングのMarc Hedlundはこれが購買率を高めた唯一のプロジェクトだった
という
Experiment-driven product designはかなり強力だ
重要なのは、繰り返し検証するkと。
大きな問題を小さな仮説検証可能なタスクに切り分けることができれば、事はかなり前に進む
この仮説検証(PDCA)を繰り返すううちに
何が効いて
何が効かないのか
という知見を貯めることが重要で、それによって自信もつく
だからこそスタートアップでMVPはよく使われるのです。
SquareのエンジニアリングマネージャーZack Brockはよくエンジニアに問いかけたそうです。
"このプロジェクトで君が一番恐れていることはなんだ?そこってよくわかってなくて、一番リスクが高いとこだから、そこからまず始めよう"
というものです。
これは、後になっての逆戻りを防ぐために有効な考え方のテクニックですね。
プロマネが持ってそうな心得ですが、是非エンジニアも覚えておいてください
まとめですが、次の二つがポイントです。
1、どうやって仮説検証可能なタスクに落とし込めるか?
2、どうやったら前もって、安くその案を検証できるか?
この二つのことを実践すれば
後の数ヶ月を無駄にすることがなくなるので、かなり効果的な、Highレバレッジな活動と言えるでしょう
他に、無駄な時間を省くことができる活動として
4、運用の負担を最小化すること
4, Minimize operational burden
Facebookに2012に買収されたInstgramですが当時4000万人のユーザーを運用していたのはたった5人のエンジニアでした
これってかなり効率的なチームとしか言いようがないですよねw
どうやったらこんなメンバーでを回せられるのでしょうか??
Instagramの共同創設者のMike Kriegerは次のように言っています。
"Do the simple thing first"
簡単なことから始めよう
会議で誰かが、何か素晴らしい昨日をプレゼンしてきたら次の問いかけをするようにしたのです?
「それって一番簡単な方法かい?」
なぜなら、複雑な機能は今後のプロジェクトを炎上させる火種になるとも限らないからです。
だからこそInstagramの創業チームは複雑性を、完全に排除することを徹底したそうです。
AirbnbのMike curtis やLyftのCTOのChris Lambert をはじめ
有名なエンジニアリーダーたちはこぞって次の教訓を持っています。
「もっと簡単に作っておけばよかった」
と。
複雑性は隠れたコストである
ということに
みんなはあまり気づけないんです。
複雑性を取り込むってことは、知らない間に税金を払う対象を増やしているみたいな感じです。
税金っていう例えが適切じゃなければ、借金と言ってもいいですね。
(ただし、複雑性がもたらす将来の利益が借金を上回ることがわかっていれば、当然、会社としてはGoだろうね)
税金の内容は
コードの複雑化によるメンテナンスコスト
システムの複雑化による運用コスト
プロダクトの複雑化による戦略コスト
リソースの複雑化による組織の無駄な肥大化によるコスト
そして最後のHighレバレッジな活動は
5、良いエンジニアリングの文化を作ること
5. Build a great engineering culture
Edmondはたくさんのエンジニアのインタビューを行ってきたが
候補者にいつも聞く質問がある
「前職で一つだけ好きなエンジニアリング文化は何でしたか?反対に嫌いな文化は何でしたか?」
と言う。
この質問に対するたくさんのエンジニア(候補者)からの回答は
エンジニアがどんなこと・文化を望んでいるか、という答えが見えてくるはずだ。
それで見えてきた答えは
”エンジニアはHighレバレッジな活動することを望んでいる”
つまり
効率的な学習をして、効率的なツールを利用して、ちゃんと意味のある無駄のない製品を作るという活動だ。、無駄な運用は大キッライダ。
と言う意味で
Googleは素晴らしいエンジニアリング文化を持っている、と言う点でとてもいい環境だ。
でも、この文化形成はチームレベルで始められる
(もちろんチームレベルの前にはあなた自身がこの文化を持っている必要はあるが)
チームに問いかける
「このチームでHighレバレッジな活動として何から始められるだろうか?」
というものだ。
チームの学習効率をあげるのはどうしたらいいだろうか?
効率的に無駄を省くにはどんなツールが必要だろうか?
何ヶ月も続くプロジェクトなら、どんな問題をどう細分化して、仮説検証可能なタスクに落とし込めるだろうか?そしてそれをどう検証できるだろうか?
どうやれば複雑性を排除できるだろうか?
こんなことを繰り返し、チームで考え、実践していくことで良いエンジニアリング文化は形成できるのではないだろう。
それを体系立てて行けば、新しく入るエンジニアはより早くチームに生産性をもたらすだろう。
以上
聴衆からの質問と回答Q&A
Q:UnitテストってHighレバレッジな活動だというけれど、Unitテストをメンテするコストも結構かかるしレファクタリングしたりしたらUnitテストも変えないといけないし、若干生産性を下げるような面もある。それでもUnitテストは大事という理由を教えてください。
A: いい質問だね。Unitテストって100%する必要はないと思う。重要なのはどんなUnitテストがHighレバレッジか?と考えて書くこと。たくさん実行されるコード、たくさんのエンジニアが触るコード、リスクが高そうなコード、このあたりにテコ入れするのが良さそうだね。
考察:Highレバレッジな活動の中の作業自体も盲目的に取り組むのではなく、どのなことがよりHighレバレジなタスクか?考えながら取り組むということが大事
Q:組織の複雑化って大きな会社、例えばGoogleとかでも避けられないのでは?
A:データからの真実を元に戦略を組むことが大事かな。そんな自問を繰り返し複雑化へのパスから早めに軌道修正する。他の方法は決定者に、その決定事項の目的とミッションと集中すべき活動を聞くことで、複雑化は避けられます。
考察:部下が同じ方向を向いてないとそれは複雑性を生みそうですね。でもこれは本当に難し問題でどこの会社でも起こっていますね。リーダーがこのことを念頭に日々働いているかが一つのキーですね。
A: エンジニアからエンジニアマネージャーになる時、メンターすることがどうのようなレバレッジになるのか?あとはコードが複雑性を持っている時、スプリントの一回は前向きなリリースではなく、レファクタリングに使わせてくれということをどうやってマネージャーを説得したらいいですかねー?
Q:メンタリングはHighレバレッジな活動です。Quaraでもメンタリングプログラムに1年以上取り組みました。少しの時間をさくだけで、新しいエンジニアはとても大きな成果を出したりしますので、メンタリングは効果的です。
次に、技術的負債をどう説得してコストをかけさせるか?ですが、これは毎回説得するよりももう、最初から定期的にソースのクリーナップのコストを取っておくのが賢いやり方です。
【新品】【本】ゼロから作るDeep Learning Pythonで学ぶディープラーニングの理論と実装 斎藤康毅/著 価格:3,672円 |
エリック・エヴァンスのドメイン駆動設計 ソフトウェア開発の実践 (IT architects’ archive) [ エリック・エヴァンス ] 価格:5,616円 |
◆◆スゴ腕のITエンジニアになる ITエンジニアの“今”と“これから” / 武藤祐一郎/著 / TAC株式会社出版事業部 価格:1,728円 |