はじめに
こんにちは!クラシルリワードでサーバーサイドエンジニア兼 PM をしている宇野です。
自分は去年の3月からクラシルリワードに JOIN して、おみくじや歩数、お得タブなど新機能の実装を担当してきました。
この記事では、学習サイクルを素早く回すために自分が意識していることを紹介します。
dely にきて初めて記事を書くので軽く自己紹介をさせてください。こんな人です
- dely にきてそろそろ2年が経過します。
- ポケモンとご飯が好き。土日は大体ポケモン対戦か美味しいお店を巡っています。
- 最近食べて美味しかったのは「だしいなり海木 日本橋店」です tabelog.com
それでは本題にいきます!!
想定読者
クラシルリワードは約5人1チームの少人数で開発をしています。そのため、同じぐらいの人数で開発をしているエンジニアを想定しています。
詳しい開発体制については開発責任者の funzin の記事を見てもらえると嬉しいです。
なぜ素早く学習したいのか
そもそもなぜ素早く学習サイクルを回したいのかというと、開発した機能をユーザーさんが使ってくれるかは分からないからです。どんなに仕様を綺麗にしてバグがない状態でリリースできても、ユーザーさんが使ってくれないとビジネス価値にはつながりません。特に自分が担当している新機能開発ではユーザーさんが動くか分からないので、リッチな仕様にするのではなく価値検証ができるミニマムの仕様でリリースすることを心がけています。そして、分析・学習をして次に活かすというサイクルが大事になってきます。大きくなる前にリスクを潰せて前に進むことができ、小さいチームでも大きな仕事ができます。
目標を可視化して、チームで進捗の認識を合わせる
自分たちはスクラム開発を採用しており、毎週スプリントプランニングを開催してスプリントゴールを設定しています。ただ、目標を設定するだけでは日々の仕事に追われて意識することは難しく、週の終わりに思い出すという事はよくあると思います。
この解決のために開発するときによく利用する場所にスプリントゴールを書くことにしています。Slack チャンネルのトピックやデイリースクラムで毎日見る Notion に貼り自然に目につく仕組みにしています。さらに、スプリント中盤に目標の進捗を確認することで「順調に進んでいるか」「順調ではない場合、ボトルネックは何か」を議論できるようにしています。 こうすることで、チーム全体で目標の認識が揃い最短で目標達成するための行動が考えられるので、開発仕様が洗練されてリリースまでの期間が短くなります。
専門領域を越境する
(※) ここでいう越境は、自分の専門領域外の仕事をするだけではなく関心を持つ・学ぶことも含めます。
これはリリースまでの期間を短くすることに直接は関係ないのですが、専門領域だけではなく他の領域に越境することで学習サイクルが速くなると考えています。エンジニアなら「CS でどういうお問い合わせが来ているのか」「マーケティングチームはどういう施策を考えているのか」などを知ることを指します。これをすることで、相手の話している背景や目的を理解することができるので、「それを実現したいなら、この方法の方が最速で出せる」という話ができたりします。また、優先して改善すべき機能が分かったり、将来的にやりたいことの解像度が上がり設計にも役立ちます。
当時、自分は広告周りのことが全く分からないまま PM にアサインされたので事業責任者にお願いして広告勉強会を開いてもらったりしました。これは人数が少ないからそうせざるを得ない部分もありますが、越境をすることで自分が関わっているサービスを開発以外の観点からも見ることができ開発がより自分ごと化します。
注意点としては、インプットする情報を少なくして専門領域に集中して成果を出すことが求められることもあります。越境する時・しない時のタイミングは意識して考えるのが良いと思います。
初期は手動運用でスタートする
エンジニアの三大美徳に「怠惰」があり、これは「楽をするために努力を惜しまない」と説明されることが多いです。例えば、繰り返し作業をするのが面倒なので、自動化して効率を上げるために開発をするなどです。これとは対立するのですが初期の学習サイクルを1秒でも早く回すために運用効率化の改善をしないのはありだと考えています。
「簡単に実装できるし手動運用めんどくさいから管理画面を作ってからリリースする」と考えたくなりますが、「設計 → 実装 → テスト」というフローを考えると最短でも 1 - 2日はかかると思います。せっかく管理画面を作っても機能を使って貰えなかったら意味がありません。
ユーザーさんに機能を触ってもらい価値検証ができるまでは手動運用で頑張り、検証ができてから自動化をします。
例えば、以下のようなパターンが考えられます。
- 管理画面は作らず、CSV とスクリプトでデータベースの更新をする
- ハードコードをして、変更する場合は都度デプロイする
- エンドポイントを用意せず、Firebase Remote Config から情報を取得する
「たかが1日、されど1日」ということで、少しでも開発工数を削減してリリースすることを心がけています。もちろん、運用の効率化も大事なことなので機能開発と運用改善はメリハリが大事になります。
最後に
今回は「学習サイクルを素早く回すために意識していること」を紹介してきました。
1つ1つはすごく簡単なことですが、凡事徹底してこれからもクラシルリワードを改善していきます。
ここまで読んでいただき、ありがとうございました!