新卒2年目エンジニアが新規プロダクト開発でぶつかった「いつか乗り越えなければいけない壁」
「リリース後は、達成感よりも無事にリリースができて全身の力が一瞬で抜けた」
2020年10月の 電子帳簿保存法(以下:電帳法)改正に伴って11月にリリースした『マネーフォワード クラウドBox』(以下:『クラウドBox』)。そのリリースを振り返って、担当したエンジニアのコメントです。
実はこのプロダクト、新卒2年目のエンジニアが中心となって仕様決めからリリースまでを担当しています。今回は担当した2人のエンジニアにリリースまでの歩みを聞いてみました。
■プロフィール
原田 大輔(写真右):19年新卒入社のエンジニア。
マネーフォワードビジネスカンパニー 経理財務プロダクト本部 法人開発部 Storageグループ リーダー。
栗山 礼央(写真左):19年新卒入社のエンジニア。
マネーフォワードビジネスカンパニー 経理財務プロダクト本部 法人開発部 Storageグループ。
突然のDMをきっかけに巻き込まれ、何もわからない状態からスタート
ーそもそもお二人がこの『クラウドBox』に関わったきっかけについて教えてください。
原田:年明けにいきなりDMが来たんですよね。「電帳法っていう法律が変わるから、それに備えたプロダクトを作ろうと思っているんだけど、まずは法律をみてほしい」って言われて。
栗山:僕もいきなり連絡がきて、MTGが組まれていつのまにか巻き込まれましたね。
原田:それにしても、最初は何もかも分からなかったよね。「電帳法ってなに?」から始まって、とにかく法律を勉強した気がする。時間があいたら法律を読む、家に帰ってベッドで横になっても気付いたら法律を読んでいて、法律をこれほどまでに読むかってぐらい読みましたね。
そして、その内容をesa(注:当社で使用している社内ドキュメントツール)にまとめていました。
「請求書ってなんでそもそも保存するの?」に始まり、法人税法と所得税法によるとこう書いてあるけど、法人税と所得税で保存すべき内容が変わるみたいな内容を…
ー法学部の学生の課題レポートみたいですね。
原田:本当にそうでしたね(笑)。新規事業に関われるのは嬉しいけど、そもそも何故このプロダクトが必要なのか、誰のどんな課題を解決するのかをまずは理解するために、自分でとにかく調べて、まとめる。並行して、執行役員の山田さんに他のプロダクトとの兼ね合いや今後の展望について質問をするミーティングを2回実施しています。
栗山:本当はまだまだ聞きたかったんですけど、法律の改正タイミングに合わせたリリースを考えると、すぐにでも動き始めないといけなかったので、仕様決め、設計、開発のスケジュールを引いて動き始めました。
原田:ちなみ、キックオフも兼ねて山田さんの家でタコパをやりましたね。CTOの中出さんも参加していましたが、人生初タコパだったらしいです。
(20年1月開催のタコパ。左から栗山・CTOの中出・執行役員の山田・執行役員VPoEの渋谷)
栗山:そんなのもあったね(笑)
で、実際に動き始めたんですけど、スタート時には19卒のエンジニアだけ。まずは仕様決めをするために、僕の場合は経理業務ってどんなものがあるのかのキャッチアップをやっていました。
原田:最初はエンジニアだけのチームだったので、デザイナーの猪爪さんにサポートしてもらい、実際の仕訳業務のフローを付箋を使って整理していきました。あのときは、もう一生分の付箋を使ったよね。就活のグループワークを思い出しました(笑)
(経緯は猪爪によるこちらの記事をご覧ください)
栗山:ユーザーインタビューで社外に訪問した際、人生で初めて名刺交換をしたよね。しかもスーツも初めて着た気がする。
原田:そうそう。初めての社外への訪問だったから、交通費の経費精算も初体験。
栗山:アポ当日、気付いたらマッチ(原田)がアポよりもかなり早く現地に着いていたし、名刺交換の手が若干震えていて、横に居る僕にもめちゃくちゃ緊張しているのが伝わってきたの思い出した(笑)
「いつかは乗り越えなければいけない壁」を乗り越えて前に進むために
ーそれほど緊張していたんですね(笑)仕様決めが終わったあとは設計フェーズですが、ここではどこが大変でした?
栗山:やっぱり新卒だけのチームで経験がないので、自信がないというか「これで大丈夫かな」と不安だったんですよね。前のチームだとお互いに経験豊富な上司がいて、「ここをこう直した方がいいよ」と的確にレビューをもらえていた分、異動してからは自分がレビューするにしても不安がつきものでした。
原田:VPoEの渋谷さんにレビュー依頼ついでに、「新卒の僕たちだけのレビューで大丈夫かとても不安です」って相談したんですよ。そうしたら「もちろんその気持ちは分かるけれども、これから新卒の後輩も入ってくるし、リーダーになるといつか乗り越えなければいけない壁だよ」と言われたんです。
ーその「いつかは乗り越えなければいけない壁」をどう乗り越えていったんですか?
原田:最初は渋谷さん含め、とにかく多くの人にレビューにも入ってもらいつつ、レビューの内容を踏まえて「こういう方針でいけば大丈夫だよね」とチームで考えながら進めていました。もちろん完璧を目指していましたが、前に進むことに時間がかかるのである程度の線引きをして次に進んでいましたね。
栗山:工夫としては、自分たちですべてを0からやろうとせずに、他のチーム、プロダクトのコードを覗いて、どんどん参考にしていました。すでに動いているものを活用した方が安心できる上に早く進められると思ったからです。
原田:「すでに稼働しているから大丈夫!」と盲信せずに、それぞれの設計やコードをリファレンスを見ながら読み取って、自分たちの理解を深めていきましたね。
栗山:社内には様々な規模のプロダクトやサービスがあるので、参考にする資料がたくさんあったのは助かりました。それぞれフェーズも全然違いますし。
(当社サービスの一覧)
原田:例えば、1年前にリリースしたプロダクトではこうやっているけど、3カ月前にリリースしたプロダクトは違うやり方でやっている。
それぞれ比較しながら、「僕らのプロダクトではどのやり方を採用した方がいいんだろうか」を自分たちの頭で考えて、時には1年前のものと最新のものを組み合わせながら進めていましたね。
栗山:リポジトリをみて、分からない部分などの詳細は、社内だからこそすぐに聞ける上に、みなさん親切に教えてくれるのでとても助かりました。これがなかったら1から自分たちで調べるしかなかった…
原田:あとは、やることがすべて未経験なので、学習欲がすごい満たされましたね。どんどん新しいことができるようになっていくので充実していました。
他のチームの人に見てもらったときに、「この設計やコードが綺麗だね」と言ってもらうこともあって、自信につながってとも嬉しかったです。
栗山:多分それは、世の中にプロダクトを出す責任として、かなり厳密にテストを書いていたことも大きかったと思います。テストで確認する範囲を広めに設定し、「正しいケースで動くことだけを確認する」だけではなく、「想定されるエラーケースも含めてほとんど全てのケースを通る」ようにテストを書いていました。途中からQAエンジニアの方もチームに入っていただいたこともあり、連携していましたね。
原田:開発以外の部分で行くと、初めてのリーダーだったので、リーダーとしての責任をしっかり果たさなきゃという思いから、とにかくesaに記録を残していくことを徹底していました。
栗山:議事録がたくさん残っていたので、迷ったときには書いたesaをみてチームで立ち返っていましたね。例えば、各々のコードの書き方はありつつも、チームとしてコードをどう書くかの指針を作って、esaにまとめていたり、僕も個人で振り返りを書いていました。
(分かりやすくまとまっている『クラウドBox』関連のesa)
ただ、反省としては、例えば仕様についてのesaで「何故この仕様を採用したのか」だけを書いて「あれ?この仕様思いついたんだけど、なんで駄目なんだっけ?」とかあとから思いつくことが何度かありました。
今後は、そのとき採用されなかった仕様や、なぜその仕様を採用しなかったかまでも書いておきたいです。
ユーザーのために、自分たちのためにチームで決めたチャレンジ
ーそういえば、チームでもいくつかチャレンジをしたと聞いたのですが、その話も聞かせてください!
栗山:チームで決めたチャレンジは以下の3つです
①インフラチームではなく、自分たちでインフラの構築も担当する
②プロダクトの表示速度改善
③精度の高いプランニングのためのスクラム
原田:1つ目のインフラについては、中出さんがエンジニアブログで書いている通り、インフラチーム以外にもインフラのスキルを身につけてほしいという話もあり、新卒だけのチームで0から開発するせっかくの機会だし、もうすべてやり切っちゃおうということでチャレンジしてみました。
とはいえ、インフラチームにインフラの構成図をつかって説明してもらったときに「うわ、ウネウネした線がたくさん…なにこれ…(笑)」と言う感じでしたが、インフラチームに助けてもらいながら無事に構築出来ました。
栗山:2つ目の表示速度改善についてはユーザーインタビューしていく中で、既存プロダクトの表示速度に関するご意見をいただくことが一番多かったんです。
「ユーザーのためにも、ここは力を入れて取り組みたいよね」とチームで話し合い、チャレンジしました。
今回、社内でも導入されていない技術を採用したので、調査は大変でしたけど無事に実装までたどり着きました。この知見は、いずれエンジニアブログにも書くつもりです。
(2021/01/13追記:エンジニアブログ公開されました!)
原田:最後は、プランニング精度が高いチームにしたい思いに加え、スクラム開発についても学んでいきたかったのでチャレンジに入れてみました。
栗山:プランニングの精度がユーザーのため期日までにリリースできるかに直結しているので、どんどん出てくるタスクを溢れないように整理して、どういう順番でやると効率がいいかを話し合いながらやっていました。
原田:後で焦りたくなかったしね。
「こんなにもバグが少ないんだからもっと社内でアピールした方がいいよ!」と言われたプロダクトリリース
ーそうして迎えたプロダクトのリリース当日はいかがでしたか?
原田:実はリリース当日も直前に問題が少し見つかって、この時間までに解決しなかったらリリースを延期するというリミットギリギリまで修正していました。
栗山:リリース後は、まっさきに自分たちでアクセスしたよね。無事に動くかどうかを確かめたかったから。
原田:リリースできた嬉しさよりも、「おー表示が出た出た出た!自分たちで動くかを確認しないと!!」と、細かく確認していましたね。無事に確認が終わったあとは、全身から力が抜けましたね。
栗山:やった!っていうよりもエラーが起きていないかな?って心配で、夜中に急に目が醒めて、障害検知チャンネルとかをついつい確認していました(笑)
原田:ほんと、あのとき2人でずっと気になってチェックしていたよね。
栗山:でも、思ったよりエラーがでなくて、「あれ?もしかして意外とすごい?」とじわじわ達成感が来たって感じです。
原田:渋谷さんには「これ凄いことだから、もっと社内でアピールしたほうがいいよ!」言れましたね。
やりたいことの達成度は全体像の5%。ユーザーに便利な世界観を提供するためにこれからもチャレンジする
ー最後に今後の展望について教えてください。
栗山:プロダクトのゴールとしては、マネフォのサービスで発生した証憑、領収書などがすべて『クラウドBox』に保存されていて、それが『マネーフォワード クラウド会計』から仕訳と連動して確認できること。現状では、連携先のプロダクトが『マネーフォワード クラウド請求書』だけなので、5%ぐらいですね。まずは早く100%を目指して、よりユーザーに価値を届けていきたいです。
原田:その上でも、引き続きチャレンジはしていきたいと思っています。例えばプロダクトの運用が始まってユーザーのフィードバックに対応していくことも1つ。それ以外だと、リリース前につれて、時間と労力をかけて解決をしようとして自分たちに負荷をかけてしまいました。
これからはインターンのメンバーにも参加してもらうので、効率よく開発できる体制を整えていきたいですね。
もちろん、連携プロダクトが増えていくと今まで以上に複雑になっていきます。各プロダクトやメンバーとうまく連携しながら、リリースのときと同様にバグを限りなく少なくして作りきっていくこと。これがユーザーにとって安心して使えることにつながるので、今後も頑張りたいです!
ーお二人ともありがとうございました!