世界を動かす技術を、日本語で。

PRを提出できなかったので、雇われて自分で修正しました

概要

  • Mintlifyの検索機能に長期間存在した レースコンディション の問題
  • Trieve創業者としても 体験品質 に悩まされた経緯
  • AbortController による根本的なバグ修正の実施
  • オープンソースの利点と 自己解決 の重要性
  • 小さな改善の積み重ねによる 製品価値 向上

Mintlifyの検索バグと修正体験

  • Mintlifyの検索機能に レースコンディション 発生
    • 入力途中で複数のクエリが同時発行される現象
    • 古いクエリの結果が表示され、 検索精度低下 を招く問題
  • Trieve創業者としての 複雑な立場
    • 自社プロダクトが30,000以上のドキュメントサイトで利用
    • ベンダー時代にSlackで問題を指摘するも、 優先度低下 で未解決
    • ユーザー体験の悪化が Trieveの評価 にも影響
  • チーム参加後、 AbortController で根本解決
    • デバウンスされた検索関数にAbortControllerを導入
    • 新しい検索時に前のリクエストを 即時中断
    • 現在の入力内容に 常に一致する検索結果 を保証
  • 問題解決の 達成感
    • 長年の悩みを自分の手で解消する満足感
    • George HotzのTwitterでの短期バグ修正エピソードに共感
    • ハッカー精神 と起業家マインドの両立を志向

オープンソースと自己解決力

  • オープンソースソフトウェアの 自己解決性
    • バグや不満点に遭遇した際、自ら 修正・貢献 できる利点
    • クローズドな環境では、 コードベースへのアクセス不可 で改善困難
    • オープンソースならPull Requestで 即時修正 可能
  • 各企業がクローズドを選ぶ ビジネス上の理由 も理解

小さな改善の積み重ね

  • Mintlifyの検索が より高速・快適 になった背景
    • 長年気になっていたバグを 自分で修正
    • 小さな改善の積み重ねが 伝説的なプロダクト を生む要因
    • 些細な問題ほど、 自ら解決する喜び が大きい

Hackerたちの意見

2022年にジョージ・ホッツがツイッターで過ごした伝説の一週間を思い出すな。彼はユーザーを悩ませていたログインポップアップを直すためだけに参加して、すぐに去っちゃったんだ。著者はこの、えっと、出来事を俺とは違う風に覚えてるみたいだな…ジョージ・ホッツは「ツイッターの検索を、怠け者の開発者より早く直せる」って大胆に主張してたけど、すぐに逃げ出しちゃった。傲慢だよ!去る時に、そのログインポップアップをちょっとした慰めとして取り除いたんだよね。

投稿を更新して、その話をもっと正確に伝えたよ。同時に、クソみたいなバグがあったからブログも削除しちゃったけど、まあ仕方ないね。

それから彼はイーロンに一から書き直す提案をしようとしてたんだ。

うん、何それ?彼はどうやらTwitterに参加して、何もせずに静かに去ったみたい。恥ずかしいし、完全に自業自得だね。

ちょっと時間が経っちゃったけど、GeoHotや特許トロール、そして今はcomma.aiについて調べてた。George HotzのComma.AIはめっちゃ面白そうだね。基本的には、OBD-IIコネクタ付きの$999の「comma 3x」スマホと、$99の配線ハーネスで、過去10年に製造された多くの車にテスラのオートパイロットに相当する機能を追加できるんだ。合計で$1098で、オープンソースでGitHubにもあるし、なんと車にSSHアクセスもできるんだって!オプションのクラウドサブスクリプションは、自分のSIMで月$10、セルラーデータ込みで月$24。残念ながら、テスラのセンチネルモードに相当する機能はまだないみたいだけど、これはちょっと残念だね。テスラのセンチネルモードは250Wの電力を使ってて、80kWhのバッテリーを80%から30%にするのに約7日かかるから(「.5*80kWhを7日で」= 238W)、openpilotはおそらく5W以下で済むから、いい代替手段になったかもしれないのに(「40kWh / 5W」は333日)。

昔のジョークが実際に現実で起こるのを見ると面白いね。すごい!メタな話だけど、サイトに左マージンを追加すること考えてみてくれない?画面の端から読むのがちょっと変な感じがするんだよね。

彼の記事のリンクをクリックしてたら、アップルでも同じことをした人を見つけたよ。彼は財布に追加された期限切れのパスを自動で削除する機能を導入して、すぐに辞めちゃったんだ。あの機能がこうやって生まれたなんて知らなかったけど、これからは飛行機を降りるたびに彼にちょっとした感謝を送ることにするよ。あれは本当にイライラしたから。

OPに雇われて、自分で直しちゃった方がいいんじゃない? ;)

メタ的な話だけど、サイトに左マージンを追加することを考えてみてくれない?画面の端から読むのはちょっと変な感じがする。え、何!?左寄せになってるのが好きなんだけど。それがテキストのあるべき姿だよ!

スクリーンのスペースを無駄にするサイトは好きじゃないな。

デバウンスされた検索機能にAbortControllerを追加したから、新しいクエリが作成されると前のクエリは中断されるようになったよ。これで、検索結果は常にユーザーが現在入力している内容に関連するものになる。アプリケーションが俺が何をするか言い終わる前に勝手に何かを始めるのが一番イライラすることの一つなんだ。設定が終わったって明示的に示さない限り自動で適用されるフィルターとか、入力中に常に再実行される検索とか。俺が止まるのを待ってくれ。

予約サイトでこれが嫌なんだよね。特にフィルターが左のサイドバーにあって、ビューポートに収まらない時。何かを変更するたびにスクロールが上に戻って、読み込みが始まって、フィルターが読み取り専用モードになっちゃう。次のフィルターを追加するためにそれが終わるまで待たなきゃいけないなんて…

ブログに検索中に提案を表示する機能を実装したとき、次の検索リクエストをする前に今の提案リクエストが終わるのを待つことにしたんだ。サーバーに負担をかけず、反応も良くするためのバランスが取れてると思ったから。

記事には採用について何も書いてないけど、それがこの一連の出来事の中で一番重要な部分だよね。今のところ、「何かが気になってて、会社が僕を雇ったらそれを直した」って感じなんだけど、まあ、いいのかな?

彼の会社は今働いてるところに買収されたみたいだから、いわゆるアクイハイアードだね。

Googleマップが僕を雇ってくれたら、km/milesの切り替えが「僕は距離をkmでしか見たくない」って覚えてくれると思うんだけど、HNのプロフィールに連絡先があるから、ぜひ連絡してほしい。Googleマップが20年前に始まってから、2週間ごとにマイルからkmに戻してる気がする。それが500回だよ。ユーザーのプロファイリングがコア目標の会社にしては、全く馬鹿げてるね…。

それが500回だよ。ユーザーのプロファイリングがコア目標の会社にしては、全く馬鹿げてるね。7回の面接と1回のPRの後:ユーザーエンゲージメントの低下でA/Bテストに失敗。

メキシコを旅行してた時、サインインしてるのにGoogleフライトが新しいタブを開くたびに通貨をドルからペソに切り替えるのが本当にイライラした!彼らは本当に気にしてないと思う。

え、これに設定があるの?オーストラリアに16年以上住んでるけど、未だに距離がマイル表示で、キロに変える設定を見つけられないんだよね(見つけても、ほとんど意味ない気がするけど)。

ついでに、通行料のために「自分の時間をどれだけ大切に思っているか」の入力フィールドを追加してくれない?Googleによると、3つの通行料で20ドル使って1分節約するらしい。ずっと。追記:それと、スピードカメラの「前方にスピードカメラ、まだある?」のダイアログも移動してほしい。あのダイアログ、スピードリミットのアイコンを隠しちゃってるんだよね。

Googleマップのもう一つの問題は、一部の場所でプラスコードが表示されず、全体のエリアを強調することだね。でも、その場所にピンを置くとプラスコードが表示される。個人的にはちょっとバカだと思う。あと、「近くの場所」を検索するのが本当に難しい。道順を通じてやらなきゃいけないし、UXがすごく悪い。

2台の電話やAppleマップを開かずに、ナビ中にGoogleマップを使えるようにしてくれたらどうかな?

誰かがGoogleでそのことに興味を持ってくれたら、他の誰よりも先に進めるよね。ところで、2週間って何時間だっけ?

GoogleがUXの改善に興味を持つなんて、笑えるわ。

あと、Googleマップの仕事も受け付けてるよ。1時間以上の旅行の場合、帰りのルートを事前にキャッシュしてくれたらいいのに。そうすれば、サービスがない中でどうやって行ったか思い出すのに困らないのに。

Googleマップの基本機能は今、メンテナンスモードみたいな感じで、ここ3〜4年で少しずつ劣化してるよね。AI機能を立ち上げたいなら別だけど(10年間チャットアプリだったのに、GoogleはChatGPTに騙されたし…)、仲間は見つからないし、キャリアも進まないよ。

Amazonで不正疑惑でバンされた時を思い出すな(古いアカウントがあったけど、メールと番号を削除しちゃったから、DBダンプにたくさん入ってた)。雇われた後、Amazonの不正対策チームの担当者に連絡して、バン解除してもらった。サポートにメールしても何も効果なかったけど、内部に連絡したら翌日の午前1時には解除されてた。

これが俺が人生で目指すエピックなレベルだよ。

面白いね。Googleのオンボーディングで壊れたスマホがまだあるけど、内部の人たちも全然気にしてくれなかった。修理に使えるツールがあったんだけど、無許可で使うとクビになるってメッセージがついてた。

これが実現したら嬉しいな。電話番号を間違って書かれて、Amazonアカウントを失っちゃったんだ。国際利用に無効な先頭の数字があって、テキストMFAも使えなかったし、OTPアプリの入ったスマホは前の日に壊れちゃったんだよね。

ソフトウェアの品質が低すぎて、バグが気になるなら、会社が直すより自分が雇われて直した方が早いって!マジで。GTA 5のロード時間問題を軽減したプログラマーを思い出すよ。GTA 5にたくさんお金かけても、品質が改善されないってのは…。

その告発の中のキャンセルは…なんか明らかだよね。

うん、めっちゃイライラした。

良いPRだけど、AbortControllerはリクエストの処理を止めるのにはあまり役立たないね。クライアントがとっくに去ったのに、バックエンドで処理が続いてる検索を見たことが多すぎる。

シーケンシャルタスクを流し込んで、早期終了をチェックするためのブレークポイントを持つ非同期呼び出しを強制するライブラリは本当にないね。Sorhusがこの問題に対するライブラリを持っているべきだと思うけど、持ってない。ここ数ヶ月、setTimeout()がNodeJSのこの問題を全く解決しないって話を何度もしたよ。Javaでもこの問題に苦しんで、サポートするはずのAPIを削除しようとしたくらいだからね。

クライアントが切断したら、サーバーはリクエストハンドラーをキャンセルすべきだよ。そうしないと、偶発的なDOS攻撃を招くことになる。

逆の状況だけど、IP弁護士がオープンソースコードにPRを提出するのをほぼ不可能にするような職場で働いたことがある。でも、問題がある行番号と入力を正確に説明すれば、誰かに修正をお願いするのが少し楽になることもある。技術的にはコードを渡してないけど、無料のQAは提供したよ。