はじめに
21卒エンジニアとしてこの春Rettyに入社した高橋です。自分を含め、6名のエンジニアが入社をしてから半年が経ちました。
Rettyでは毎年、入社から半年のタイミングで振り返りTechBlogを公開をしています。本記事はこの振り返り第1回の記事です。
自己紹介
大学では数学・情報系の学科で特にHuman-Computer-Interaction関連の勉強・研究をしていました。研究や趣味で、必要や気分に応じて様々な言語やプラットフォームでソフトウェアの開発をしていました。特にiOSアプリやCreativeCodingに関する開発が好きです。
Webチームで修行をすることに
入社直後にVPoEの小迫と面談をし、以下の背景からWebチームで修行をすることになりました。
- LeSSというスクラム開発の体制をとっているが、Web開発のチーム数が多く、中心に回している
- アプリチームは1チームで技術スキル的に独立しているので、他チームのメンバーと関わりを増やしたい
- 今後、アプリチームとWebチームの連携を発展させていきたい
自分の技術スタック的にもWeb周りの開発に深く触れることはなかったので、なかなかない機会だと思い、Webチームで修行することが決まりました。 リモートワーク中心、どのようにしてRettyのWebチームに混じってキャッチアップをし、開発していったか、といったことを書いていきたいと思います。
特に大学生の方などは、新卒で入社したエンジニアがどのように働いているのかも想像がつかない状況かと思います。あまり技術の話に寄らず、Retty新卒エンジニアの働き方が、何かしらの参考になれば嬉しいです。
入社してから実務に入っていくまで
入社式や数日の会社全体についての研修などは、人数を最低限まで絞った上でオフラインとオンラインを活用して行われました。その後、エンジニアリング部門に配属され、スクラムチームでスプリントに混ざりながら、リモートでオンボーディングやキャッチアップが始まりました。
Rettyの文化とオンボーディングプラン
Rettyは「UserHappy」という文化が根強い組織で、ユーザさんにRettyの良い体験を届ける方法を常に考えています。当たり前のことですが、良いものを作るには、質の高いコミュニケーションが必要不可欠です。加えて、自分はWeb開発に関する知識も乏しいので、コミュニケーション不足が手戻りやデリバリーの遅延などを起こしてしまう恐れがありました。
そのため、「リモート環境下でも適切なコミュニケーションを十分に取り、仕事を円滑に進められるようになる」ことがオンボーディング期間中に達成すべき目標の一つになりました。 【参考】2020年度オンボーディング
Webチームでのキャッチアップ
RettyのWebチームでは、主に retty.me のサービス開発を行なっています。 現在は施策の開発と並行して、PHPのモノリスとVue.jsによるフロントエンドから、Nuxt.jsとマイクロサービス群への移行が進んでいます。Webチームが開発で関わる分野はとても広く、スプリントによって開発するレポジトリや、領域が変わることもあります。Web開発は経験がないので、小さなIssueから、各レポジトリのキャッチアップを進めていくことになりました。
【参考】マイクロサービスへの移行について engineer.retty.me
チーム開発
Webチームでの開発を通じて、多くの新しい領域に触れることができ、技術的な成長もたくさんありました。しかしながら、それ以上にチーム開発についての学びが深まった半年間でした。
そもそも余り触れたことのない技術の開発に入っていくには、「習うより慣れろ」に尽きます。Rettyの開発チームは、チームで成果を上げるという意識が強いです。自分の勉強をしつつ、「チームの成果に貢献できる部分を広げていく」という意識を持つことができました。チームでの開発に混じっていく形でキャッチアップをするため、焦りもほとんどなく、伸び伸びと仕事することができました。
LeSS
RettyではLeSSというスクラムの体制をとっています。Webに関わるチームは3〜4チームあり、合計で20人くらいの人が開発に参加しています。
【参考】RettyでのLeSSの導入 speakerdeck.com
多人数で大きな成果を上げ続ける、というのはとても難しいです。LeSSでは複数のチームが同じバックログ上でスプリントを回すので、チームでの成果、チーム間の関わりを意識する場面が多いです。チームで成果を上げていく意識が強いのは、このLeSSの体制によるところが大きいと思います。
これほど多い人数で一つのプロダクトを開発するというのは初めてでしたが、スプリントによって各チームの動き方や活躍しているメンバーが変わっていくので、有機的でとても面白い組織だなと感じました。
また、この規模でサービスを開発するとなると、施策ごとに「なぜ作るのか」・「ユーザさんにどういった価値を提供できるのか」というアウトカムをベースに施策を開発することが大切になります。今まで小さい規模で開発をしていると、目的が曖昧なまま「何を作りたいか」というWhatの部分に思考が偏りがちでしたが、人数が増えると破綻してしまいます。
サービスを成長させるためにも、達成すべき目標と、そのWhyの部分を意識して開発する必要があります。そのためにもプランナーやデザイナーの方々、チーム内外でのコミュニケーションが重要になってくるのだと学びました。
Working Out Loud
オンボーディングで掲げたコミュニケーションを十分に取って仕事をするという目標ですが、こちらはWorking out Loudという手法(意識)を取り入れることにしました。
エンジニアに限らず新参者は「分からなかったら、すぐ聞いてね」と言われるのはあるあるですが、これには人によって得意不得意が分かれる事柄だと思います。自分はWeb開発何も分からないマンなので、勉強しつつ仕事を進めていくわけですが、分からないことが山ほど出てくるのは容易に想像できます。
なので、「分からなかったら聞く」ではなく、「自分の状況を発信し続ける」ということを意識して、slackを積極的に使っていくことにしました。
Slackの個人チャンネルでの発言に対して、チーム内外の多くのメンバーが反応をしていただくことで不確実性が減り、仕事がとても進めやすかったです。このWorking Out LoudはWebチームの修行で成長するためにとても役に立ちました。何より、スクラムチーム関係なく、コミュニケーションを取る機会がとても増えました。
慣れてきてからは、自分が作業をして気になった箇所を垂れ流す機会も増えてきました。こうした呟きから始まった議論内でバグを見つけられたりと、Working Out Loud意識した結果デリバリーにつながるという事もあり、これはとても良い体験でした。
フィーチャーチーム
アジャイル開発では、職能横断型のフィーチャーチームが推奨されています。
基本的にRettyのエンジニアに、バックエンド担当・フロントエンド担当という役割はありません。タスクに応じて実際に開発しながら勉強していくことになります。分からないところがあれば、チームのわかる人に聞きながら開発を進めていきます。
- PHP + Vue.js を利用した、モノリスとフロントエンドの開発
- CloudFront + Lambda@Edgeを利用したABテスト基盤開発
- Goのマイクロサービス + GraphQL + Nuxt.jsによるページのリニューアル
- Goのマイクロサービス新規立ち上げの設定と実装
など、特定の技術によらず、さまざまな領域に手を広げて勉強しつつ、開発できたと思います。
また、ただ「勉強して作ってみる」のではなく、チームメンバーと、どのように良いものを作るかという議論をしつつ開発を進めるので、より深く勉強し考えた上で開発をする必要があります。
このようなこともあり、半年間で多くの領域に触れ、技術的にも実りのある修行となりました。
RettyWebチームの楽しさ辛さ(美味しさ)
Rettyは今年の2021年に10周年を迎えました。
とても喜ばしいことですが、先に紹介した通り、10年ほど動いているモノリスが存在します。最近の開発ではマイクロサービス基盤での開発が多くなっていますが、施策開発との兼ね合いでモノリスの方に手を加えることも少なくありません。
- 何がどこに書いてあるかが不明瞭で、古いコードのお掃除が難しい
- 制約が少ない故に、至る所にロジックが書かれている
- 複数のロジックが微妙に違っていて、正しいものがどれかわからない
といった「文章では見たことある技術的負債」を体感することもありました。
手を入れられないほどひどいものではありませんが、古い部分が多く開発着手からリリースまでの時間が長くなってしまう可能性があるので、開発メンバーが増えるほど、うまくスケールしない恐れがあります。
モノリスから新基盤への移行に関わる議論は、社内でも最も盛り上がる物の一つです。10年動いてきたモノリスを見ながら、新しい基盤の開発をしていくことになるので、自ずと今から実装しようとしていることのメリットデメリットを話し合いながら実装が進んでいきます。若手のエンジニアが新しいものを作ろうとするときの設計は、どうしても表面的な”良さそう”という気持ちに引っ張られやすいのではないでしょうか。こうした深い議論を伴う開発は、なかなか新卒エンジニアとしては巡り合えない、美味しい体験だと思います。
次の半年に向けて
このようにWebチームで半年間修行させていただき、この10月からアプリチームへ異動となりました。
Rettyはもともと、Rettyの体験を最大限高めるためにアプリを開発していました。その後ビジネス的な要件などによりWeb開発が活発化し、マイクロサービスによるリアーキテクチャも行われています。
Rettyアプリは以下のような課題もありますが、発展の余地はたくさんあります。
- 古くなってしまった画面や非効率的な設計により体験を損なってしまっている箇所の修正
- マイクロサービス基盤に乗っかることで、アプリも新しいものの恩恵を受けられるようにする
- よりRettyらしい体験 を届けられるような機能の開発
多くのやりたいことを実現するためにも、アプリチーム自体の動きをより良いものにした上で、Webチームとの連携も増やし、アプリの開発を推進させていく必要があります。この半年間はチーム開発に関する学びがとても大きく、技術力関係なく役に立つノウハウの片鱗を掴めた気がしています。
リモートやオフライン関係なく、このチームでの成果を高めていくことで、Rettyのユーザーさんにより良い体験を届けられるようなアプリを作っていきたいです。