こんにちは、金融チームでエンジニアをしているsekkyです。この記事はfreeeカード Unlimited の開発の裏側について紹介する連載の第5回目になります。
この記事では、新卒1年目からマイクロサービスを用いた新規プロダクト開発にアサインされて感じたよかったことや苦労したことなどについてシェアさせていただければと思います。 今後新卒としてエンジニアとなる方々にとって少しでも参考になれば幸いです。
前回の連載記事は以下のリンクからご覧ください。
Who am I ?
まず最初に、どのような立場の人間がこの記事を書いているのかを皆さんに理解していただくために、軽く私自身について自己紹介をさせていただければと思います。
- 2015年に大学入学、情報工学科に所属
- この頃から授業程度のプログラミングを開始
- 2017年秋に不動産投資ファンド向けのプラットフォーム開発をしているスタートアップで長期インターンを開始
- 開始当時はRails? Vue? 名前は知ってるけど……といったレベル感
- 卒業する頃にはVueでフロントを、Elixir + Phoenixでサーバーを開発できる程度にはなっていました
- 2021年3月に大学院卒業、freee入社
- 研究分野は要求工学というソフトウェア開発の上流工程を専門としていました
- 2021年6月より配属、freeeカード Unlimitedの開発にJoin
大まかな経歴は上記の通りです。 プログラミング経験は6年間で、そのうち授業程度が3年間と業務程度が3年間です。 また、通常のサービス開発は3年間経験していましたが、マイクロサービスでの開発は今回のfreeeカード Unlimitedが初となります。
pros
私が感じた“新卒から新規プロダクト開発に触れる”ことの利点は以下の通りです。
- ドメインやプロダクトについてより詳しくなれる
- 自分の書いたコードが与える影響が大きい
- モチベーションが続きやすい
ドメインやプロダクトについてより詳しくなれる
新規プロダクト開発の場合既存プロダクトの開発と比較して新機能追加の割合が大きく、単純なバグ修正やリファクタリングなどと比べて”仕様はどうなっているのか”、また”そもそも仕様自体が正しいか”などを気にしながら作業する時間が多いなと感じました。 特に仕様が正しいのかを議論するためにはドメイン自体について深く知っている必要があるので、結果としてカード決済について知ろうとする機会が増えていきました。
また、何年間も開発されてきたプロダクトと比べてプロダクト自体の規模が小さく全容を把握しやすいことや、マイクロサービス群として構築されているためにひとつひとつのサービスが担当する機能が限定されていることなどもあって、新卒同期の中でも特に自分の担当しているプロダクトについて詳しく知っていると言えるようになりました。
自分の書いたコードが与える影響が大きい
最初に誤解を与えないために書いておきますが、決して既存プロダクトで書くコードが適当でいいだとか影響が少ないと下に見る意図はありません。
新規プロダクト開発の場合参考になる実装がプロダクト内に存在しない0からの実装となることも多く、そうした場合は自分の書いたコードが良くも悪くも今後の前例となってしまいます。 また、自分の作ったAPIを元にして多くの機能が実装されたり、基礎部分となるコンポーネントを自分が作り、そこにコンポーネントを追加していくといったことがあると、理解しづらいコードを書いてしまうと後の実装者の手を妨げることになりますし、バグを埋め込んでしまいその発覚が遅れると大きな手戻りとなってしまうかもしれません。 自分がまだチームに所属していれば対応が取りやすいかもしれませんが、異動してしまった場合残ったメンバーや見知らぬ後輩に迷惑をかけることになってしまいます。
これは、裏を返すと常に後々の可読性や修正のしやすさ、バグを埋め込んでいないかをより意識しやすい環境ということになります。 もちろん、今までも常に意識しながらコーディングしてきたつもりではありますが、よりそう感じる機会が増えたことでコーディングしながら自分のコードを見直す機会が増えました。
モチベーションが続きやすい
コアとなる機能に携わることが多い分目に見える形で自分の担当した箇所が現れやすく、また次も頑張ろうというモチベーションになりました。
他にも、全社的に注目されているため同期や先輩方に応援してもらえることも多く、頑張った箇所を褒めてもらえることで嬉しい気持ちでいられました!
cons
次に、私が感じた“新卒から新規プロダクト開発に触れる”ことの難しかった点は以下の通りです。
- ドキュメントが整理されていないことが多い
- 大規模なコードのメンテナンスを経験できない
ドキュメントが整理されていないことが多い
機能開発の速度に比べてドキュメントの更新頻度が小さく、情報が足りなかったり古くなってしまって実際と異なるというようなことが多いと感じました。
コーディングをする際であれば、コード量がそこまで多いわけではないので読めばなんとかなる(もちろんドキュメントが整備されていてすぐに理解できる方が断然良い)のですが、私が配属された時点では環境構築の手順が複数サービス間や外部APIとの連携で複雑だった一方で、手順書が1箇所にまとまっておらず、その手順書も記述不足が目立つなどで結局プロダクトを手元で動かせるようになるまで数日かかってしまいました。
現在は他サービスとの連携部分が1コマンドで完結するようになっており当時よりは大幅に手間が改善されましたが、各所に情報が散らばっているなど問題が完全に解消されたわけではありません。
これは普段READMEの更新をサボりがちな私への自戒も込めてですが、環境構築の手順が変わる度にREADMEも同時に更新する、全体のREADMEやSlackのピン留めなどで必要な情報のリンク先を網羅して、必要な情報を必要な時に手に入れられるように努力する必要があると感じます。 現在は大規模でないかつ年月が経っていないからメンバーの記憶に頼ることができるけれど、この状況がずっと続いてしまうと後々大きな負債となってしまうかもしれません。
そして、初めての開発がそのような文化のプロダクトになってしまった場合、その人はドキュメントを書くという行為に慣れ親しまないまま経験を積むことになってしまうのではないかな? と少し不安になりました。
余談ですが、freeeカード Unlimitedではチームの目標設定としてOKRを定める際にドキュメントの拡充をKey Resultのひとつとして掲げるなど、高い問題意識を持って改善に取り組んでいる最中です。
大規模なコードのメンテナンスを経験できない
これは私の趣味嗜好もあるのですが、ベンチャーの中でもスタートアップではなくfreeeのような一定の規模を持った会社を選ぶ新卒エンジニアは、freee会計のようなある程度大きなプロダクトをいじりたいと思って入ることが多いと思います。 それこそ全国で広く使われているプロダクトの中身を新卒1年目から触れる経験など、滅多にできるものではありません。 私も入社当初はそれら大規模プロダクトのメンテナンス(主に速度面での改善など)をやりたいなと思っていました。
しかし、実際にアサインされたのは新規プロダクト開発で、やはりfreee会計やfreee人事労務などと比較するとどうしても規模感は小さくなってしまいますし(そもそも比較対象がおかしい気はしますが……)、発生するタスクも既存プロダクトのメンテナンスという感じではなく新規機能開発の方がメインとなっています。 どうしても大規模なコードをいじってメンテナンスしていきたいという人には新規プロダクトはあまりお勧めできません。
また、(既存のコードが参考にしても問題ない品質であるという前提のもとならば)お手本となるコードがたくさんあるという点で見ても、既存のプロダクト開発の方がコードを書き慣れていないうちは成長に繋がりやすいのかもなとも感じました。
ここまで大規模コードを触りたかった旨をつらつらと書き綴ってきましたが、今現在から振り返ってみると、freee社内で希望を出せば異動しやすい制度が整っていることや、大規模プロダクトよりもさらに珍しいであろうカード事業に立ち上げ段階から携わることができたことを考えて、なんだかんだfreeeカード Unlimitedに決めて良かったなあと思っています(笑)
まとめ
ここまで主観たっぷりで新卒1年目の私が新規プロダクトにアサインされて感じたprosとconsを書かせていただきましたが、今後新卒としてエンジニアになる方が「自分はどういう開発を新卒で経験したいんだろう」と判断する際の一助になれば幸いです。
ちなみに、私の場合はコロナ禍でコミュニケーションのコストが対面よりも高くなってしまうこともあって最初は大変なことの方が多かったですが、チームの先輩方の助けもあって、今ではfreee内で一番チャレンジングなプロダクトに楽しみながら取り組めています。
ただ、この記事も私という一個人の意見に過ぎないので、実際に機会が得られるのであれば、入社前でも入社後でも興味のあるプロダクトいくつかについて社員さんに質問してみることをお勧めします!
次回
次の連載記事は、freeeカード Unlimited のEMとしてチームをまとめてくださっているyokotaさんの「新規プロダクト&新造チーム&フルリモート:EMに何ができるか?」になります!
金融チームでは、一緒に「freeeカード Unlimited」を開発する仲間を募集しています。もちろん金融以外にも色々なチームで募集を行っていますので、ぜひ人材募集一覧も合わせてご覧ください!各プロダクトの開発を担当しているエンジニアから、freeeのカルチャーやプロダクトについてお話させていただきます。https://freeecommunity.force.com/jobs/s/detail/a4l2r000000CaUpAAK