エンジニアの技術知識ベース デバッグで繰り返しバグを止める
- Aisha Washington

- 6月5日
- 読了時間: 9分
更新日:6月17日
エンジニア向け技術ナレッジベース:デバッグとバグの再発防止
見覚えのあるチケットを開きます。以前にも似たような問題を修正したような気がしますが、現在のワークスペースには、どのようなコマンドシーケンスや設定で修正したのかを示すものが何もありません。
ほとんどのデバッグ作業は、その日の終わりに閉じるターミナルウィンドウやブラウザタブから離れることがないため、このサイクルが繰り返されます。エンジニア向け技術ナレッジベースのデバッグは、セッションを失われた努力ではなく、保存されたコンテキストに変えることで、このパターンを変えます。
開発者は以前よりもはるかに多くの同時問題を処理していますが、使用しているツールは依然として各ターミナルセッションや各Stack Overflowスレッドを使い捨てとして扱っています。生成される情報の量と後で検索できる能力との間のギャップは広がり続けています。IEEEの研究によると、ソフトウェアエンジニアは時間の約20パーセントを、以前完了したが現在見つけられないタスクに費やしています。
分散型エンジニアリングチームとの実際のワークフロー経験に基づき、この記事では、同様の問題が次に発生したときにデバッグ履歴を利用可能に保つための実践的なアプローチを概説します。
失われたデバッグコンテキストの真のコスト
問題は規律の欠如ではありません。エンジニアが頼りにしているツールは、単一のコードベースが数百ファイルを超えることはめったになく、典型的な日には1つか2つのサポート問題しか発生しなかった時代に構築されたということです。
チケットの再オープン
ライブラリのバージョンと環境変数の正確な組み合わせが記録されなかったために、バグが再発します。
チームメンバーは、誰かのターミナル履歴にすでに存在する手順をトレースするのに何時間も費やします。
ナレッジオンボーディング
新規エンジニアは、リポジトリのリストを受け取るだけで、現在のコードを形成した過去の決定に関するマップは提供されません。
すべてのインシデント対応は、最後に文書化された状態からではなく、ゼロから始まります。
レビューのオーバーヘッド
コードレビュアーは、特定のガード句が存在する理由について繰り返し質問します。
組織の記憶はSlackのスレッドに閉じ込められ、1週間以内にスクロールアウトして見えなくなります。
そのコンテキストを自動的に表面化する方法がないと、新しいインシデントごとに重複作業のレイヤーが追加されます。時間の経過とともに、独自の蓄積された履歴を持つエンジニアと毎回再開するエンジニアとの間のギャップは、出荷された機能と応答速度で測定可能になります。
従来の方法がうまくいかない理由
エンジニアはすでに合理的に思えるいくつかの方法を試していますが、量が増えるとうまくいかなくなります。
フォルダやローカルテキストファイルでは、各セッション後に意図的に保存する必要があります。午後に3件のインシデントが発生した場合、その手順はスキップされます。
メモアプリは、何を保存する価値があるか、どのタグを後で覚えておくかをユーザーに決定させるという負担を依然として課しています。
クラウドロギングサービスは生の出力を保持しますが、ターミナルコマンドとそれを説明したStack Overflowのスレッドを正確に結びつける個人的な検索レイヤーを提供しません。
共通点は、入力ファーストのデザインです。これらのシステムは、エンジニアが情報が最も新鮮な瞬間に整理する時間と注意を払っていると想定しています。高圧的なデバッグ中にその想定は失敗するため、データは使用可能な形でシステムに入力されません。
remioはエンジニアの技術知識ベースをどのように構築するか デバッグ
remioはモデルを逆転させます。保存の決定を必要とせずに記録し、新しい質問が届いたときに適切なフラグメントを提示します。
ターミナルセッションは実行中にインデックス化されます。エラー出力または成功した修正を生成したすべてのコマンドは、発生したプロジェクトフォルダに添付されたままになります。
Stack Overflowのページと内部ドキュメントタブは、リサーチ中に自動的にキャプチャされます。システムは、質問テキストと承認された回答の両方を一緒に保存します。
コードレビューのコメントとプルリクエストのスレッドは、ローカルのgitクライアントから読み取られ、変更されたファイルにリンクされます。
これらすべてはデフォルトでデバイス上に保持されます。新しいバグが発生すると、エンジニアは自然言語で短い説明を入力し、システムは以前のターミナル出力、リンクされたリサーチスレッド、および同じ症状に対処したレビューノートを返します。コンテンツ自体を通じて接続が行われるため、手動でのタグ付けは不要です。
ペアプログラミングセッションにも同じパターンが適用され、ローカルオーディオを通じてキャプチャされます。後でそのセッション中に行われた決定についてクエリすると、エンジニアが日付やファイル名を思い出す必要なしに関連する交換が返されます。
再利用可能なデバッグ記録のための3ステップフレームワーク
すべてのターミナル操作を自動的にキャプチャ
remioはローカルシェルセッションを監視します。コマンド、出力、および終了コードは、タイムスタンプと作業ディレクトリとともに保存されます。エンジニアは通常どおり作業を続けます。
ブラウザを離れることなく外部調査を添付
セッションがStack Overflowや内部Wikiページに移動すると、コンテンツはバックグラウンドでインデックス化されます。後で検索する際に、ターミナルエラーとそれを解決した正確な段落の両方を参照できます。
新しいインシデントを説明するのと同じ言語で過去のインシデントをクエリ
「前回このメモリ制限が発生したとき、どの環境変数が変更されたか」のような質問は、一致するセッションとリンクされたメモを返します。結果は、日常業務で使用されるのと同じインターフェイス内に表示されます。
各ステップは、エンジニアが以前に手動で実行していたアクションを削除します。その結果、解決されたすべてのバグは、ターミナルが閉じても消えるのではなく、ベースの価値を高めます。
ビフォー&アフター:remioがもたらす違い
インシデント対応時間
remioなし:エンジニアは、過去の類似チケットを検索するために、チャット履歴や個人的なメモを調べます。
remioあり:関連するターミナルセッションと説明が、単一のクエリから表示されます。
コードレビューの議論の深さ
remioなし:レビュアーは、以前のデザイン上のトレードオフについて同じ質問を繰り返します。
remioあり:以前のプルリクエストからのレビューコメントが、同じファイルに添付されて表示されます。
新メンバーのオンボーディング
remioなし:オンボーディングには、既知の問題や回避策の口頭での引き継ぎが含まれます。
remioあり:新しいエンジニアは、蓄積されたベースを直接クエリし、以前使用された正確なコマンド履歴を受け取ります。
プロジェクトを横断したパターンの検出
remioなし:共有レコードが存在しないため、あるサービスで解決された問題が別のサービスで再び発生します。
remio を使用すると、すべてのプロジェクトを対象としたセマンティック検索により、一致する以前のソリューションが表面化します。
リアルな結果: remio を使用して技術知識をキャプチャするエンジニア
3 つのマイクロサービスをサポートするプラットフォームチームは、設定ドリフトにより繰り返し再起動に直面していました。各エンジニアは、検索も共有もできないプライベートなメモを維持していました。
チームがターミナルセッションとリンクされたドキュメントの自動キャプチャを有効にした後、次のドリフトインシデントは 10 分以内に診断されました。クエリは、2 か月前に使用された環境変更の正確なシーケンスと、セーフガードを説明した内部ウィキの段落を返しました。
チームのエンジニアの一人は後にその変更について次のように説明しました。「3 月にサービス B のメモリ制限を修正したコマンドが、サービス C の症状を入力した瞬間に表示されました。変数名は覚えていませんでしたが、必要ありませんでした。」
このパターンは現在、無関係なサービス全体で繰り返されています。以前はコンテキストを再構築するために費やされていた時間は、代わりに現在の変更に費やされています。
エンジニアの技術知識ベースのデバッグに関するよくある質問
Q: データは安全ですか?
A:すべてのキャプチャと取得はデフォルトでローカルで実行されます。データがデバイスから移動するのは、ユーザーが明示的にクラウド同期を有効にし、独自の暗号化キーを提供した場合のみです。
Q:開始までどのくらい時間がかかりますか?
A:インストールとフォルダーの選択は数分で完了します。既存のローカルファイルのインデックス作成は、追加の設定なしにすぐに開始されます。
Q:remioはどのような種類のコンテンツをキャプチャできますか?
A:ターミナルセッション、ローカルファイル、ブラウザーページ、会議の音声、コードレビューのスレッドは、デバイス上に存在する場合に自動的にインデックスが作成されます。
Q:remioはインターネット接続なしで動作しますか?
A:ローカルベースからの検索はオフラインで機能します。リアルタイムのウェブ検索のみ接続が必要です。
Q:remioは大規模なコードベースをどのように扱いますか?
A:システムは、リポジトリ全体を一度にインデックスするのではなく、ファイルの内容とコミットメッセージをインデックスするため、ストレージとクエリ時間の両方を実用的な範囲に保ちます。
はじめに
remioを現在のプロジェクトが含まれるフォルダに向けさせるために10分間確保してください。その時点から、すべてのターミナルセッションとリサーチページは、追加のアクションなしでベースに追加されます。
蓄積されたデバッグ履歴が新しいチケットごとに累積するかリセットされるかの決定です。数ヶ月前の解決策からクエリが返される最初のクエリが、違いを明確にします。
ダウンロードページにアクセスして開始してください。


