LINEヤフー Advent Calendar 2023の5日目の記事です。
こんにちは。Yahoo!ショッピングでポイント周りのバックエンドおよびSREを担当している蛭田海斗です。
この記事では、Yahoo!ショッピングにおける複雑なポイント付与を実現しているシステムについて概観し、ビジネス要件と技術要件のトレードオフとうまく付き合いながら、開発を行っていくためのTipsを紹介します。
Yahoo!ショッピングにおけるポイント付与
Yahoo!ショッピングで は、さまざまな条件のキャンペーンが開催されており、購入後一定期間経過した後にポイントが付与されます。
たとえば、過去に開催されたものも含めて、次のようなキャンペーンがあります。さまざまな条件があることがこれだけでもわかりますね。(終了したキャンペーンの可能性があります。詳細なキャンペーン条件については各ページをご確認ください。)
キャンペーン | 条件 |
---|---|
5のつく日 | PayPayなどの決済限定、エントリー有り |
ボーナスストア | ボーナスストア限定 |
超PayPay祭 | 事前購入限定 |
ハッピー12アワー | 金額下限あり |
買いだおれ | 期間内に購入したストア数での倍率変動 |
プレ肉 | 期間内に購入した合計金額での倍率変動 |
マーケティング担当者としては、最も効果的なユーザーセグメントに対してキャンペーンを実施したいと考えます。その影響で、ポイント付与の条件は多岐にわたり、非常に複雑です。
各種キャンペーンは汎用性を持たせるために、抽象化されたドメインモデルを用いたシステムが組まれています。これにより前述のようなキャンペーンを実現しています。複雑な 要件のため、現状Yahoo!ショッピングの中でトップクラスに大きなシステムになっています。つまり、現状のシステムのドメインモデルに沿わないようなキャンペーンの実現には、広範囲でのシステムの改修が必要となり、多大な工数がかかります。
ビジネス要件と技術要件のトレードオフ
Yahoo!ショッピングを魅力的なものにするため、マーケティング担当者からは、日々キャンペーンの要望が出てきます。一方で、現状のシステムのドメインモデルに合わない要望も多く来ており、それらをそのまま実現すると、前述の通り大きな工数がかかります。たとえば「キャンペーンに複数の付与上限値を設定したい」「付与見込額の表示をリアルタイムに更新したい」などです。
これらをまとめると、現実として以下のようなトレードオフが存在すると言えます。
選択肢 | 工数 | 達成される要件 |
---|---|---|
要件をそのまま実装する | 大 | すべて |
現状のシステムに沿った要件に変更する | 小 | 部分的 |
とくにYahoo!ショッピングは競合も多いECサイトのポイント付与の部分であり、ビジネス環境の変動が激しく、工数がかかる要件を実装する余裕のない場面が多いです。そのため、ポイントの担当エンジニアは、このトレードオフを正確に理解し、ビジネス要件と技術要件のバランスを取る提案をマーケティング担当にする役割が求められます。(実際にはマーケティング担当との間に企画担当が入って取り持ってくれていますが、ここでは簡単のため単にマーケティング 担当としています)
このために必要なのは、
- マーケティング担当が実現したい内容を正確に把握すること
- 現状のシステムで実現する際の見積もりを正確にすること
- 1と2を踏まえて、マーケティング担当に対して適切な提案をすること
の3点です。それぞれについて現実的なTipsを参考文献とともに紹介します。
1. マーケティング担当が実現したい内容を正確に把握すること
この部分については本質的にはコミュニケーションを丁寧に取っていくしかありません。とくに以下を意識しています。
意識している項目 | 詳細 |
---|---|
キャンペーンを実施する理由を確認する | キャンペーンを実施できるかどうかではなく、それよりも視座の高い提案を行うため。同じことを達成するにしてもシステム目線では別の施策の方が圧倒的に簡単な場合がある。 |
期限をいつまでずらせるか確認する | それにより提案できる内容が変わるため。そもそもずらせない場合はその前提で要件を落とす方向で提案することに注力する。 |
「ソフトウェア要求」という書籍の3章以下のように書かれています。
ステークホルダー全員がすべての要求について、なぜそれが必要かを理解できるように、それぞれの要求をさかのぼってその発生源まで追跡する。要求分析の目標は、十分な品質と精密さを備えた要求を作成することである。ここでいう精密さとは、マネジャーが現実的なプ ロジェクト見積もりができ、技術スタッフが設計、構築、テストの作業に進むために十分なレベルの精密さを意味する。
要求の発生源を理解すること、見積もりができることの重要さがソフトウェア要求という文脈において述べられています。後者について補足しておくと、ビジネス上の期限を確認することは、すなわち見積もり上許される値の範囲を確認することと等しいです。これにより、マーケティング担当に対して、現状のシステムで実現できる範囲の提案を行うことが可能になります。
2. 現状のシステムで実現する際の見積もりを正確にすること
この部分については現状のシステムを理解できていることが前提として必要になります。その前提で、とくに以下を意識しています。
意識している項目 | 詳細 |
---|---|
見積もりとコミットメントの違いを意識する | 見積もりとは「どれくらいの工数がかかるか」、コミットメントとは「いつまでにリリースするか」。そしてコミットメントをマーケティング担当に伝える。 |
影響コンポーネントを数える | 数えることにより経験と勘で見積もるより正確になる可能性が高い。たとえば「4コンポーネントあるので4×5で20人日」など |
「ソフトウェア見積もり 人月の暗黙知を解き明かす」という書籍の1章には以下のように書かれています。
見積もりとは、プロジェクトにかかる期間やコストを予測することターゲ ットとは実現したいビジネス上の目標を明文化したものコミットメントとは、定義された機能を、特定レベルを確保しながら期日までに納品するという約束「見積もり」、「ターゲット」、「コミットメント」はそれぞれ異なるものであると認識しよう。
私もこれらの違いを明確に意識し、マーケティング担当に対してはコミットメントを伝えるようにしています。さらに、そのコミットメントを達成するために、なるべく正確な見積もりが必要です。それについても7章に
できるときはいつでも、まず数えよう。数えられないときは、計算しよう。判断だけに頼るのは最後の手段だ。
と書かれています。これに倣って、機能を実現するためのマイクロサービスを数えて、合計の工数を見積もるようにしています。
3. 1と2を踏まえて、マーケティング担当に対して適切な提案をすること
この部分についてはシステムに詳しくないマーケティング担当に対して、適切な選択肢を提示することが求められます。ここでは以下のようなことを意識しています。
意識している項目 | 詳細 |
---|---|
選択肢を3つ程度提示する | 実現したい内容とシステムの制約による工期のバランスを調整した案を3つ程度提示することで、プロジェクトを進めやすくなる |
推奨の選択肢を合わせて提示する | どの選択肢がシステム目線では推奨なのかを明示することで、マーケティング担当が意思決定しやすくなる |
「アジャイルな 見積もりと計画づくり」という書籍の1章には以下のように書かれています。
見積もりと計画があってはじめて、意思決定が下せる。価値とコストを見積もっていないプロジェクトに、実施するだけの価値があるかどうか、どうやって組織は判断すればよいのだろうか?
私がこれを読んで感じたことは、見積もりや計画は、意思決定を下すためのツールであり、エンジニアとしては、マーケティング担当者が意思決定を下しやすいように、それらを提供していく必要があるということです。
その上で、社内ではよく松竹梅の3つの案を提示することや、推奨の選択肢を明示することが良く行われています。心理学ではゴルディロックス効果というものが知られており、選択肢を3つ提示すると、その中間の選択肢を選びやすいことが知られています。
つまり、マーケティング担当に対して、2つの極端な選択肢とその中間の選択肢を提示し、その中間を推奨の選択肢とすることで、プロジェクトを進めやすくなります。
たとえば、システム刷新のプロジェクトでは次のような選択肢を意識して提案を行いました。この場合は松と竹の差が小さくはなっていますが、技術的には竹の内容の方が推奨なため、中間の選択肢としています。リスクとしては竹がまさに中間です。
選択肢 | 工数 | リスク | 実現される要件 | 概要 |
---|---|---|---|---|
松 | 中 | 大 | 大 | すべてを一気に移行する。2年程度はかかる。 |
竹 | 大 | 中 | 大 | すべてを段階的に移行する。3年程度はかかる。 |
梅 | 小 | 小 | 小 | 大きな移行はしない。半年程度かかる。すべての要件は達成できない。 |
その結果、リスクと要件のバランスが取られた結果、無事に竹を選択していただけました。このように3つの選択肢を提示することで、マーケティング担当者にどの要素が重要なのかを考えてもらいやすくなります。
まとめ
以上、Yahoo!ショッピングにおける複雑なポイント付与を実現しているシステムについて概観しつつ、ビジネス要件と技術要件のトレードオフとうまく付き合いながら、開発を行っていくためのTipsを紹介しました。
エンジニアはシステム開発を単独で行うわけではなく、他者とのコミュニケーションが必要不可欠です。さらに、ChatGPTなどの生成AIが出現し、エンジニアに求められる要件も日々高度になっています。「それは難しいです」とただ伝えるだけではなく、マーケティング担当者と協力しながら、プロジェクトを前に進めるための一助となれば幸いです。