【私の挑戦】SWE 田村 優さん

「私の挑戦」シリーズでは、10Xのメンバーが仕事での挑戦エピソードからプライベートまでリアルな話をQ&A方式で執筆します!
それぞれの回答から、10X内の業務や雰囲気、メンバーの人となりなどを知っていただけたら嬉しいです。
今回は、ソフトウェアエンジニアの 田村 優さん(@Uhtml)が担当します!
在籍年数、お名前をお願いします!
2021年7月入社、在籍6年目の田村優です。社内では「優さん」と呼ばれることが多いです。
10Xでは、どんな役割や業務を担われていますか?
プロダクト本部のソフトウェアエンジニアとして、店舗チームのエンジニアリングマネージャーをしています。
店舗チームは、Stailer ネットスーパーの「店舗」に関する事業ドメインを担当するチームです。たとえば、配達なのか店舗受け取りなのかといった注文の受け渡し方に各店舗が対応しているかどうかの管理、午前中のどの時間帯なら配達できるのかという時間の管理、どの店舗がどのエリアに配達できるのかという配達エリアの管理などを扱っています。
マネージャーではありますが、時間の7〜8割はICとして機能開発をしています。
10X入社まではどんなキャリアを歩まれてきましたか?
前職は1社のみで、10年近く働いていました。
大学院在学中に、創業タイミングから参画したSNS・ウェブメディアのスタートアップで、最も長かったのはiOS・Androidのアプリ開発です。並行してウェブメディアのSEOやグロース企画にも領域を広げ、その後エンジニアからプロダクトマネージャーに転向。さらに事業のPL全体に責任を持つ事業責任者や、役員として親会社との協業事業の推進や組織開発まで、幅広く経験させてもらいました。
エンジニアを直接マネジメントする仕事は、10Xに入社してからが初めてです。
10Xに入社した決め手を教えてください
きっかけは、代表の矢本さんと以前から関わりがあったことです。
出会いは前職で、7~8年くらい前に業務委託としてプロダクトマネジメントを手伝ってもらったのが最初でした。どうしても入社してほしかったのですが、結果的には別の会社に行かれてしまいました(笑)。その縁もあって、10Xには入社前から足掛け3〜4年ほど業務委託として、当時10Xが運営していたウェブメディアのSEOを手伝ったりして関わっていました。
転職を考えたとき、前職の最後は事業責任者のような立場だったこともあり、「もう一度現場に戻って、自分の手でプロダクトを作りたい」という気持ちが強くありました。立場にはあまりこだわりがなかったので、役員からICに戻ることへの葛藤は特にありませんでした。
また、前職はtoC中心だったので、次はより機能的な業務効率化を実現するtoB領域のシステム開発に挑戦したいと考えていました。ネットスーパーは利便性が分かりやすく、自分自身もユーザーとして日常的に使えて、人々の可処分時間を増やせる素晴らしいサービスだと感じたことが決め手です。
入社後、一番の挑戦だった仕事について教えてください
簡単にエピソード紹介をお願いします
今年の春に取り組んだ、受け取り時間枠の「ひな型」に関するデータベース設計のリアーキテクチャです。ひな型とは、曜日ごとの受け取り時間の基本パターンを店舗ごとに登録しておくもので、これをもとに毎日0時に実際の枠データが生成される仕組みになっています。
このひな型が、Firestoreのドキュメント内に曜日ごとの要素が配列として入り、各曜日の中にさらに複数の枠が配列として入る、「配列の配列」構造になっていました。パートナーや業態が多様化するにつれてデータ量が肥大化し、また一部の要素だけを変更したい場合もドキュメント全体を洗い替える必要があるため、誤ったデータで意図しない部分まで書き換わってしまう潜在的なリスクを抱えていました。そこでデータを正規化し、別のコレクションに切り出す設計へと変更しました。
設計上のリスク自体は以前から認識されていました。それでもこのタイミングで手を入れたのは、この先1〜2年で枠に関する機能を大きく拡張していく計画があったからです。その前に枠の保守性とシステムの安定性を高めておくことが今まさに必要だと、組織として意思決定できたことが大きかったと思っています。
どんな苦労や困難がありましたか?どうやって乗り越えましたか?
すでに稼働しているシステムで、すべてのパートナー・すべての店舗で使われる機能なので、リリース計画を立てることが重要でした。まず設計とリリース計画のドキュメントを私が作成してチームでレビューし、実装はほぼ一人で担当。全体で2ヶ月ほどかかりました。
既存システムとの互換性を保つため、段階的なマイグレーションを組みました。移行期間中は新旧両方のデータに同時に書き込む「ダブルライト」の体制を構築し、一定期間後にチェックスクリプトで新旧データが完全に一致していることを確認。その上で読み込みを新しいデータモデルへ切り替え、問題がないことを確認してから、最後に古い書き込みロジックを除却する、という流れです。
一番気を使ったのは、読み込みを切り替える局面です。枠データが毎日0時に生成される仕様のため、深夜0時のタイミングで見守りを行い、新しいデータでも正しく稼働しているかを確認していました。
結果として、データの不整合や障害を一切起こすことなく、移行に合わせたドメインロジックのリファクタリングまで同時に完遂できました。読み書きの経路モジュール自体をリファクタリングしながら進めたことで影響範囲を事前に可視化できたこと、後方互換性を保つ段階的なリリースを事前に計画できたことが、成功の要因だと思っています。
よくある1日のスケジュールを教えてください
07時〜08時:起床、息子の着替えや朝食の補助
08時〜09時:息子の登園させ、朝食の片付け
09時〜10時:業務開始
10時〜10時30分:チームの朝会(チェックイン)
10時30分〜18時:開発
18時〜20時30分:自分の担当の日は保育園にお迎え。妻が迎えに行く日は家で夕食の用意
20時30分〜:夕食、お風呂、寝かしつけ
基本はリモートワークですが、2週間に1回は出社し、本部長やPdMとのチェックインを行っています。
休日はどんなふうに過ごしていますか?
2歳7ヶ月の息子が、いま虫にとてもハマっています。少し前は恐竜だったのですが、今は「はらぺこあおむし」が大好きで、休日も虫に関連した場所へ行くことが多いです。
東京都現代美術館の「エリック・カール展」に行ったり、蝶が好む草木が集まった近所の公園の「バタフライガーデン」に連れて行ったり、夢の島熱帯植物館で食虫植物や虫の標本を見たり。自宅の3Dプリンターで虫のフィギュアを印刷することもあります。
所属する部門・チームはどんな雰囲気ですか?
店舗チームはSWE4人(自分を含む)、QA1人、PdM1人という編成で、2週間単位のスプリントでスクラムを回しています。日次のミーティングは朝会の1回のみです。
システムを開発する上での設計や仕様、リリース計画などをシフトレフトで共通認識を持つことを重要視しています。Design Docのレビューは、基本的に全員にメンションして依頼しています。気になる点があればコメント上で議論して解決していく、コードレビューに近いコミュニケーションを取っていて、最終的に「LGTM」をもらうところまで徹底しています。
雰囲気をひとことで言うなら、「事に向き合える」チームです。不具合で障害が発生した時の振り返り(ポストモーテム)や、日々の開発業務における改善を挙げるKPTを用いたレトロスペクティブでも、お互いを責めることなくより良くしていくための建設的な議論ができています。
これからどんな仲間が増えると嬉しいですか?
スキルに関しては採用要件に準拠する形で考えていて、たとえばDartの経験などはなくても大丈夫です。
必要な要素を挙げるなら、今やるべきことに関して周りを説得できる能力だと思っています。それは、自分が下す意思決定に対してどれだけ論理的な説明ができるか、という部分にかかっています。
「今やるべきだ」と判断し、説得に必要な情報を用意して周囲を巻き込んだり、課題をレイズしたりできる推進力。そして、それを最後までやりきるグリットを持った方と一緒に働きたいです。
10Xでこれから挑戦したいことを教えてください
大きく2つあります。
ひとつは、プロダクトの機能拡張と汎用性の向上です。Stailerは数多くのスーパーに導入いただく中で、それぞれの業態やサービス内容の多様さに、まだ十分応えきれていない部分があります。個別のニーズに応えられるよう機能を拡張しつつ、特定のスーパーに依存しない、日本中のスーパーで活用できる汎用性の高いシステムを構築していきたいです。
もうひとつは、技術的なアーキテクチャの整理です。もともと1つのチームで開発してきた巨大なリポジトリを、数年前からドメイン単位でチームを分割し、境界を定義してきました。しかしまだ曖昧な部分が残っているのが現状です。新しい機能の開発に合わせて設計の見直しを段階的に進め、モジュール間の依存関係を解消して、境界をより綺麗に整理していきたいと考えています。
10Xでは一緒に働くメンバーを募集中です!
10Xでは未来をより良くする事業・組織のために、仲間を募集しています。
詳細はこちらをご覧ください。



