バックエンドのカジュアル面談で聞かれること9選とその回答
はじめに
こんにちは、株式会社mikan バックエンドチームのgamiです。
2年ぶりのnote更新となりました。
現在mikanは採用強化中で、ありがたいことにカジュアル面談のご応募をいただくことが増えてきました。
いろんな方と毎回楽しくお話をさせてもらっているのですが、mikanに対しての質問事項が共通している部分も多く、せっかくなので記事として残すことにしました。
mikanが気になる方にとっての情報源になることと、mikanメンバーにとっての共通認識になることを期待しています。
1. どんな開発スタイルですか?
バックエンドチームでは、スクラム開発を取り入れています。
水曜日から火曜日までの1週間を1スプリントとして、火曜日にプランニングと振り返りを行っています。
iOSチーム、Androidチーム、デザインチームも同様にスクラム開発を行っていますが、スクラムイベントのタイミングがチームによって異なることがあります。
スクラムサイクルの他に、プロダクトバックログを決める流れもあります。(下図)
バックログ整理会は主にプロダクトマネージャー(以下、PM)と事業企画メンバーが施策の優先順位を決める場ですが、誰でも施策を提案したり、オブザーバーとして参加したりすることができます。
事業ロードマップに対する方向性の一致度合いや工数、インパクトなど様々な観点から優先順位が判断されます。
優先順位が決まると、次は開発チーム(バックエンド、iOS、Android、デザイン)とPMによるキックオフが実施されます。
キックオフではPMから施策の概要が説明され、不明点などをクリアにしながら各チームのタスクを洗い出していきます。このとき、検証したい内容の必要最小限のスコープはどうなるか?といった観点でも議論が行われています。
洗い出されたタスクがスクラムサイクルに乗り、開発が進んでいきます。
その後、QAを実施して施策がリリースされます。
バックエンドチームのタスク管理やリリースフローについては他の記事もあるので、よければご覧ください。
2. 技術スタック資料にGo / Ruby / TypeScriptとありますが、どのように使い分けていますか?
こちらの資料から質問をいただくことがあります。
Go
mikanのメインのAPIサーバで利用しています。
他にも、教材データの入稿ツールやデータ修正用の簡易なスクリプトの開発にも利用されており、バックエンドチームが使う主要なプログラミング言語になっています。
Ruby
過去に開発したAPIや、mikan for Schoolで学校や塾の先生方に提供している管理画面がRuby on Railsで作られており、そこで利用しています。
APIの方は徐々にGoのAPIに置き換えられているため、バックエンドチームがあまり書くことはありませんが、何かの不具合の対応や、機能拡張が必要であれば対応しています。
管理画面の方はfor School事業の開発メンバーが改善しているため、こちらもバックエンドチームが書くことは多くありません。
TypeScript
Cloud Functions for Firebaseで利用しています。
mikanではFirestoreを利用しており、数は多くありませんがFirestoreのイベント駆動で行う処理が書かれています。
例えば、my単語帳の音声生成処理などがあります。
詳しくはこちらの記事をご覧ください。
新規にCloud Functionsを作成することは無いのでTypeScriptもバックエンドチームではあまり書くことがありません。
ちなみに、for Schoolで生徒向けに提供しているWebアプリケーションはTypeScriptで書かれています。
3. どうしてGKEを選んだのですか?
mikanのAPIサーバはGoogle CloudのGoogle Kubernetes Engine (GKE)で運用しており、現在では単語帳以外のほとんどのAPIを提供しています。
私の入社前にはすでに運用が開始されていたため、改めて、導入を進めてくれたバックエンドチームのhoshiさんに聞いた内容を元にまとめてみました。
まず初めに、Google Cloudを選んだ理由はFirestoreとの親和性です。Google Cloud上で、Firestoreを含めたIAMの管理や、Cloud Functionsとの統合ができるようになります。
Kubernetesについては、ServiceやJob、CronJobなどの構成を定義して、様々な要件に耐えうるアプリケーションの構築が可能です。また、2019年当時は注目度の高い技術で、採用観点での強みとなりそうなことや、他社事例がCloud RunやCloud Functionsなどよりも豊富だったことなどが理由として挙げられます。
4. クリーンアーキテクチャとは書いているが、実際どのようになっていますか?
こちらの資料から質問をいただくことがあります。
mikanでは、クリーンアーキテクチャをベースにしたレイヤー分割を行っています。
具体的には、Infra層、Domain層、Controller層、Usecase層、Repository層となっています。各レイヤーをつなぎこむためのInputとOutputオブジェクトは定義しておらず、変換のための実装コストを省略しています。
mikan-bffというBFFサーバはGraphQLサーバとして稼働していますが、リゾルバがController層を担っています。
5. フレームワークやORMは何か使っていますか?
GoのAPIサーバでは、標準のnet/httpパッケージに加えて、ルーティングにgorilla/muxを使っています。
go-gorm/gormのようなORMは使っていませんが、プレースホルダのバインディングやScanが楽なのでjmoiron/sqlxを使っています。
6. 働き方はどんな感じですか?
私の場合は基本的に10:00〜19:00で働いています。大阪からフルリモートで働いています。
例えば歯医者の定期検診がある場合や、役所に用事がある場合などは業務時間中に抜けて用を済ませることもあります。
また、風邪などで「今日は無理しないほうが良さそうだな」と感じたら、Sickleaveを使ってお休みをもらうこともあります。
たまに出社する日は、混雑する時間帯を避けてオフィスに移動しています。
勤怠連絡は専用のチャンネルがあるので、そこに連絡しています。
Sickleaveに関しては、こちらをご覧ください。
7. チームの雰囲気
まず第一に、mikanのバリューである”Why” Driven、With User、Get it Done、Care for Teamを体現しているなと感じます。
目的に立ち返って当事者意識を持ちながら、仕事をやり抜いてくれるので信頼できます。
仕事を進める上でユーザやチームへの配慮もあるので安心感があります。
これはバックエンドチームに留まらず、mikan全体に言えます。
月並みですが、優しくて個性豊かな面白い人たちが集まっているなと思います。
8. 入社前後のギャップはありますか?
正直なところ、あまりありませんでした。
選考中の段階でNotionやSlackへのアクセス権をもらえて、人事以外の情報にほぼすべてアクセスできるようになっているので、好きなだけ情報を知ることができました。
選考フローの中に体験入社があるのですが、そこで適宜質問させてもらうことで不明点はクリアになっていましたし、入社後もバディが付いてサポートしてくれるので、都度質問させてもらっていました。
「あまりない」と書いたのは、mikanのメンバーがそれぞれどんな役割で、何を期待されているのかが入社してから分かったのが理由です。これは良い面も悪い面もあって、悪い面では、自分が勝手に期待しすぎてしまってコミュニケーションのミスが起きたことがありました。
人数が増えてきているので難しい部分もあるとは思いますが、もっと対話をしておけば良かったなと反省する部分です。
9. 他のチームとはどういうふうに関わっていますか?
mikanの組織図は次のようになっています。
PM & Marketing
上述したバックログ整理会やキックオフ、分析基盤に関する問い合わせなどで一緒に仕事をすることが多いです。
PMに関しては一緒にデイリースクラムをやっているので、毎日コミュニケーションを取っています。
Design
一緒にデイリースクラムをやっているので、毎日コミュニケーションを取っています。
どちらかというとデザイナーはモバイルチームとのやり取りが多く、バックエンドが絡む部分のやり取りはあまりありませんが、バッチシステムの稼働状況によってUIを変えたいというような場合で状態遷移や問い合わせフローなどの仕様を一緒に決めることがあります。
Mobile
一緒にデイリースクラムをやっているので、毎日コミュニケーションを取っています。
施策を一緒に進めたり、不具合調査を一緒に行ったりと、一番やり取りの多いチームです。
Bizdev
新規契約するにあたっての実現可否などの調整をすることがあります。
Contents
データ入稿に関することでやり取りをすることが多いです。
QA・CS
ユーザからのお問い合わせや、QA結果に関する対応でやり取りをしています。
HR
特に採用周りで一緒に仕事をすることが多いです。
for School事業
事業は異なりますが、共通のバックエンドがあるため、それについて設計や実装をすることがあります。
まとめ
この記事では、バックエンドチームのカジュアル面談でよく聞かれる質問とその回答について紹介しました。
以下は記事の要約です。Notion AIにまとめてもらったものを軽く修正しました。
バックエンドチームではスクラム開発を取り入れており、プロダクトバックログの決定やキックオフなどのプロセスを経て開発を進めています。
技術スタックとしてGo、Ruby、TypeScriptが使用されており、それぞれの言語は異なる用途で活用されています。
APIサーバはGoogle Kubernetes Engine (GKE)で運用されており、Google Cloudの特徴と親和性が理由で選ばれました。
バックエンドのアーキテクチャはクリーンアーキテクチャをベースにしており、レイヤー分割を行っています。
フレームワークやORMは、gorilla/muxやjmoiron/sqlxが使用されています。
バックエンドチームの働き方は柔軟で、リモートワークが主流です。
mikanのバリューを体現した個性豊かなメンバーが集まっています。
入社前後のギャップは少なかったです。
バックエンドチームは他のチームとも緊密に連携しており、共同で仕事を進めています。
この記事をご覧いただいて興味を持った方、EdTech領域での開発に興味がある方は、ぜひカジュアル面談でお話をさせていただけると嬉しいです!
この記事が気に入ったらサポートをしてみませんか?