ある日、ゴルフ仲間にワンダフを使ってもらえることになった。自分もラウンドしながら、知り合いにも同時に使ってもらう。開発者としては、ユーザーの隣でリアルタイムにフィードバックをもらえる最高の機会だ。

朝の集合時間に「このURL開いてみて」とスマホで見せた。「へー、おもしろそうじゃん」。嬉しかった。

嬉しかったのは、最初の5分だけだった。

最初の報告 — 「全部シャンクになるんだけど」

3ホール目がショートホール(パー3)だった。知り合いがティーショットを打って、グリーンを外した。よくある右への吹き流しだ。アプリでミスを記録しようとしたところ、困った顔で画面を見せてきた。

「なんかシャンクしか選べないんだけど」

ワンダフの入力は、YES/NOで答えていくだけのシンプルな仕組みだ。「ダフった?」→ No →「トップした?」→ No → と進んでいくと、ミドルやロングホールならその先に「曲がった?」→「飛びすぎ?」と続いて7種類のミスから選べる。ところがショートホールだけ、ダフりとトップを否定するとシャンクが確定してしまう分岐になっていた。

普通にスライスしただけなのに、記録上は全部シャンク。さすがに笑うしかなかった。

開発者は「よくあるパターン」しかテストしない。ユーザーは開発者が想定しないパターンを平気でやってくる。当たり前のことなんだけど、目の前で起きると本当に冷や汗が出る。

致命的な報告 — 「ハーフ終わったらデータ全部消えたんだけど」

前半9ホールを終えて、昼休憩に入った。知り合いがスマホを見ながら言った。

「あれ、データ全部消えてない?」

血の気が引いた。

実は、途中でアプリを閉じても再開できる仕組みはちゃんと実装してあった。TOPページに「続きから再開する」ボタンが出て、途中のホールから再開できるようになっている。テストもした。動作確認もした。

でも、ひとつ見落としていた。

知り合いはワンダフを「ホーム画面に追加」して、アプリのように使ってくれていた。PWA(プログレッシブウェブアプリ)としてはむしろ正しい使い方だ。でもホーム画面から開くと、ブラウザのURLバーも更新ボタンもない。つまり、TOPページのキャッシュが更新されない。

再開ボタンの表示は、TOPページが読み込まれた時にlocalStorageを確認して動的に出す仕組みだ。ところがPWAモードではTOPページがキャッシュされたままなので、いくらデータが保存されていても「再開する」ボタンが表示されない。

知り合いはTOPページに戻って再開ボタンが出ないのを見て「データが消えた!」と思い、もう一度「新しくラウンド開始」を押した。その瞬間、進行中のデータが空データで上書きされた。

実装はできていた。でもユーザーの使い方まで想像できていなかった。ナイターラウンドでデータが消えた時のデジャヴだった。

昼休憩中にノートに書き出した問題

昼食を食べながら、スマホのメモに問題を書き殴った。

ショートホールのミス分岐がおかしい。PWAモードでTOPページが更新されない。パーオン率の計算がおかしい。振り返り画面の文字が小さすぎて読めない。チップインの記録ができない。連打するとフリーズする。

一つひとつは「まあ、直せばいい」レベルの問題だ。でもこれだけ一気に出てくると、さすがにへこむ。

後半は「ごめん、メモ取らせて」モード

後半のラウンドは、半分ゴルフ、半分デバッグだった。知り合いが何か操作するたびに横目でチェックして、怪しい動きがあったらすかさず「今なんか変だった?」と聞く。

知り合いも最初は丁寧にフィードバックしてくれていたけど、途中から「またなんか変」「これ押しても何も起きない」と雑になってきた。当然だ。ゴルフしに来てるんだから。

でも、このリアルタイムのフィードバックは本当に貴重だった。自分ひとりでテストしていたら、絶対に見つからない問題がどんどん出てくる。

パットの質問 — 減らして正解だった

ひとつ嬉しかったのは、パットの記録方式への反応だった。

以前の記事で「パット記録を3回作り直した」と書いたけど、その後さらに見直して、1パット目の詳細だけ聞く方式にしていた。理由はシンプルだ。ロングパットの1パット目こそが、分析する価値がある。

ロングパットなら、「この傾斜でどれくらい寄せられたか?」「このラインで1パットで決められたか?」がわかる。つまり自分の距離感やライン読みの傾向が見えてくる。一方で2パットで上がった時、2パット目はほとんどの場合0.5m以内のお先パットだ。ほぼ無意識に入れている。そこの詳細を聞いてもデータとしての価値は薄い。

この「1パット目だけに注力する」方式、知り合いの反応は「これでいい。むしろこれがいい」だった。

完璧なデータより、続けてもらえるUXのほうが100倍大事。頭では分かっていたつもりだったけど、目の前でユーザーに「これでいい」と言ってもらえて、ようやく確信に変わった。

帰りの車で修正リストを作った

ラウンドが終わって、帰りの車の中(もちろん助手席で)で修正リストを整理した。優先度をつけて、一番上に書いたのはやっぱりデータ消失の防止だ。

対策は4重にすることにした。ブラウザの「戻る」ボタンを無効化する。ページを離れようとしたら警告を出す。連打でフリーズしないようにガードを入れる。そして、毎回の質問回答時にデータを途中保存する。1つの対策だけじゃダメだ。何重にもガードしないと、ユーザーのデータは守れない。

翌日から、修正の嵐が始まった。

リアルなフィードバックは開発室では手に入らない

今回のラウンドで見つかった問題は、どれも「開発環境では再現しにくい」ものばかりだった。

ショートホールの特殊なミスパターン。PWAモードでのキャッシュ問題。連打によるフリーズ。振り返り画面の文字の小ささ。

PCの前に座って、きれいなテストデータを入れて「よし、動くな」と確認しているだけでは、永遠に見つからない問題だ。

実際にコースに出て、実際にゴルフをしながら、実際に使ってもらう。これ以上のテストは存在しない。

知り合いには「ごめん、色々バグだらけで」と謝った。「いや、面白かったよ。直ったらまた使うわ」と言ってくれた。

その言葉を励みに、明日からまた開発を続ける。