リストル:フォームリーチツール開発奮闘記 あ と 3 秒― まだ終わっていない、あるツールの開発記 ―第16話「直したはずが、半分しか効いていなかった」

リストル:フォームリーチツール開発奮闘記 あ と 3 秒― まだ終わっていない、あるツールの開発記 ―第16話「直したはずが、半分しか効いていなかった」 フォームリーチ開発日誌

これは、一つの営業支援ツールが少しずつ賢くなっていく、いまも続いている記録です。

派手な話は、ほとんど出てきません。
天才も、閃きも、一夜にして世界が変わる瞬間もありません。

あるのは、うまくいかなかった一件を実際に開いて、「なぜだろう」と眺めるところから始まる、ずいぶん地味な時間の積み重ねだけです。

書いていて少し気恥ずかしいのは、出てくる間違いの多くが、笑ってしまうほど単純なことです。

けれど、その単純な間違いを一つずつ拾っていくうちに、成績は「200社に2社」から「5社に1社」まで動きました。
改良の回数は、300を超えています。

『リストル:フォームリーチツール改善奮闘記』によろしければ、お付き合いください😊

フォーム営業の効率化ならリストルフォームリーチ
リストル専用:問い合わせフォーム送信ツール『フォームリーチ』詳しくはこちら👆️

実行時間の事前見積もりとプロファイリング。自分の書いたコードを疑う難しさ

画像

良くなったはずなのに、こなせた数が減っていました。

第5話で、待ち方を入れ替えました。
「時間が来たら切る」のをやめて、「進んでいるなら待つ」に変えた、あの直しです。

成績は、たしかに上がりました。5社に1社まで来ていました。
ところが、しばらくして、1晩でこなせる会社の数が、じわじわ減っていることに気づきました。
届く割合は上がっている。でも、訪ねられる数が減っている。
結果として、1晩分の合計は、思っていたほど伸びていませんでした。

最初は、名簿のせいだと思いました。
重いサイトばかり集まった名簿なら、こなせる数は減ります。
名簿を替えて、もう1度走らせました。やはり、減っていました。

次に、こちらの機械が古くなったのかと思いました。
これも違いました。どの台も、同じように減っていました。

そこで、いつもの手を使いました。
1件あたり、何秒かかっているかを並べてみる。

結果は、はっきりしていました。
諦めるまでにかかる時間が、以前の倍近くになっていた。

■ 処理件数の低下とタイムアウト遅延。パフォーマンス低下のボトルネック探索

諦めるまでの時間が倍になれば、1晩でこなせる数は減ります。当たり前です。問題は、なぜ倍になったのか、でした。

新しい待ち方では、「進んでいるなら待つ」ことになっています。
進んでいなければ、止まったと判断して切る。
その判断のもとになっているのが、機械が挙げ続ける、あの手です。
「まだ動いてます」「まだ動いてます」

画像

この手が挙がっているあいだは、待つ。途切れたら、切る。
仕組みとしては、単純です。

ここで、1つ確かめてみることにしました。
実際に動いているとき、その手はどのくらいの間隔で挙がっているのか。
記録を出してみました。

挙がっていませんでした。

正確に言えば、挙がってはいます。
ただ、ときどき、長いあいだ挙がらない時間があります。
その時間の長さが、いつも同じくらいでした。

あっ、と思いました。
手を挙げる係が、ときどき、手を下ろしている。

調べてみると、こういうことでした。
このツールは、動きながら、記録を書いています。

どのページを開いたか。
どの欄に何を入れたか。
いつボタンを押したか。

あとから調べるために、細かく残しています。
その記録を1行書き込むあいだ、手を挙げる係が、いったん手を下ろしていました。書き込みが終われば、また挙げます。

人間で言えば、「まだ生きてます」と手を挙げ続けている人が、メモを取るあいだだけ、手を下ろしているようなものです。
外から見ている見張り役には、区別がつきません。

手が下りている。止まったのかもしれない。
見張り役は、律儀に待ちます。決められた時間だけ待って、それでも挙がらなければ切る。

ところが、記録を書くのは1度ではありません。
1社のあいだに、何10回も書きます。
書くたびに、手が下りる。
下りるたびに、見張り役の時計が最初から数え直される。
結果として、諦めるまでの時間が、実際の倍近くまで伸びていました。

■ ログ出力と状態監視の「同期処理」が引き起こした無限待機の罠

足し算をしてみました。

1社あたりの記録の回数。
1回あたり、手が下りている時間。
掛け合わせて、待ち時間に足す。

画像

ぴたりと合いました。
これで、原因ははっきりしました。

直したのは、単純なことです。
記録を書く係と、手を挙げる係を、別にしました。
記録を書いているあいだも、手は挙がったままです。
書き終わってから、まとめて残します。

もう1つ、記録の量そのものも見直しました。
細かく残すのは、困ったときには役に立ちます。
ただ、毎晩、全部残す必要はありません。

ふだんは要点だけ。調べたいときだけ、細かく残す。
この使い分けは、第9話でも1度出てきました。同じ考え方を、こちらにも入れました。

記録の量については、あとで少し考え直すことになります。
この時点では、「減らせばいい」と思っていました。
減らせば軽くなります。軽くなれば速くなります。

ところが、減らしすぎると、困ったときに何も分からなくなります。
この2つの釣り合いをどう取るかは、もっとあとの回で、あらためて向き合うことになりました。

このときは、とりあえず軽くしました。軽くしたぶん、そのあと数か月のあいだ、うまくいかなかった件の理由が、ほとんど残らなくなります。
良かれと思った直しが、別の場所で静かに効いてくる。
この記録には、そういう話ばかり出てきます。

直したあと、1晩でこなせる数は、元に戻りました。届く割合はそのままです。
合計は、はっきりと伸びました。
この回で、いちばん覚えているのは、原因を探していたときの自分の目です。

名簿を疑いました。
機械を疑いました。
相手のサイトを疑いました。

自分が直したばかりの仕組みだけは、疑いませんでした。
直したばかりのものは、たいてい、いちばん自信のあるものです。
仕組みを考えて、作って、確かめて、効果も出た。
そこに間違いがあるとは、なかなか思えません。
しかも、この件では、直したもの自体は正しく動いていました。

手を挙げる仕組みは、狙いどおりに働いていました。
働いていたからこそ、記録を書くたびに律儀に手を下ろしていました。
こういう組み合わせは、なかなか気づけません。

■ 非同期化とログレベルの最適化。自分のコードを疑う難しさ

笑ってしまう話も、1つあります。(毎度のことですが)

原因が分かったあと、念のため確かめようと思って、記録の量をわざと十倍に増やしてみました。狙いどおり、諦めるまでの時間も十倍近くになりました。
「やはりこれだ」と喜んで、その設定のまま、その晩の本番を走らせてしまいました。翌朝、こなせた数は、ひどいものでした。
確かめるための設定を戻し忘れる。これも、何度かやりました。

画像

自分の直したものこそ、いちばん疑いにくい。
この一件のあと、直したものについては、直す前と直したあとで、必ず一度、時間の掛かり方を測るようにしました。
効いたかどうかだけでなく、どこかに余計な重みが乗っていないかを見る。

良くなった、で終わらせない。
どのくらい良くなったはずかを先に見積もって、実際の数字と合うかどうかを確かめる。合わなければ、どこかに何かが乗っています。

この考え方は、そのあと何度も使いました。
「1件あたり、だいたい何秒で終わるはずか」を、先に紙の上で見積もっておきます。

ページを開くのに何秒。
欄を埋めるのに何秒。
送って、合図を待つのに何秒。

足し合わせた数字と、実際の数字を比べる。だいたい合っていれば、問題ありません。倍になっていたら、どこかに余計な何かが乗っています。
半分になっていたら、どこかを飛ばしています。

どちらも、見ればすぐ分かります。
見なければ、いつまでも分かりません。

■ 実行時間の事前見積もりとプロファイリングによる改修の完了

この回のことを、現場に説明するのには苦労しました。

「良くなったのに、遅くなったんです」
「良くなったんだよね?」
「良くなりました。ただ、良くするために入れたものが、別のところで足を引っ張っていました」
「……直ったの?」
「直りました」
「じゃあ、いいよ」

現場は、いつも寛容でした。

寛容だからこそ、こちらが数字で確かめないと、誰も気づかないまま何週間も過ぎていきます。
このときも、気づいたのは「なんとなく数が減っている気がする」という感覚からでした。感覚は、意外と当たります。当たるのですが、感覚のままでは直せません。
測って、足し算が合ったところで、はじめて直せました。

そしてこの「測る」が、すぐあとに、思ってもいなかったものを見つけてきます。

(つづく)


→ 営業リスト探しに、もう時間をかけない。
業種別に企業情報をまとめて収集できるリストルを、まずは3,000件まで無料でお試しください。👇

自分で大量に企業情報が抽出できる。営業リスト収集ツール『リストル』の無料お試しはこちらから👆️
「営業先を探すだけで時間がかかる」を、もっと効率的に。 ホームページのない企業も含め、業種別に大量の企業リストを収集できます。

📊営業リスト収集ツール「リストル」
https://www.listoru.com/

タイトルとURLをコピーしました