2019、2020 年の振り返り

年が明けて 2021 年になりました。この機会に、2019、2020 年の2年間を振り返ってみたいと思います。

2019年の仕事面の振り返り

2019 年は、全体的にアウトプットが多い年だったように思います。

ブログや登壇では以下のようなアウトプットをしました。

2019年のブログ

2019年の Conference 登壇

2019年の新卒研修講義

2019年のその他 Meetup などの登壇

2019年に仕事で進めたプロジェクトについて

仕事で進めたプロジェクトとしては、まず「2019 年の新卒研修」の「全体設計及び実行を行う責任者」をやりました。2018年までは CTO が片手間で取り組んでいた部分だっただけに手順なども確立されていなかったため、「なぜやるのか(= WHY)、何をやるのか(= WHAT)、どうやるのか(= HOW)」という部分から改めて定義して進めました。社内の各チームリーダーやメンバーへ「新しくチームへ入るメンバーに何を身につけていて欲しいか?」をヒアリングするなど、社内のニーズを拾いながら設計を進められたのは、なかなか良かったんじゃないかと考えています。また、自分自身もいくつか講義を担当しました。取り組んだ内容の詳細はブログにもまとめています。

cf. 2019年度 Wantedly 新卒研修の内容を公開します! | Wantedly Engineer Blog

その後、マイクロサービスのアーキテクチャ改善の一環として、「ユーザーマイクロサービスへの書き込み RPC の実装およびその利用」を進めました。その一貫として payload の Protocol Buffer 化なども進めており、これが後述する「ユーザーマイクロサービスの gRPC 化」を後押ししてくれました。マイクロサービスのアーキテクチャ改善については、 CloudNative Days Tokyo 2019 (= CNDT2019) で話した以下のスライドでも詳細を述べてます。

cf. 理想的なマイクロサービスアーキテクチャを目指す継続的改善 / Re-architecturing of Microservices #CNDT2019 - Speaker Deck

ユーザーマイクロサービスが一段落したあとは、社内で「Ruby の gRPC server として小さいマイクロサービスを新しく作ろう」という動きがあったので、そこに関わる形で gRPC の基盤整備を進めました。これが2019年の年末にかけてのことです。具体的には、gRPC interceptor を揃えたり、社内の共通 library に組み込んで他のマイクロサービスからも簡単に利用出来るようにしたりといったことに取り組みました。その時点ではあまり意識してませんでしたが、振り返るとこれは2020年に取り組むことの助走となっていたように思います。

次に、2020年についても振り返ってみたいと思います。

2020年の仕事面の振り返り

2020 年は登壇回数は減った代わりに、ブログを書く量が増えました。特に意識して変えた訳では無いのですが、COVID-19 もあって外出が減り、その代わりにじっくり考えて文章を書く機会が増えたのかもしれません。

以下が、ブログや登壇の内容です。

2020年のブログ

2020年の Conference 登壇

2020年の新卒研修講義

2020年に仕事で進めたプロジェクトについて

2019年末に取り組んだ gRPC の基盤整備からの延長で、2020年は「ユーザーマイクロサービスの gRPC 化」から始まりました。元々、network latency に苦しんでいたのである程度の効果は期待していたのですが、結果として当初の想定以上に劇的な改善効果がありました 。そこで、それ以降は「社内外に gRPC のインパクトを広める & gRPC を利用するワークフローを整備してその知見を伝える」という事に取り組んでいました。

gRPC について以下の3つのブログを書いたのもその一貫です。特に、「Go 言語を利用するケースでは OSS や企業でかなり一般的に gRPC が利用されているが、Ruby などではまだそこまで一般的ではない。その状況を変えたい、コミュニティが盛り上がって欲しい」というモチベーションが強かったです。

登壇についても、今年は基本的に gRPC の話をしました。

gRPC Conf については、実は元々は存在を知らなかったのですが、上記ブログを読んだ方から存在を教えてもらい、CFP を出しました。

gRPC Conf は COVID-19 の影響を受けて Virtual Event に変わり、開催時期も何度か変更されるなど運営は大変そうでしたが、なんとか開催されて登壇する事が出来ました。以前から海外カンファレンスで話してみたいと思っていたので、一つの目標が叶いました。同僚やCTOには発表練習などかなり協力していただいたので、大変ありがたかったです。gRPC Conf 登壇については、ブログでもまとめています。

cf. gRPC をテーマとした国際カンファレンス gRPC Conf で Wantedly の gRPC 活用事例について話しました! | Wantedly Engineer Blog

CloudNative Days Tokyo 2020 (= CNDT2020) は、引き続きブログと同じモチベーションで、gRPC の利用が盛り上がって欲しいと思い登壇しました。社内では Ruby 以外の言語(Go, Python, Node.js)でも利用が広がっており、新規マイクロサービスでも使われるようになって来ていたので、そのアップデートを盛り込みつつ社外にもその空気感を伝えるようにしました。

gRPC 関連以外では、「社内の推論スコアデプロイ基盤を100倍以上スケーラブルにする」という事にも取り組みました。自分は同僚と比較すると「パフォーマンス改善やメモリ使用量削減などランタイムの動作を最適化する」のがかなり好き & 得意なようで、それを見込まれて取り組んだプロジェクトでした。結果的には良い形で改善が出来たのかなと思ってます。これについてもブログでまとめています。

cf. PoC 活用のすすめ - 社内の推論スコアデプロイ基盤を100倍以上スケーラブルにした話 | Wantedly Engineer Blog

また、2020年の大きなアップデートとしては、Infrastructure Team の Leader になったことも挙げられます。これは、いわゆる Engineering Manager と Tech Lead を合わせたような役割です。以前、Product Team にいたときも Team Leader をやっていた時期はありましたが、改めて取り組む事になりました。

Team の Mission を再定義したり、運用を改善したりするなど、Team Member のパフォーマンスを出すために日々考えて改善に取り組んでいます。この辺りはいずれまたアウトプット出来たらと思っています。 ちなみに、Team Member と考えをすり合わせる中で、自分の嗜好性も見えて来たのが面白いと感じています。具体的には、「継続的に改善が行われる事にモチベーションがある、プロジェクトを進めて価値を生み出す事を楽しいと思う」などは自分の特徴的な部分なのかなと思っています。

2020年について思うこと

2020年を振り返って思うのは、「良い方向にも悪い方向にも予想外の事が多かった」という事です。例えば、COVID-19 がこれほどまでに生活にインパクトを与えるとは、2020年が始まったばかりの時点では完全に予想外でした。Work from Home やそれに合わせたチーム・組織の運用変更、カンファレンスなどの在り方の変化、社会全体の変化など、予想しない形で多くの変化があったように思います。ただ、これらは必ずしも悪いことばかりでは無く、必要に迫られることで生まれた良い変化も多数あったんじゃないかと思います。

仕事面でも、今年やった事の多くは当初計画していたものではありませんでした。gRPC がこれほど急速に社内で浸透するとは思っていませんでしたし、そのインパクトも想像以上でした。gRPC Conf はそもそも存在すら知らないところから登壇に至りました。Infrastructure Team Leader になることも全く予想していませんでした。

一方で、「これまでの積み重ねが結果に繋がった」と感じるシチュエーションは数多くありました。例えばユーザーマイクロサービスはこれまでにインターフェースをちゃんと決めて、そこに実装詳細として通信技術などは隠蔽出来ていたお陰で、gRPC 化を予想以上に簡単に実施できました(Client 側は library の内部実装を変えただけで、library を利用するコードは一切変えずに済みました)。今年はパフォーマンスチューニングなどをする機会も多かったですが、そこではこれまでにハードウェアや OS、ミドルウェアについて勉強してきた知見が活かされていたように思います。分散データベースについてのブログ(= The History of Distributed Databases)も今年書きましたが、これも元々は完全に趣味で調べていた内容をまとめたものでした。社内のシステムのマイクロサービス化が進むなかで、ここで調べた知見は活かされて来ていると感じます。このように、予想外の状況に対して、「これまでの積み重ねで上手く対応出来る」という感覚がありました。

ここから考えてみると、「すぐに返ってくるか分からない投資を継続的にやり続ける」ということが重要なのだと思います。Steve JobsStanford 大学卒業スピーチでも、彼は「振り返ってみたときに点と点をつなぐことができる」と述べています。日々の取り組みが、振り返ってみると今に活かされているのかなと思います。

Again, you can't connect the dots looking forward; you can only connect them looking backward.

cf. https://news.stanford.edu/2005/06/14/jobs-061505/

プライベートの振り返り

プライベートで取り組んでいたことも少し振り返ってみたいと思います。

まずは競技プログラミングについてです。2019年の8月頃、同僚の影響で AtCoder のコンテストに出るようになりました。実は以前アカウントを作って一度だけコンテストに出たことがあったのですが、それっきり放置してしまっており、そこからの復帰です。AtCoder はそこから1年弱続けて、6月頃になんとか青まで行くことが出来ました。PAST も受けてみて、88点上級をとる事ができました。

一時期 CodeforcesTopcoder に出ていた時期もあり、どちらも青までは行く事ができました。

最近は出場回数が減ってしまったものの、競技プログラミングは趣味の1つと言えるくらいには打ち込めたのかなと思います。

その他、英語学習も少しやっていました。自分は Reading はまあ問題ない、Listening はそこそこ、Speaking と Writing が苦手という状態です。Speaking は昔よりはかなりマシになったと思うものの、「話し相手に気を使ってもらう前提で会話が成立する」という状態なので、もっと英語力を向上させたいと考えています。今は DMM 英会話を少しやったり YouTube の英会話の動画(EnglishClass101.com の動画が多い)を見たりしてますが、うまく習慣化してボリュームを増やさねば、と思っています。

2020年末には、プライベートでもブログを書く量を増やしてみました。特にきっかけがあった訳ではないのですが、このころ「自分のために調査した内容を memo に残しておく」という事をやってみたところ、そこからのブログ化が簡単に出来る事に気づいたのが大きかったです。今も memo は増えていっているので、いずれ放出したいと考えています。

プライベート面でも、仕事で書いたのと同様に予想外の事が多くありましたが、充実した日々を過ごせたように思います。

OSS 活動について

OSS 活動は仕事とプライベート両面に関わってくる部分です。まず、仕事としては、「理由がない限りは書いたコードはオープンにしよう」という事を考えてました。実際、多くのコードは以下のように OSS にしています。

また、利用している OSS についても、bug や不自然な挙動など気が付いた事については積極的に issue を立てたり PR を送ったりするように心がけていました。1つ1つの貢献は小さいものではありますが、それでも積み重なることに価値があると信じるようにしています。

まとめ

仕事、プライベート、OSS 活動など様々な面から 2019 年と 2020 年を振り返ってみました。

2020 年は特に予想外のことが多く、改めて未来は予測出来ないと気づかされました。一方でこれまでの積み重ねによって上手く出来たケースも多く、「すぐに返ってくるか分からない投資を継続的にやり続ける」ことの重要性も実感しました。

2021 年は、仕事、プライベート両方で、コンフォートゾーンを抜け出してチャレンジしていくという事を意識したいと思います。「出来る事で勝負する」のはもちろん必要ですが、それ以上に「出来ない事を出来るようになる」経験をまだまだ積んでいきたいと考えています。