これは、一つの営業支援ツールが少しずつ賢くなっていく、いまも続いている記録です。
派手な話は、ほとんど出てきません。
天才も、閃きも、一夜にして世界が変わる瞬間もありません。
あるのは、うまくいかなかった一件を実際に開いて、「なぜだろう」と眺めるところから始まる、ずいぶん地味な時間の積み重ねだけです。
書いていて少し気恥ずかしいのは、出てくる間違いの多くが、笑ってしまうほど単純なことです。
けれど、その単純な間違いを一つずつ拾っていくうちに、成績は「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/
