アペルザでの1年を振り返る
こんにちは。技術部の丸山です。
Webアプリケーションエンジニアをしていて主にアペルザクラウドの開発をしています。
前職でも2年ほどJavaを使ったWebアプリケーションの開発をしていましたが、会社の新規事業ということもありエンジニアが私だけ、もしくは必要に応じて業務委託の方と働いたりしていました。
裁量権があり、周りの方も協力してくれる良い環境でしたが、自分の力不足を感じることも多かったです。
「チーム開発を通して良いサービスを提供したい、そしてエンジニアとして成長したい」そんな思いを持ち始めた頃アペルザに出会いました。
9月で入社してから1年が経ちます。面接を含め入社時からリモートワークという特殊な1年は、経験したことがないことの連続で密度の濃いものでした。そんな1年を振り返り、自身の変化や当時の気持ちを思い出していきたいと思います。
※文章中個人名が出てきますが、アペルザで一緒に働くメンバーです。詳しい紹介は省略しますが、何人かはnoteも書いているのでご覧ください。
入社後(9月~10月)
入社後のオンボーディングではアペルザの社員が利用する管理画面の開発を行いました。運用業務をサポートする、基本的なCRUDがベースとなる機能でした。この開発を通して、アペルザでの開発の流れやアプリの構成や各リポジトリの依存など確認しながら進めました。
困ったことがあるとSlackの中を検索したりドキュメントを検索して情報を探していましたが、なかなか見当たらないこともあり、はじめはよく迷っていました。
今思い返すとSlackで誰かに聞いて解決すればよかったと思いますが、疑問の文章化に時間がかかり初動が遅れました。分からないことが分からない時は疑問を文章にまとめるのも難しいです。また会ったことのない相手に対して抽象度の高い文章を送ることに躊躇していました。
オンボーディングを担当してくれた技術部の山本さんは「質問があまり来ないので、大丈夫か気になっています。」と気にかけてくれましたが、なかなか思うように質問することができませんでした。今になってみると、山本さんは穏やかで返答もシンプルなのでとてもわかりやすいのです・・・
ちなみに今のアペルザはAll-hands Meeting(技術部全体で色々共有する会)やSlackの通話やハドル、SpatialChatなどコミュニケーションの手法やツールが様々でリモートワークが始まった頃のコミュニケーションによる課題はかなり改善されたと思います。
約2週間ほどで1つ目のタスクを終えましたが、あまりうまく進められた感触がなくいくつかの課題が残りました。そして当時はそれらを言語化できず、どう改善したらいいかわからず対策を立てることができませんでした。
そんな自分に対して当初予定していたオンボーディング期間を延長して、EMの染谷さんとの1on1で仕事のペースを掴む支援をしていただきました。
ここではまず感じている違和感をとにかく口に出して課題の解像度を上げました。そしてそれらに立ち向かうための方法論や考え方についてmiroを使いながら参考になる記事などを紹介してもらいました。
例えば見積もりに関する課題には、毎日の予定と実績を記録しそれらに対するズレを把握していくことから始めました。ズレを可視化できると、その日のうちにそれらの原因がわかり何かしらの対策を立てることができました。原因や対策がわからず、言語化できないことは次の1on1の場で相談するということを毎日繰り返すうちに徐々に仕事のペースを掴むことができました。
オンボーディングという形を終えた後も、対話相手を西内さんに引き継いでもらいながら現在も1on1を継続しています。これはKPTという方法で振り返りを行ないました。現在(2021/9)も定期的に1on1という時間のあり方、やり方を見直しながら継続しています。
口に出して言語化することは思考を整理することにつながり、私を非常に助けてくれました。
CRMチーム(11月〜2月)
オンボーディングを終え、CRMチーム(顧客管理、Customer Relationship Management)に合流しました。
CRMチームではアペルザクラウドにおけるユーザーの顧客情報を管理する機能を開発します。このチームは私を含め9月に入社した新しいメンバーが3名(伊藤さん、瀬戸さん、丸山)と他チームとの兼任するフロントエンドエンジニアが1名(Patrickさん)で構成されました。
アペルザではアジャイル開発をチームとして行なっており、Refinement→Planning→Retrospectiveというサイクルを2週間で回しています。
私はAPIの実装やバッチの開発を通してチームでの開発を経験しました。実装面ではSpring Batchを触るのが初めてだったため苦戦しました。これは伊藤さんに相談しながら解決していきました。また瀬戸さんには詰まったポイントの共有や仕様を検討していく際の観点などについてサポートしてもらいました。
チームに合流した当初は、自発的に動けませんでした。理由はさまざまですが少し早くCRMチームで活動していた2人に対して甘えていた部分や言動に対する自信のなさなどだったと思います。思い返すと無駄だった時間を過ごしてしまうことも多かったように思います。
そんな中チームメンバーはSlackで積極的に声をかけて状況の確認や情報共有をして助けてくれました。おかげでなんとかタスクをこなせていましたが、自分の力ではない部分がとても大きかったように思います。
これは前述のAll-hands Meeting内でライトニングトークをした時の発表スライドの一部なのですが当時も同じことを言っています。
実際のところ、かなりお荷物感があったと思います。これは結構悔しかったり、辛かったりします。Retrospectiveや個人の振り返りとして西内さんとのKPTを通して、問題を少しずつ潰していきました。
またチームとしてもチケットを切る粒度や記載内容など、メンバー間での意識の共有が不十分だったことでうまくいきませんでした。CRMチームはバックエンドを担当する3名全員が、9月の入社だったので必然といえばそうなのかもしれません。
これらは2週間のスプリントで行うPlanningやRetrospectiveを通して議論し認識を合わせていくことで少しずつ解消されていきました。
Retrospectiveでは議論が白熱し不穏な空気が漂うこともありましたが、他チームでの成功例を取り入れたり、QAが求めている情報を確認し記載するなどしていきました。
半年経過して(3月〜5月)
チームで開発するということに慣れ、感覚やペースを掴めてきました。CRMチームで開発する傍ら自分にとって新しいことがいくつか始まります。
その1つが読書会です。どんな様子かは割愛します。他の方の記事で紹介しているので、ぜひ読んでみてください。(海老原さん、伊藤さん)
「現場で役立つシステム設計の原則」という本を読みました。この活動は自分にとって新しい知識と実践の場をもたらしてくれました。プログラミングは様々な設計手法やベストプラクティスなど溢れているように思いますが、学んだことを実感し定着させるには手を動かさなくてはいけません。これまではそういったことができておらず、時間が経つと内容が頭から抜けてしまうことが結構ありました。
みなさんは職場で実践し、活かせていますか?
システム開発はそれぞれ現場での文化や作法のようなものがありますから、突然毛色の違ったことをするには周囲への理解を得るところから始める必要があるでしょう。そもそも、どうやって取り入れればいいかわからないということもあるかもしれません。すぐに職場で実践するのは結構ハードルが高いように感じます。
読書会は「アペルザだったらどう取り入れられるか?」「実際にやってみよう」そういった議論も盛んだったことから私にとって、とても有意義でした。
実際にリファクタリングや単体テストなど少しずつ取り組み始めました。本当に小さなもので処理を分割するだけだったり、簡単な単体テストのコードを書くといったところからです。もしかするとこんなものは意味がないと笑われてしまうかもしれないレベルかもしれませんがアペルザでは快くレビューし、Slackではgoodスタンプをくれたりします。
この小さな活動が、チームや技術部を助けるものの1つにできるように継続していきたいです。そして最終的に私たちのプロダクトがユーザーにとってより良いものなれば嬉しいです。少し大きなことを言い過ぎたかもしれませんが。
またこの頃組織として、会社としてPMFを達成しつつある中で、組織としてデータを活用するという機運が高まってきました。会社としてシステムが重視する指標が設定され、技術部ではチームごとにSLIを検討するといったことが行われ始めました。そんな活動の一環かAll-hands Meeting内でGoogle Data Studioを利用してデータを可視化することを染谷さんが共有してくれました。データを可視化することで曖昧だったものが、明確なもの(事実)になり、それが課題であれば策を講じることができます。そういう感覚が入社した頃の課題をうまく言語化できなかったことに通ずるものを感じ興味深かったことを覚えています。
Data Studioの活用方法は染谷さんにサポートしていただきました。またデータエンジニアの佐藤さんにはデータをグラフに落とし込む作業におけるアドバイスもらう会を設定していただきました。
業務の傍で行う、データを扱う馴染みのない活動の進捗は微々たるもので落ち込んだりしました。しかしデータを見ることに対しての行動したことを讃えてくれる染谷さんや、これまでの経験や自分の知らない領域の知識を提供してくれる佐藤さんに支えられるなかで自分ができることを、コツコツ続けていくことが重要だと思えるようになりました。
最近のこと(6月~現在)
直近3ヶ月もいくつか新たなことに取り組みました。
ひとつがフロントエンド開発です。アペルザでは主にReact、TypeScriptを使ってフロントエンドの開発をしています。しかし基礎的なことを理解しないままの実装は既存の実装をほぼコピペしているような状態で、効率もよくありませんでした。
そんな中フロントエンドエンジニアのDustinさんが#frontend-learningという取り組みを提案してくれました。何人かのメンバーでUdemyの講座に取り組むというものです。動画といえど躓くことはありますし、それをプロに聞きながら進めることができるというのは本当にフロントエンド開発の技術向上の大きな助けになりました。
講座が進むにつれて、Reactのコードリーディングが楽になっていったことを覚えています。
ちょっと読める…!!って感覚が嬉しかったです。(まだまだ未熟ですが・・・)
そしてCREチーム(顧客信頼性エンジニアリング、Customer Reliability Engineering)です。急に出てきた感がありますが、実は3月の終わりに発足してそのオンボーディングのサポートをしていました。そしてその後も引き続きサポートを継続させていただいていたのです。CREチームでは各機能でMVPから落ちた機能やCSを通したお客様からの要望などを開発します。開発はベトナムにいるThaoさんとThinhさんが行ってくれています。
また仕様や言語のサポートをQAチームも兼任しているCaoさんが行ってくれています。日本語が超うまいです。
全ての機能(チーム)に関わること、スプリントを設けていないことなどCRMチームでの開発とは異なる点がたくさんあります。正直、これであってるのか?と思うことや、失敗したなと思うことの連続です。POの飯泉さんやベトナムメンバーを取りまとめてくれるCaoさんに助けられることがしょっちゅうです。
画面共有をして動作確認したり、朝のstand-upではGoogle翻訳を出してベトナム語に翻訳してみたり、試行錯誤しながら進めています。うまくいかないことも多いですが、悪い感じではなくて自分的にはむしろ良い感じです。(というか良くしていきたいなっていうことかもしれないです。)
最後にリリースです。
アペルザでは4半期に1回目標設定を行いますが、その際にリリース作業を行うことを設定しました。自分のスキルの中で未成熟だったインフラやアーキテクチャの知見を高めたかったという思いがあり、EMの染谷さんと話し合いながら設定しました。
瀬戸さんや海老原さんが丁寧に教えてくれたおかげで、どんな準備が必要か、それはなぜ行うのかということを理解しながらリリース業務に入っていくことができました。準備からリリース後も作業があるので神経を使い大変でしたが、サービスを支える仕組みや提供する仕組みの一部が理解できたと思います。
またアペルザはリリース専任のチームがあるわけではないので、それぞれが他のチームで開発やQAなどをしながらリリース作業を行なってくれています。当たり前に毎月リリースされることありがたみを感じることができました。
アプリがリリースされるということは、実はすごいことです。
終わりに
この1年の振り返りを書いていて採用面接のことを思い出しました。
染谷さん「丸山さんの勝ち筋みたいなものありますか?」(長所はなんですか的なニュアンスのあれ)
丸山「…人に助けてもらうことです。振り返るといつも周りの人が助けてくれたように思います。」
答えを用意していったわけではないのですが、少し考えたあと素直に出た回答でした。言った後すぐに雑魚いやつだと思われるかもしれない!という思いが頭をよぎりましたが、上保さんと染谷さんの2人ともにこやかでホッとした記憶があります。
実際アペルザでも助けてもらうことばかりで、そのままの1年になりました。
助けてもらうということはありがたく嬉しいことであると同時に少しの申し訳なさや後ろめたさ(表現が適切ではないかもですが)も私は感じてしまいます。それはもらった分、またはそれ以上に返せている自信が私にはないからです。
今年はもらったものを返せる、そんな1年にしたいです。