(感想) 最短最速で目標を達成するOKRマネジメント入門

この本を読んだ経緯

名前だけを知っていた「OKR」を使って来年2022の個人目標を立てようと思いこの入門書を読みました(4章以外)。OKR自体はrebuild.fmでhigeponさんが以前OKRを使って目標設定をしているというから知りました。

読む前

OKR の名前をぼんやりと知っている程度で他の目標管理フレームワークに関して知識ゼロの状態でした。

学び

  • Objective, Key Resultの週一で行う振り返りが重要。Objectiveを変えても構わない。

  • OKR 2章

    • ミッション

      • 「顧客」・「顧客が我々に望んでいること」・「我々が提供すること」を定義する。これらのキーワードをつなげてミッションにする。
    • Objective

      • 3ヶ月後の「こうありたい」姿を大抵、定性的に示す。やる気を鼓舞する(ワクワクする)ような野心的(達成確率が60-70%)なものにする。
    • Key Result (KR)

      • Objective達成のための定量なものを3,4個決める。

      • 何をKRに決定出来ない場合は仮説を立てながら因果ループ図(例:ベゾスのペーパーナプキン)を使うと良い。

        loop-amazon

      • 決めたKRに優先順位をつける

      • KRはSMARTを満たすものにする

        • Specific
        • Measurable
        • Achievable -> Ambitious
          • 達成確率が60-70%なもの
        • Relevant
        • Time-bound
  • OKRデイリーチェックイン(毎日)

    • 前日の振り返りとその日にどう過ごすかの確認
  • OKRブリーフィング(週一)

    • 一週間のタスク(1日以内に完了できるもの)を確認するMTG。KPTAを用いた振り返りも行う。
  • KPTA ふりかえりフレームワーク P99

    • Keep
      • 続けること
    • Problem
      • 不満なこと。注意:Tryの否定形では書かない
    • Try
      • 試したいこと。(妄想レベルでも)改善案を上げる
    • Action
      • 実施すること
  • 行動の見直し

    • 行動指標: 行動によって直接制御可能な指標
    • 結果指標: 何かしらの行動によって間接的に変化する指標 指標に現れるのに時間がかかる
  • 「知る」と「わかる」は違う。 P156

    • 「知る」だけでなく実行が伴わなければ「わかる」とは言えない

結果

OKRだけでなくリーダーシップのスタイル、チームの育成モデル、因果ループ図、振り返りフレームワーク等を知ることが出来てとても有益でした。特に今まで言語化することが出来なかったリーダーシップのスタイルがモデルを知ることが出来て良かったです。この本を参考にOKRを使って2022年 Q1の目標を立てている最中です。また文章は全体を通して図と文章の対応がきっちりしていてとても読みやすかったです。

はてなサマーインターン2020に参加しました

2020/9/7(月)~2020/9/11(金)に はてなサマーインターン2020に参加しました。時差が16時間あったため、体調管理、授業との両立が大変でした。

応募前

応募前、後半のタームだと秋学期とかぶってしまうので授業とインターンを同時に出来るか少し不安でした。

応募

今までの成果物、PCのスペック、ネットワークの環境などをフォームに入力しました。また課題としてDockerのインストール、起動、起動時のトークンを取得結果を入力しました。

面接(6月後半)

最初は人事の方とその後、エンジニアの方と面接を行いました。人事の方とは日程の事、時差に関していくつか質問がありました。秋学期と被るため、可能であれば前半のタームを希望していることをお伝えしました。エンジニアの方との面接では応募の時の提出した成果物に関する話がメインで事前に GitHub を見て頂いていました。後日、結果を頂き、9/7(月)~9/11(金)で参加をすることが決まりました。

参加きっかけ

普段から特にテクノロジー系の情報収集のために、はてなブックマークをほぼ毎日利用しています。そのはてなが完全オンラインでインターンシップを行うということ、また内容としても以前から興味のあったマイクロサービスに関してだったため早速応募をしました。

インターン前にしたこと

過去の参加者のブログや他の参加者のプロフィールを見て他のインターンの方より技術的に劣っているだろうと思っていました。また短い期間で最大限、多くのことを吸収したいと思っていたため事前にgo、docker、gRPCの基礎知識を以下の

等を利用して学習しました。そのお陰で後述するWeb APIの講義は復習のような形で受けることができました。

事前課題

  1. こちらのテンプレートを元に自分のプライベートレポジトリを作成しReadme.mdのセットアップに従ってローカルでアプリケーションを動かすこと

  2. コントリビューターに他のインターン生、関わってくださるはてなのエンジニアの方を追加

問題なく行うことが出来ました。

交流会(9月3日)

id:onishiさん id:motemenさんから言葉を頂き、その後それぞれ自己紹介を行いました。その後、いくつかのトピックに関してエンジニア2名とインターン2名のブレイクアウトルーム内でアイスブレイクをしました。事前にScrapboxの他の参加者の情報を見ることができ、オンラインではあるものの他のインターンの方の雰囲気を知ることができとても良かったです。

開発環境

インターン中(9/7(月)~9/11(金))

9/7 講義

全ての講義と資料はこちらで見ることが出来ます。以下の

に関する講義が1コマ45分でありました。全て丁寧に解説しており、濃縮された内容でした。知識が不足していたためWeb API以外の講義に関しては講義内で全てを理解することは難しかったです。

9/7-9/10 開発

課題はこちらに公開されています。メンターは id:yigarashiさんでid:w-tl00 さんと一緒に igarashi 部屋というチャンネルで作業をしました。質問・相談があればその都度、音声をオンにしてやりとりをしました。作業ログは Scrapbox に書き、コードの変更は毎回PRを作ってメンターのコードレビューを受けるというフローでした。部屋内で定期的に(約1時間半に一回程度)進捗報告をする時間がありアドバイス等を定期的にもらうことが出来ました。今までのインターンシップ(対面)と比べてもとても質問等がしやすい環境でした。

課題1: 記法変換サービス

開発言語として事前に学習をしていたgoを選び、Markdown記法に対応させるためにgoldmarkというライブラリを利用して実装しました。この課題を通してblogのマイクロサービスの理解が進み以後の課題に取り組む際に役立ちました。発展課題のどのような独自記法を作るかというので少し悩みましたが最終的にggle記法というものを実装することを決めました。これは任意の言葉のgoogle検索結果のURLを自動生成するものです。

例えば

(GG---はてな---LE)というものは[はてな🔎](https://www.google.com/search?q=はてな)というマークダウンに変換を行います。正規表現を利用して該当する箇所を特定し変換を行いました。

課題2: タイトルの自動取得サービス

他のサービスを参考にしながら、この課題のためにタイトル取得のためfetcherというマイクロサービスを作成しました。しかし、レンダリングをするblogサービスとの通信が上手く行かず最終的には完成せずに終わりました。

原因として開発環境移行とkubernatesのエラーのため時間をロスしたことがありました。

開発環境移行

課題1までWSLを使わない素のWindows環境で開発を行っていました。マイクロサービス追加等をする際、makeを動作させることが出来ない等があったためWSL2上で開発をすることにしました。WSL2を動かすためWindows 10 Version2004へのアップデート等で時間をだいぶ費やしてしまいました。またwsl2への切り替えで手こずりここで大きく時間をロスしました。

KubernatesのWaiting for deployments to stabilize..

これを解決するためにメンターのid:yigarashiさんの他にもう一人のエンジニアの方に手伝っていただきました。

ログから新たなマイクロサービス(Fetcher)追加後にしばしばaccountのデプロイが失敗することがわかりました。これを調べるため

$ kubectl get pods -w #全てのpodの状況を確認

これからaccountのpodがRunning->OOMKilled->CrashLoopBackOffを繰り返していた。

$ kubectl describe pod [pod name] #[pod name]の詳細を確認

Readiness probe failed, Liveness probe failedと出力

これらから、accountのメモリが少ないためOMMKilledが発生しヘルスチェックも落ちたと推測することが出来ました。

解決策として

k8s/account/app.yamlのlimitsを以下のように

#          limits:
#            cpu: 200m
#            memory: 10Mi

コメントアウトすることで無事にエラーがなくなりました。

最後に

オンラインでありながらコミュニケーションをとる場が多くあるなどとても良く考えられたインターンシップのプログラムでした。KubernetesやgRPCを初めて触れたため上手く行かないこともありましたが、特にメンターのid:yigarashiさんのサポートによって開発をスムーズに進めることができました。コードやテストをとても丁寧に見て頂きフィードバックを頂いたことで多くのことを学ぶ事ができました。同じ部屋だったid:w-t1000さんもありがとうございました。

最後になりましたが、関わった社員、インターン生の皆様ありがとうございました。