2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
守りからはじめるカスタマーサクセス(全1記事)
リンクをコピー
記事をブックマーク
森脇和也氏(以下、森脇):株式会社空の森脇です。「守りからはじめるカスタマーサクセス」というタイトルで発表します。
私は、もともと決済領域でエンジニアをしていました。そのあと2019年に空に入社しています。空はバックエンドがRails、フロントエンドがReactとTypeScriptで書いているので、両方使って開発をしています。
空でどういうことをやっているかを、簡単に説明します。昨今の世界情勢として、「密を避けましょう」ということが強くいわれているかなと思っています。
そこにおいて、価格をコントロールして需要の平滑化ができますが、その価格をうまくコントロールして、需要を平滑化していくか。売上を高めたり、必要な人に必要なものを届けたりするお手伝いを「MagicPrice」というサービスを作って、クライアントのみなさまに届けています。
これは複雑なブラックボックスになったロジックというより、ルールベースで、人にわかりやすく、どういった時にどういった価格になるかをしっかりとフィードバックするシステムになっています。
先にまとめを言いますが、これからお話しすることは「品質管理はちゃんとやりましょう」ということにつきます。
まずこの話を始めていく前に、私たちのチーム構成を簡単に説明します。データサイエンティストやエンジニア、プロダクトマネージャー、カスタマーサクセスマネージャー、そしてデザイナー。こういったメンバーで1つのプロダクトを作り、スプリントを回しています。
このチームで開発をしていったときの話になりますが、(スライドを示し)とあるプロダクトの開発をしたときのざっくりとしたタイムラインです。先にお客さんのところに行ってヒアリングをしたり、デザインを作るためにいろいろなデザインスプリントをやったり、UIのワイヤーフレームを変えたり。そのあと実際に開発に入っていくにあたって、いくつかしくじりポイントがありました。大きく分けて3つあったかなと思っています。
最初のしくじりですが、そもそも今回の案件は半分受注したかたちになるので、受託の意味合いもありました。先にリリース日を握っていたことと、けっこう要件が多く出てきたので、「あふれるものはリリース後に対応しましょう」ということで逃げていました。
ただ、それでもかなりスケジュールがきつかったので、開発メンバーでレビューはもうやっている場合じゃないと。とりあえずインターフェイスだけはお互いに合わせて、おのおので実装しましょうという、相当ムチャなことをやって進めていました。
そして、ユニットテストも個人に依存していたので、書かれているシステムもあれば、まったくないものもありました。
ユニットテストがなければ手動テストをしますが、かといってテスト仕様書みたいなアウトプットもないので、どういった観点でテストをしたのかも、当然あとからは確認できないです。そのため、お互いにエンジニア同士で「よろしく、開発しましょう」という信頼駆動開発みたいに進めていたところが、1つ目のしくじりポイントになります。
続いて2つ目です。ここからテストに入っていきます。
「一通りできあがりましたね」「検証環境があるので、そちらにデプロイをして、実際に使っていきましょう」と。当然お客さんのシステムと接続するので、外部連携試験をやったあとは、モンキーテストでいろいろなバグを出していきましょう、みたいなことをやっていました。でも、「なんかテストの項目1個抜けていますね。これすっかり忘れていました」みたいなのがありました。
お客さんに実際に使ってもらうための受け入れ試験の環境も作って、「こういうシナリオでテストしてくださいね」と言ったのですが、そこも共有だけして、そのままになってしまいました。実際にこの環境を活用してお客さんがテストを事前にやってくれるように進められなかったのが、しくじりの2つ目になります。
ただ、この頃のチームの雰囲気としては、けっこうイケイケな状態でした。、リリースまであと少しというところで、検証環境やモンキーテストにおいて、多くの課題が見つかったし、デザイン上修正しないといけないところもありました。
リリース後、お客さんに対してオンボーディングするのですが、そこのプログラムを作らないといけないとか。あとは実際にMagicPriceを使ってもらって、どういう効果を実感してもらえるか。そういうレポートも考えましょうと。
「これはいいプロダクトになるぞ」と、みんなこういう前のめりな姿勢でいたんですね。ある意味けっこういい状態で、プロジェクトは進んでいました。
そして、しくじりの3つ目になります。いよいよリリースです。
リリースは無事できました。これから、リリース時に落とした機能も、「なるはや」で実装していきましょう。
あと、(当初は)同じお客さんの中でシステムを利用してもらっていたのですが、同じシステムを利用されている他社さんに対してもMagicPriceは使えるので、そういったところにも実際に導入してもらうという、けっこういいスタートダッシュが切れた状態でした。
なおかつ、売上とかプライシングに対する効果検証は、リリース時点ではこれからやっていく予定だったのです。価格の設定業務とか、そこに付随する業務とかもかなり効率化を図れました。
なので、いよいよプロジェクトチームみんな、さらなるプロダクトの進化を目指して、全員がイケイケの“攻め”の姿勢になっていました。
そんな中で、問い合わせが徐々に増えていくわけです。「社内で管理している数値や予約数が、MagicPriceで出ている数字と合っていないんですけど」とか、あとは冒頭で話したとおり、「ルールベースによる価格の決定というのをやっているのですが、どう見てもルールを満たしている気がするんだけれど、なんかルール発火していない気がします」とか。また、「データ更新されていないようですよ」とか。
というのが続き、1ヶ月で10件以上の不具合を出す結果になってしまいました。その結果、「MagicPriceは本当に大丈夫なのか」という不信を招く結果になってしまいました。
これはさすがにまずいということで、社内で緊急事態宣言を発令しました。なぜこうなったかという振り返りと、あとはそもそもプロダクトの品質をしっかりと担保するガバナンスが効いていなかったので、体制を作りましょうと。
あとは、今まで不具合が発生したときに、「修正リリースすればいいじゃん」という文化で来ていたところもけっこうありました。なので、「そこはしっかりとやりましょう」というような、見直しを進めていきました。具体的にどういう対策をしていたかは、次のスライドになります。
当然、テストが甘いところがあったので、テストをもう1回やりましょう、と。仕様書がないものはしっかりと再作成して、単体レベルから総合テストのレベルまでもう1回全部やりましょう、と。ユニットテストがないところはもう当然書きましょう、となりました。
けっこう時間も限られているので、書かない場合はプルリクエストにテストケースとして、「どういう観点でやりました」とか「手動の結果を貼っていく」ことをやって進めていきました。あとは、開発メンバーでしっかりとレビューの時間を毎日押さえて、「こういう観点で書いています」という相互レビューする時間を取りました。
あとはインシデントの管理です。ここはチームの中でもしっかりと認識を取りました。(インシデントを)やっぱりなかったことにするのが、お客さんにとっても一番まずいので。けっこう障害が続くともう嫌になっちゃって揉み消したくなる気持ちも働くのですが、そこはやらずに真摯に向き合いましょう。これをやってしまうと、もう一気に信頼を損ねるので、それだけはやめましょう。
障害一覧をしっかりと管理をして、再発防止策をそれに対して練っていくのを、チーム全体で回していきました。同時に、プロダクト上でアラートは出しているのですが、「本当にエラーになったときにアラートが出てるの?」というところも精査しないといけなかった。そこをしっかりと精査して、修正することをやっていました。
まだあるのですが、リリースのフローの整備を一緒にしています。本番にデプロイするまでにどういう経路をたどって、どの環境で何の項目がOKだったら次のステップに入れるかをしっかりと定義をした上で、そのフローに沿ってリリースしましょう。
また障害が起きたときに、どういう対応のフローに沿ってやっていくかをしっかりと決めました。お客さんに対する伝達の方法や、「このパターンのときはこういうリカバリをします。これはどれぐらいかかります」とか。休日や祝日に起きた場合は対応するのか、翌営業日にやるのか。そういうところまでしっかりと決めた上で運用することをやっていました。
最後、まとめになります。今まで話してきたことは、けっこう当たり前のことではありますが、そこが多く漏れている部分があったので、当たり前に守るべきところはしっかりと守りましょう。
今回はけっこう手ごたえがあったぞとか、これはけっこういいプロダクトになるぞ、みたいなそういう部分でチーム全員が前のめりになってしまった結果、“守る”意識がわりと低くなってしまったところもあります。
あと、プロジェクトマネージャー的な人もいなかったので、俯瞰して見る人が必要でしたねという部分もあります。ここは引き続き、今も空ではエンジニアの人数が足りていませんので、ぜひ助けてくださいと言いたいところです。
テスト前には最初に計画をしっかりと決めておきましょうねということを、まとめにしたいと思います。
最後に、これを通してやった結果、10件あったインシデントが翌月4件ほどになり、今は1件ほどと、障害の数をかなり減らせている状況です。といったところで、発表を終了したいと思います。ありがとうございました。
田仲紘典氏(以下、田仲):ありがとうございました。これは品質保証の話なのですが、ちょっと一筋縄ではいかないところもけっこうあると思います。質問がいくつか来ているので、1つずつ聞いていきますね。レビューや単体テストを省いてまで、厳密にリリース日を守らなければならなかった理由は何ですか?
森脇:そこは、プロジェクトが始まる前に、すでに「この日までにリリースをしましょう」というお互いの合意がありました。それをあとから変えていいかどうかが、私は途中から入ったのでよくわかりませんでした。「リリース日はこの日だ」という前提で進めてしまったのは、確かに反省すべき点ではあったかなと思っています。
「このままリリースしたら、まずいですよ」「もう少し時間が欲しいです」みたいなところは、内部でも話はしていました。だからその時に、リリース日をちょっと延ばしませんかという話をしていたら、状況は変わっていたかもしれません。
田仲:ユニットテストや、手動テストから切り替えられた部分はありましたか?
森脇:そうですね。そこはもう少し時間をかけて、その品質の向上に時間をあてられたかなと思っています。ただ一方で、先ほども言ったとおり、その当時のチーム状況からして、次の開発をしてしまっていたリスクもあるなと思っていて。今となっては「たられば」の話になってしまいますけど。しっかりと品質に向き合える判断をできたかは、ちょっと自信はないです。
田仲:なるほど(笑)。質問がめっちゃ来ていますが、あと2点聞いて、発表を終わろうかと思います。
2つの質問のうち、1つ目が、「ビジネスサイドからもっと早くみたいな無理難題が来て、品質が犠牲になるケースがスタートアップだとあるとは思いますが、こういう時、どう対応するのがいいと思いますか」。森脇さんはどうですか?
森脇:そたぶんこれ、みんなが悩んでいるポイントだと思います。なんでしょう。守るべきラインをあらかじめ決めておくというところかなと思います。
当然、最初から完璧なものなんてできないので、そこはお客さんにもしっかりと説明をしてわかってもらいつつ、コミュニケーションツールとしてMagicPriceはまだ子どもなので、最初はエラーがあるかもしれませんが、徐々に大人になって、よくなっていきます。
メンバー間でコミュニケーションはしていますが、今回に関してはそもそものテストができていなかったとか、お客さまにそのリリースを報告したと言える状態には遠かった点がありました。今回の例で言うと、最低限、しっかりとデータが反映できるか、ルールが発火するかのテストは、やってからリリースすべきだったかなと思っています。なので、そこの線引きを最初から決めておくところかな、と思いますね。
田仲:クライアントとしっかり品質のことをビジネスサイドと交渉しながらやる、というところですよね。
森脇:そうですね。
田仲:品質は絶対担保する、という守りを絶対やっておく感じですね。あともう1点、みんな前のめりになっている状況でも、本番リリース直前になにかしらの予兆はあったんじゃないかなと思って。今振り返って、何かありましたか?
森脇:そうですね、予兆はありました。開発をしている中で、スケジュールもキツキツだったので、けっこう心配というか。そういったアラート、「けっこう時間ないですね、どうしましょう」という話はチーム内でしていました。スタートアップだからじゃないですが、そこはなんか気合で乗り越えようという判断でした。
田仲:気合で(笑)。
森脇:だからそこは気合と根性で乗り越えたんですね。そこの部分で、もしかしたら、「このままだとマズいね」という判断をする人がいれば、当然「ちょっとスケジュールを見直しましょう」という話にはなったと思います。
田仲:はい。気合と根性は、バズワードみたいになっていますね(笑)。という感じで、いったん質問は切り上げようかなと思います。
関連タグ:
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05