BLOG
いかにして優秀なエンジニアになるか パート1:レバレッジの向上

投稿:2018年3月7日   |    更新:2022年5月19日

PagerDutyで私達は個人としてもチームとしても日々勉強に励んでいます。具体的には、事後分析、コードレビュー、過去の見直し、SlackやJIRAでの議論、ヘルスチェック調査などです。さらに、インタレストグループに参加したり、スプリントレビュー、テクニカルトーク、ブログを読いんだり書いたりする機会もあります。

エンジニアとして、私たちは非効率なコードをリファクタリングし、技術的な欠陥に対処し、ワークフローを改善しようともしています。このように多くの仕事をしている(これとは別のスクラムチームでやっている製品やインフラストラクチャの仕事もある)ので時間をどのように管理するかが重要です。たとえば、どのプロジェクトが他のプロジェクトより優先されるべきか、その理由は何か? 目標に向かってより効果的に進めるため、私たちは何をすべきか?

これらの質問に答えるには、当面の仕事のレバレッジを評価する必要があります。Edmond Lauの効果的なエンジニアによるとレバレッジとは「投下された時間当たりの生成された価値またはインパクト」というシンプルな方程式で定義されています。

leverage

言い換えれば、ハードに働くことは効果的に働くことと同義ではありません。それは仕事が生産的なのか、ただ忙しくしているのかの違いです。それを知るための別の方法は、エンジニアリングのROIです。私たちが取り組むべき仕事は無限にありますが、私たちの時間とリソースは限られています。効果的であるということは、最小の努力で最大の価値を生むものに取り組むことを意味します。「結果の80%は20%の労力から生まれる」―Pareto Principleとも呼ばれる80-20のルールが当てはまります。

どうすればレバレッジを高めることができるか

元IntelのCEOであるAndrew Groveは著書「High Output Management」で、レバレッジの総量―時間単位で生産する価値―を高めるためには、3つの方法しかないとしています。

  1. 一定の活動を完了するのにかかる時間を短縮する
  2. 特定の活動のアウトプットを増加させる
  3. レバレッジがより高い活動に移行する

日中は、会議、メールのチェック、Confluence/コメント/ブログの読み書き、Githu/Confluenceへのフィードバック、Slackディスカッションへの参加、デザインスプリントなど、さまざまな活動が行われています。しかし、あなたが何をしているのかに関わらず、あなたのレバレッジを向上させるために次のことを自問してみましょう。

  1. どうすればこの活動を短時間で完了できるか
  2. どうすればこの活動によって生み出される価値を高められるか
  3. より高い価値を生み出せるものが他にあるか

以下にいくつかの例を示します。

ミーティング

会議をより効果的にするために、以下の質問について考えてみてください。

  1. この会議に1時間かける必要があるか。30分で済ませられないか。それとも15分内のほうがいいか
  2. 会議の目的を全員が理解しているか。出席者は何か準備する必要があるか。彼らは事前に何かを読んでおくべきか
  3. この会議は必要なのか。Slackやメールですませられないか

電子メールとSlackのチェック

メールとSlackの設定は個人ごとに異なります。メールのチェックと返信に価値があることは否定できません(Slackのメッセージを読み、アップデートし、コラボレーションすることも同じ)。だが、これらはどんな点でそのリターンを低下させているのか。言い換えれば、これはいつから私たちの生産性の阻害要因になったのでしょうか。

1日を通して絶えず割り込みがかかる中で、この競り人の速さでコードを書けるマインドセットを持つことは難しいかもしれません。たとえば、私はコミュニケーションツール(メール、Slack、JIRAなど)で頻繁にチャットをしながら、Command + Tabでアプリケーション間を行き来したり、Chromeののタブからタブへとスイッチしたり、そしてコードを書いたりと、落ち着かない働き方をしています。しかし、私は正面を向いてロックインし、レーザーのように集中できる割り込みなしのコーディング時間―私が言うところのディープワークを、1日に少なくとも2〜3時間取れるようにしています。

Deep Workの著者であるCal Newportは、それを次のように定義しています。

「途切れのない十分な集中力で行われる専門的な活動は、認知能力を限界まで押し上げる。その努力は新しい価値を創造し、スキルを向上させる。それは簡単には真似できない」

私はまた、心理学者Mihaly Csikszentmihalyiによって造られたflowと呼ばれるコンセプトを聞いたことがあります。flowを経験した人々は、flowのことを「何の努力もせずに、時間の感覚や自己の存在、自分の問題も忘れるほど集中できる状態」と表現しています。

ディープワークをしている時、私はSlackのスヌーズ機能を使用しています。これで設定した時間は通知が抑制されます。その後、きりのいいところで何も起こっていないことを確認するため定期的にSlackをチェックします。

slack

エンジニアは最大限仕事を頑張って、効果的な結果を果たしていると私は信じており、人には1日に少なくとも1時間か2時間は仕事に集中し、より生産的であるかを確認するよう勧めています。この時間を通常の集中していないコーディング時間と混同しないでください。理想的には、私たちは一日中コードを書くべきですが、散漫で集中していないコーディングと中断のないコーディングとは違います。私がディープワークと言う時は、途切れることのないコーディングを指します。

あなたが作業している現在のJIRAチケット

Jiraチケットがすでにプロダクトオーナーによって優先順位付けされており、ストーリータイムとスプリント計画プロセスを経ていると仮定すれば、それをもう一度見て、そのレバレッジを高めることができるかどうか考えましょう。次の3つの質問でそれをチェックしてみましょう。

  1. どうすればこの活動を短時間で完了できるか

既存のライブラリを利用できるか。エンジニアにとって最初からスクラッチでコードを書くことが魅力的であることは私も知っています。 2. #### どうすればこの活動によって生み出される価値を高められるか 3. #### より高い価値を生み出せるものが他にあるか

現在の目標やリリースのためもっと重要な作業が必要なのか。このような状況ではMVP (最小限の実行可能な製品)を考える―初期のフィードバックを収集しようとしているときに、最初からこのファンシーな最適化が本当に必要なのだろうか。リリース可能な最小スライスは何か。リリースにおける80-20とは何か。しないでいいのは何か。どのようにして価値を下げることなく範囲を縮小できるのか。

忙しい仕事に巻き込まれるのはよくあると思います。しかし、私は正しい質問を自分に問うことを覚えました。そうすれば効果的に仕事をして生産性を高めることができるでしょう。

次回は優先順位付けの方法についてより詳しく説明します。お楽しみに。

本記事は米国PagerDuty社のサイトで公開されているブログをそのまま日本語に翻訳したものです。原文はこちらを参照してください。

book-markカテゴリー :ベストプラクティス