• QA

セール関連のインシデントをチームの垣根を越えてみんなでゼロにした話

notion image
 
こんにちは!令和トラベルでQAエンジニアをしている高木 涼子です。
わたしは2022年9月に令和トラベルに入社し、海外旅行予約アプリ『NEWT(ニュート)』のQA活動を日々行っています。
この記事では、NEWTのセール開催の中に発生していたインシデントをチームの垣根を越えてゼロにした話について紹介します!

セールについて

 
NEWTは、海外旅行をかんたんに、スマートに提供するプロダクトです。海外旅行というサービスは特性上、”季節性”に大きく影響するサービスの一つです。多くの人は日々旅行に行きたいと思うものではなく、例えば夏が近づけば、夏休みに旅行の計画を立てたいと検討したり、学生にとっては卒業シーズンが近づけば卒業旅行を考えます。こうした季節の変化によって、カスタマーの旅行意欲は強まります。
過去にリリースした学生旅行を応援するキャンペーン
過去にリリースした学生旅行を応援するキャンペーン
NEWTでは、こうしたカスタマーのニーズに寄り添うために、定期的にセールを開催しています。
現在は「秋のWメガトク」を実施中で、クーポン最大15%OFF × ポイント還元10%という破格のおトクを実現しています!
 
毎回のセールは、マーケティングチームが中心となり、どんな企画でセールを開催するかを検討します。セールは、マーケティングチームだけでなく、ツアー企画チームやビジネスチームなど、多くの関係者の協力によって毎回企画されます。
セール開催までの流れは、
  • マーケティングチームが中心となり、セールのコンセプトを決定する
  • 企画内容にそって、ツアー企画チームやビジネスチームが在庫の仕入れなどを行う
  • セールの内容に合わせてプロダクトチームの開発が必要であれば開発を行う
簡単に、このような流れで進行します。
 
さらにセール開催に向けて、セールを周知するためのLPを制作します。マーケティングチームがLPを作成し、NEWTのTOPページのおすすめバナーにLPへの導線を表示しています。LP内には、セール中のツアーやホテル情報、クーポン取得導線などが設置されます。
NEWTのおすすめにLPが表示される
NEWTのおすすめにLPが表示される
 
そしてこれらのLPからNEWTアプリへの導線は全て、Firebase Dynamic Links(以降DeepLinkとします)という機能を用いて、実装されています。
※詳細はこちらの記事をご覧ください!

インシデントについて

 
さて、実際にセール開催時にどんなことが起きていたかというと、セール開催までの流れで触れたように、セールには多くの関係者が関わります。その分、コミュニケーションも複雑となり、企画内容やスケジュールがチームを越えててうまく伝わりきらないことが起きていました。
その結果、マーケティングチームがセールLP内で使用できると思っていた機能が想定通りに動かないままの状態だったことが、リリース直前に社内で気づかれるなどが多発しました。
特にセールにおいて、ツアー情報やホテル情報からのカスタマー流入はとても重要な導線なのですが、一時期DeepLinkが正常に動かず、頻繁にデグレが起きるという悲しい事象が頻発していました。
「ツアーをみる」というボタンにDeeplinkが組み込まれている
「ツアーをみる」というボタンにDeeplinkが組み込まれている
 
デグレの原因は様々で、DeepLinkを直接改修して発生したものもあれば、リファクタリングによる影響がDeepLinkの挙動にまで及んでしまった、というものもありました。
アプリでこのようなインシデントが発生すると、セールを一時的にSTOPしなければならなかったり、思うように訴求が打てなかったりして、会社全体に影響し、結果的にカスタマーに良くない影響が出てしまいます。
そこで私たちは”DeepLinkバグ撲滅委員会”を立ち上げ、再発防止策を検討しました。
本当にこんな名前のミーティング(笑)
本当にこんな名前のミーティング(笑)

取り組んだこと

では、QAメンバーを中心に、問題解決に向けてどのような取り組みをチームで行っていったかについて紹介します。

1. ドキュメントの作成

まずは関係者全員で、DeepLinkの現状、運用方法を整理しました。すると、そもそも開発チーム内でも実装しているDeepLinkの挙動の認識に異なる点があること、実際本番で運用しているマーケティングチームとは、より認識に乖離があることが分かりました。
 
特に、LPをアプリ内のwebviewで開き、「ツアーをみる」や「ホテルをみる」といったDeepLinkのボタンをタップしたときの挙動が、iOSとAndroidで異なることが判明しました。
  • Android:デフォルトでwebviewからの遷移にも対応できる
    • DeepLinkを新規実装する際、webviewからの遷移があるかを特に考慮する必要がない
  • iOS:デフォルトではwebviewからの遷移に対応できず、別途実装が必要
    • DeepLinkを新規実装する際、webviewからの遷移があるかを考慮する必要がある
 
こちらの認識が開発チーム内でも合っておらず、またどのDeepLinkがwebviewからの遷移に対応しているのかを示すものも存在しなかったため、webview遷移を実装していないDeepLinkがLPに載ってしまい、実際ボタンをタップしてみると動かない、といったことが発生していました。
そこで、Mobile DeepLinkというnotionページを作成し、こちらでDeepLinkの挙動に関して一元管理することにしました。
DeepLinkを一元管理するnotionの一部
DeepLinkを一元管理するnotionの一部
 
こちらのnotionを作成したことで、
  • DeepLink新規実装時:webviewからの遷移にも対応する必要があるか、仕様考慮段階から検討
  • DeepLink運用時:アプリ内webviewに対応しているもののみ、LPに載せる
というフローを確立することができました。
 
また、ドキュメント作成に付きものなのが、変更が入っても更新を忘れてしまうという点なのですが、こちらも毎週のアプリチームの定例で必ずこのnotionを確認するフローを取り入れ、定期的に更新できるフローを整えることで、運用に耐えうるプロセスを構築しました。

2. テスト用LPの作成

DeepLinkには、リファクタリングなどによって意図せず改修が入ることもあることから、いつでもテスト環境でwebview内のDeepLinkを確認できるようにする必要がありました。というのも、セールなどで作られるLPは本番用のみで、そちらをテスト環境にアップロードしても、ドメインの違いによりDeepLinkの正確な挙動を確認できないためです。
そこでデザイナーチームに協力してもらい、テスト環境用の簡易LPを作成してもらいました。
テスト環境用の簡易LP
テスト環境用の簡易LP
 
こちらを恒常的にテスト環境にアップロードしておくことで、いつでも主要なDeepLinkをwebview経由で確認することができるようになり、万が一デグレが起きても素早く気づけるようになりました。

3. Regressionテストの整備

現在、NEWTアプリは1週間に1回のサイクルでリリースを行っています。そして毎回リリース前には、Regressionテストを実施して、主要なフローにデグレが起きてないか確認しています。NEWTにおける主要フローというのは、会員登録 → ログイン → ツアー/ホテル検索 → 決済 → キャンセルの導線で、初期の頃はDeepLinkに関するケースは存在しませんでした。
 
しかし、DeepLinkが正しく動かなくなることは、頻繁にセールを行っているNEWTにとって、インパクトのあるインシデントであり、そのようなインシデントを防ぐためにも、Regressionテストの対象としてDeepLinkの確認を入れるようにしました。

4. チームを超えた定期的なコミュニケーションの場の設定

1~3の取り組みによって、プロダクトチームとして機能担保を毎回のリリースで行えるようになりましたが、そもそもプロジェクトマネジメントがうまくワークしていなかったり、プロダクトチームに遠慮して課題感を共有できていないのでは?という懸念から、雑談をベースとしたコミュニケーション機会を設けることにしました。
最初に課題と認識しているポイントを双方で洗い出し、一つずつ対応策を考え、次回定例までに取り組みの結果がどうだったかを確認し、解決していなければ再度検討、解決していたら次の課題を解決する、、、といったサイクルを約3ヶ月ほど一緒に行いました。
 
隔週でマーケティング担当、QAエンジニア、PM/デザイナーで”Growth x Product 課題sync”という定例を設け、主に下記のようなアジェンダを話す場を作りました。
  • マーケティング x プロダクト関連の施策で新しい課題がないかの確認
  • 困っていることはないか
  • インシデントの振り返りと再発防止の検討
 
具体的には、主なボトルネックと対応策はこのようなものがありました。
  • プロジェクトマネジメント
    • 関係者は多いのに、スケジュールにバッファがなく、一つ前の工程が1日でも遅延すると後続作業に影響が出る状態だった
    • → 理想スケジュール・ゴールを明確にし、誰がいつ何をすれば良いかを最初に明確にする。
      役割が1人に集中していたため、役割分担ができる体制へ改善。
  • セールリリース直前に見つかる不具合
    • マーケティングチームだけでLPの品質保証を行っている状態だった
    • → リリース前にQAチームが最終チェックを行い、セールの品質管理を行えるプロセスへ。
      セールLP内で機能要件が曖昧だったため、ドキュメントベースで事前に要件を定義し、機能の実装漏れがないかレビューできる状態に改善。
最終的に、3ヶ月後には課題がほぼなくなり、この定例が不要な状態になりました!定期的なコミュニケーション機会はなくなりましたが、何か困っていることがあればマーケティングチームから以前よりも気軽に相談してもらえるようになった点は、この定例開催の副次的効果として得られたポイントです。

取り組みの結果

 
3-5月では、毎月のようにDeepLink絡みのインシデントが発生していましたが、フローを徐々に整えたことにより、6月以降はDeepLink絡みのインシデントを0件にすることができました!
毎日インシデントチャンネルの通知に怯えていたあの頃が、もはや懐かしいです(笑)
 
DeepLinkにまつわるインシデント数
DeepLinkにまつわるインシデント数
 
プロダクトチームとしては、インシデントがなく安定的にセールを開催できるようになり、障害対応に追われる時間がなくなったので、新しい価値を創造する開発に時間を使えるようになりました。
マーケティングチームとしても、安心してセールを開催できるようになり、よりカスタマーにとって嬉しい企画の検討や販促を大々的に行えるなど、時間をポジティブなものに活用できるようになったと感じます。
何よりカスタマーの皆様にとって安心してプロダクトを使える状態を作れたことが、大きな成果だと思います!

さいごに

 
今回は、セールに関連したインシデントをゼロにした取り組みに関して紹介しました。
私たちNEWT QAチームは、日々チームの垣根を越えた品質活動を目指していますが、まさに今回紹介したセールに関する取り組みは、プロダクトチームに限らない、NEWT全体の品質作りにつながる活動ができたと思います。
 
NEWTでは現在、「秋のWメガトク」を実施中なので、ぜひご覧ください!(二回目)
その他のキャンペーン情報などもこちらからぜひチェックしてくださいね!
 
そして、ぜひこの記事を読んで会社やプロダクトについて興味を持ってくれた方はご連絡お待ちしています!
フランクに話だけでも聞きたいという方は、カジュアル面談も実施できますので、お気軽にお声がけください。
 
さらに定期的に令和トラベルの技術や組織に関する情報発信を開催予定です。connpass にてメンバー登録して最新情報をお見逃しなく!
 
それでは次回のブログもお楽しみに!Have a nice trip!!