開発工程の改善(とコーチング)に指標を活用する方法

前回の投稿では、私たちが開発した、スケーラブルで効率的かつ高速なオープンソースのデータ分析プラットフォーム、Imhotep について説明しました。Imhotep は Indeed において、素早く繰り返し行う実験に指標を使用することを可能にし、プロダクトの改善を推進します。

工程の改善とコーチング

わたしたちは、開発工程を改善するために同じツールとテクニックを使用していますが、これは「評価・測定—問いかけ—学習—改善」というサイクルにしたがっています。

  1. 評価・測定できる全てのものを評価・測定する。
  2. 問いを立て、収集したデータを調査することで学ぶ。
  3. 学んだものを活用し、改善する。
  4. 改善を確認するために、評価・測定を続ける。

工程改善だけでなく、このアプローチは人間にも応用することができます。データは、自身の働きを把握し、他者をコーチングするうえで役立ちます。

  • 自分はどれくらい成果をあげているのか?
  • 自分は他のチームとどのように関わりあっているか?
  • 時間が経つにつれて、自分の仕事は時間がどのように変化したか?
  • 自分の盲点はどこか?

工程と人の評価・測定は良案か?

工程改善と人間の成果測定に、このアプローチを使う事に対し、懐疑的に感じるかもしれません。疑ってもいいのです。このアプローチを本当に有効に活用するためには、慎重に進める必要があります。

統計の操作 (グッドハートの法則)

一つ目の注意すべき点は、グッドハートの法則というものです。これは、「評価指を目的とすると、それは良い評価指標でなくなってしまう」といものです。例えば、マネージャーがこんなことを言ったとします。「評価・測定の結果によると、チームの生産性が下がっています。次の四半期では、機能を20% 増やす目標を設定しましょう。達成出来れば、大きな報奨金も出します!」

けれど、チームは「統計を操作」し始めるかもしれません。つまり、生産性をあげることなく、指標を改善できるような変更を行うかもしれません。こうなると、生産性を正当に評価するための手段は無意味になり、チームには、目標を推進しない、逆効果の手段を与えてしまったことになります。

ナンバー 6 の原理

二つ目の注意すべき点は、わたしが(あるテレビ番組の登場人物決め台詞に影響されて) ナンバー 6 の原理と名付けたものです。「人間を数字に置き換えてはならない」というものです。

I am not a number - use caution measuring people - improve the development process

数字のみで評価されることを喜ぶ人間はいません。もしあなたが、チームに対して彼らを評価・測定していることを伝えると、士気に重大な悪影響を及ぼすリスクがあります。多くの人々は、あなたが定性での成果を考慮していないと考えるでしょう。

使い方次第

注意をすれば、こうした落とし穴にはまることは避けられます。チームが生産性の指標が抜け漏れることを懸念してしまう、という上記の例をよく考えるべきなのです。数字を詳細に確認し、文脈を理解したうえで状況を判断するならば、改善のための生産的な対話をすることが出来るでしょう。

もしかしたら、チームはもっと複雑な機能に取り組んでいたから、完成された機能が少なかったのかも知れません。それならば問題ないこともあるでしょう。あるいは、機能の動作を単純化するなど改善の余地があった、という意見にチームとしてたどり着くかもしれません。

もしくは、異なる指標を確認したところ、顧客ベースに伸びがあったため、全体のサポート業務量が 50% も上昇しているかもしれません。そのうえで、そのバランスを受け入れるか、新機能を開発しながらサポートに対応するための受け皿を増やす試みを図るか、決断をすることができます。

評価・測定から始め、考慮された討論は具体的な工程改善を導くことが可能です。次回の投稿では、Imhotepを活用して、Indeed で有効だと立証され評価・測定を行った工程改善についてお伝えしたいと思います。


本シリーズのその他の記事のリンク

スケーラブル、効率的、そして高速 —— Imhotepとは

今回より五回にわたり、指標に基づく洞察を活用し、開発工程(と開発者のコーチング方法)を改善することをテーマとしたシリーズ記事を投稿します。

素早く行動し、物事を試す。Indeed ではこのようにプロダクトを開発しています。少数の素晴らしいアイデアに賭けるのではなく、多くのアイデアを素早く試すようにしています。

こうしたアプローチを成功させるためには、多様な視点を持った、革新的なチームメンバーが必要となります。わたしたちは、We help people get jobsというミッションの元に、アイデアをすぐに調べることに対して前向きなメンバーを採用しています。入社後には、当事者意識と自主性を持って、こうしたゴールに取り組んでもらいます。また、こうした実験の経過観測し分析するためのツールを与えています。

ミッション遂行のための最適なツール

上記のツールのいくつかは、社内で開発し、オープンソース化しました。その一つが、データ分析のプラットフォームである Imhotep です。Imhotep は、大規模な時系列データセットの高速な調査と分析を可能にします。クエリ言語 (IQL) 、web ベースの UI、そして分散型のバックエンドを含んでおり、拡張可能で、効率的、そして高速です

Imhotep measure question learn improve Indeed Open Source

Imhotep は拡張可能

Imhotepは、汎用的なハードウェアやクラウド上で実行できるデーモン・インスタンスを追加することで、水平方向の拡張が可能です。Indeed 内部のImhotep のクラスタは、何千ものデータセットの中で、毎週 500 万件のクエリを処理しています。そのうち約 90% のクエリは、自動化されたシステムから届きます。

最も使用されているデータセットには、昨年だけで 39 億件のイベントが存在しています。そのデータセット単体だけでも、毎月 2 万 5 千件程度のクエリが届きます。

Imhotep は効率的

Imhotep を支えるデータ構造は転置インデックスなので、ほとんどの時系列データセットのディスク使用量は、非常に小さく済んでいます。上記で触れたデータセットは、39 億件のイベントと各イベントにつき最大で384 件のフィールドを含んでいいますが、ディスク上で 5.7 TB の大きさです。つまり、各イベントは 146 バイト程度です。

このようなストレージの効率化により、サンプリングではなく全データを分析用に保存することを可能にします。サンプリングは、集計データのおおよその動向を確認したい場合は良い方法です。ですが、もしデータをじっくり読み込み、外れ値を検証したい場合には、サンプリングでは、外れ値を確実に発見したり、効果を確認することはできません。

Imhotep は高速

Imhotep のスピードは、素早く開発サイクルを回し、メンバーが協力しあうことを可能にします。Indeed では過去 90 日間において、内部のクラスターは2百万件の対話型の Imhotep クエリ(web アプリから実行されたクエリ)を処理しました。応答時間の中央値は 276 ms でした。

パワフルなキャッシュ実装が、この驚異の速さに貢献しており、実際に対話型クエリの 60% 近くがキャッシュからきています。しかし、キャッシュされていないクエリですら、応答時間の中央値が 4 秒と、かなりの速さとなっています。長期間キャッシュ化されていないクエリはもっと時間がかかりますが、大差はありません。365 日間キャッシュされていないクエリでは、応答時間の中央値はおよそ 9 秒でした。

Imhotep のパフォーマンスのこうした統計をどのように確認しているかと言うと、Imhotep の使用量に対しても Imhotep のデータセットを持っているからです。数分のうちに、このデータセットに繰り返しクエリをかけて、最近のクラスターのパフォーマンスを理解することが可能なのです。

Imhotep はインサイトと改善を促す

Imhotepはプロダクトを検証し、素早く改善することを可能にします。私たちは、こうしたデータドリブンのアプローチを、開発工程の改善に取り入れています。次回の記事では、工程改善にどのように指標を活用しているか詳しくお伝えしたいと思います。


本シリーズのその他の記事のリンク

AVA でウェブアプリケーションを監査する

ウェブアプリケーションをホスティングすることは、便利なサービスを一般公開するのに優れた方法ですが、それには代償が伴います。ウェブアプリケーションに脆弱性があると、攻撃者に重要なシステムへのアクセスを許し、顧客やビジネスを危険にさらす恐れがあります。

AVA exposes vulnerabilities like a magnifying glass finding flaws

Indeed セキュリティチームは、この問題に対処するため、Another Vulnerability Auditor (AVA) を開発しました。AVA を利用してアプリケーションを自動スキャンすることで、本番環境および QA のシステムの潜在的な脆弱性を継続的にモニターできます。また、AVA はオープンソースツールとして公開されているので、ユーザーが自身のアプリケーションをモニターするために使うこともできます。

AVA の仕組み

AVA は HTTP Archive (HAR) 形式で定義された一連のアプリケーションエンドポイントをスキャンします。HAR ファイルは、HTTP リクエストの URL、ヘッダー、Cookie、POST データをカタログ化します。AVA はこの情報を使ってエンドポイントをモデル化し、それをオーディッターとチェックを組み合わせてスキャンします。

オーディッター

オーディッターは AVA が監査する HTTP 要素を決定します。URL、ヘッダー、Cookie、POST データなどがあります。

タイプ 監査対象
Cookie Cookie リクエストヘッダー内の個々の Cookie
ヘッダー 大部分のリクエストヘッダー
JSON リクエスト本文内の JSON データ
マルチパート リクエスト本文内のマルチパートフォーム
パラメーター URL 照会文字列およびリクエスト本文内のパラメーター
レスポンス レスポンスのアスペクト (パッシブ監査)
テキスト リクエスト本文内のプレーンテキストデータ
URL リクエスト URL

チェック

チェックは、AVA がチェックするセキュリティの脆弱性のタイプを決定します。対象となるのは、クロスサイトスクリプティングオープンリダイレクトSQL インジェクションシェルインジェクションなどです。

 

タイプ チェック対象
コードインジェクション Python の pickle ステートメントや eval ステートメント内のコードインジェクション
ヘッダーインジェクション レスポンス内のヘッダーインジェクション
オープンリダイレクト 任意の URL へのオープンリダイレクト
パストラバーサル ローカルファイルシステムにおけるパストラバーサル
シェルインジェクション Bash ステートメント内のシェルインジェクション
SQL インジェクション データベース照会内の SQL インジェクション
クロスサイトスクリプティング レスポンス内の HTML インジェクションと JavaScript インジェクション
XML 外部エンティティ XML ドキュメント内の XML 外部エンティティ
個人を特定できる情報 (PII) メールアドレス、クレジットカード、社会保障番号

使用方法

AVA は自動化されたシステム内での使用を想定しています。Indeed では、AVA を Docker Swarm と Jenkins で自動化しています。しかし、AVA は Python をインストールできる環境であれば、どこでもご利用いただけます。

Docker Swarm で使用する場合

Indeed のセキュリティチームは Docker Swarm を利用して AVA を自動化し、一般公開されているアプリケーションを毎日スキャンしています。そうすることで、Indeed では、発生した脆弱性を直ちに特定できます。パイプラインには次の 3 つのコンポーネントがあります。

  • エンリッチャー: WES などのソースから得たデータを、エンドポイント定義に組み込みます。
  • スケジューラー: スケジュールと構成を保守します。
  • 脆弱性マネジャー: レポートを保管し脆弱性情報を表示します。

プロセスは次のとおりです。

  1. スケジューラーがエンリッチャーにコンタクトして現在のアプリに関するエンドポイント定義をリクエストします。
  2. エンリッチャーがこれらの定義を HAR 形式で返します。
  3. スケジューラーがこの HAR データと攻勢設定を AVA にプッシュします。
  4. AVA がアプリケーションに対して構成されたスキャンを実行し、レポートを生成します。
  5. AVA はレポートを保管のため脆弱性マネジャーに送ります。

Jenkins で使用する場合

Indeed では、QA 環境のシステムを検査するために、Jenkins でも AVA を使っています。そうすることで、Indeed では、本番環境に到達する前に脆弱性を特定できます。パイプラインには機能テストと AVA という 2 つのコンポーネントがあります。機能テストは、Selenium ベースのテストケースのコレクションです。これを使って、QA にあるリリース候補を検証します。

プロセスは次のとおりです。

  1. アプリケーションに対して機能テストを実行します。
  2. プロキシーがテストからトラフィックを収集し、HAR ファイルとしてエクスポートします。
  3. AVA がエクスポートされた HAR ファイルを使ってアプリケーションをスキャンします。
  4. スキャン結果を文書化したレポートが AVA から提供されます。

AVA の入手方法

AVA はオープンソースであり、 Git から入手できます。ダウンロードしてお試しください。サポートが必要な場合は、GitHub または Twitter からご連絡ください。問題点は GitHub レポジトリーで公開することも、Twitter から Indeed にお問い合わせいただくこともできます。