2019年の振り返り
2019年を振り返ります。 書かないと何年か経ってこの年は何をやってたっけ?となりそうなので。。
仕事
2019年になってすぐ音声認識のチームに異動になりました。 開発リーダーとしてアサインされて、
- 開発メンバーにタスクの見積もりを出すようにお願いしたり
- 見積もりをもとにスケジュールを経営陣へ報告をしたり
- PoC作業をしたり
といったことをしていました。 アサインされてしばらくはコードは書いていませんでした(依存ライブラリをパッケージ化したりDockerfileを書いたりなどの足回りを整える作業はやってましたが)。
スクラムをやろうと提案したことでゴールデンウィーク明けからスクラムを始めることになり、僕はスクラムマスターと開発者を兼務することになりました。そこから徐々にコードも書き始め、チームも軌道に乗り始めて現在に至ります。
10月には研修を受けて認定スクラムマスターになりました。
認定スクラムマスターになりました
スクラムは間に余計な人をいれずステークホルダーとチームが直接コミュニケーションするのが良いなと思っていたところ、 先日LINE横道さんのLINE DEVELOPER DAY 2019での発表がログミーで文字起こしされているのを読んで、 似た内容が書かれていたので紹介します。
LINEを支えるプロジェクトマネジメント&アジャイルの専門家組織「Effective Team and Delivery室」の取り組みと戦略
まず1つ目に、すごく極端に言うと、私たちはプロジェクトマネージャーはいらないんじゃないかと考えています。ただ一方で、プロダクトをしっかりデリバリーするためには「プロジェクトマネジメント」という行為自体は非常に大事だと考えています。
とくに、自己組織化といいますが、自律的に動くチームであれば、プロジェクトマネジメントの要素はよりチームの中に溶けているような状態になります。
僕も開発リーダーとしてアサインされたのでこの発表で言うところのプロジェクトマネージャーに近い役割でしたが、自分もこの意見に完全に同意で、進捗管理などのプロジェクトマネジメントは単一の個人でなくチームでやったほうが効率がよいと思っています。
僕の場合は別の開発プロジェクトにアサインされて進捗管理をやっていたのでそもそも難しいのはそうなんですが、そうでなくてもステークホルダーと開発者の間にプロジェクトマネージャーやリーダーが入ってコミュニケーションすることによってどうしても情報量が落ちますし、「持ち帰って開発者に確認します」などとやっていてはスピードも失われてしまいます。 それよりも、ステークホルダーと開発者が直接会話して進捗を共有したほうが情報量のロスもない上に、持ち帰る必要もないのでその場で判断できます。
もちろん開発規模によってはこれが最適ではない場合もあり得ますが、数人から数十人程度であればプロジェクトマネージャーを排除してチームが管理する方法で十分に機能するのではないでしょうか。
この「中間者を排除して当事者同士でやり取りする」というプラクティスはプロジェクトマネジメントに限らず、組織のいろんなところで適用できそう。 開発リーダーやスクラムマスターという立場を通じて、開発体制や組織構造ついていろいろ考えたり悩んだりしたのはよい経験になったと感じています。
ちなみに先ほどのログミーの後半の記事では、ボトルネックだった中間のマネージャー層を排して自己組織化されたチームに権限を移譲するというLINE NEWSでの取り組みが紹介されているので、よろしければこちらもどうぞ(LINEの回し者か?)。
マネージャー依存の構造をいかにして解決するか? LINE NEWSの事例に学ぶ、プロジェクトマネジメントの知見と工夫
jekyll-linkpreview
jekyll-linkpreviewというJekyll pluginを書いた(がGitHub Pagesで使えなかったので使うために格闘した話)
jekyll-linkpreviewというJekyllのプラグインを書きました。
リンクを linkpreview
タグに渡すと、そのページのOpenGraphProtocolのmetaタグを取ってきてプレビューを表示してくれます。
Rubyをまともに書くのは初めてだったので結構時間を食ってしまいましたが、無事gemとしてリリースできてよかったです。
RubyよりPython派なんですが、Pythonでライブラリをリリースするより先にRubyでリリースすることになるとは夢にも思いませんでした。Pythonでも何か書きたい。
ESPnetへのcontribute
ESPnet Hackathon 2019 @Tokyo Part 1 (2019/07/29 10:00〜)
7月末にESPnetという音声認識フレームワークの開発者が弊社でイベントをやって、その後数日ハッカソンが開催されたので参加しました。 warp-ctcというライブラリのパッケージングに取り組むことになり、ハッカソンの数日では終わらず結局1ヶ月ほどかかったものの、ESPnetのリリースノートに名前が載るなどしました。
ESPnet本体の開発にも関わりたい気持ちもありつつ、音声認識の知識が足らずちょっと手を出せていない感じです。
PyTorchで音声認識を実装する
仕事で音声認識に関わるようになったわけですが、ブラックボックスで中身がよく分かっていないのはちょっとまずいなと思い、PyTorchで音声認識を実装し始めました。
ysk24ok/speech-recognition
といっても現時点では音響モデルの部分しか書いていなくて、FSTのデコーディングを絶賛実装中です。早くend-to-endのモデルも実装したい。
1日1問感謝のLeetCode
2019年になってふとLeetCodeを再開しようと思ってちまちま解いていたのですが、ちまちますぎて解いた問題数が全く増えなかったことに加え、思い立って参加してみたLeetCode Contestで4問中最初の2問しか解けないことが何回か続いてショックを受けたので、1日1問必ず解くことにしました。
- 初見の問題をAC
- 既に解いた問題を違う解法でAC
のどちらかを1日1回やるというルールを課しています。
1日1問解き始めた11月後半からの進捗が著しい。。
1日1問という制約は個人的にはけっこう厳しいですが継続していきたいと思います。
読んだ本やPodcastなど
開発リーダーとしてアサインされた直後はアジャイルな見積もりと計画作りなどを読み、
アジャイルな見積りと計画づくり|マイナビブックス
スクラムをやることになった前後ではアジャイルサムライやSCRUM BOOT CAMPなどを読みました。
アジャイルサムライ――達人開発者への道-Ohmsha
SCRUM BOOT CAMP THE BOOK | 翔泳社
スクラム以外の技術書ではClean ArchitectureやEffective Modern C++、レガシーコードからの脱却などを読みました。
Clean Architecture - asciidwango
Effective Modern C++
レガシーコードからの脱却
技術書以外では新1分間マネジャーやティール組織を読みました。
あとPodcastも今年から聞き始め(去年も聞いてたような気もする?)、Software Engineering RadioやFukabori.fmなどを聞いています。SE radioは特定のトピックを専門家が基礎から喋ってくれるので、英語ですが比較的聞きやすいと思います。Fukabori.fmはiwashiさんの喋りが早口でテンポがよいので気に入っています。
まとめ
仕事でもプライベートでもいろいろと新しいことに手を出した1年だったのかなと振り返ってみて思いました。 来年は新しいことを始めるよりも深めていく1年にしたい。