プログラミング
「週末にできるよ」と言う人々(2016年)
I could do that in a weekend (2016) (danluu.com)
要約
多くの人が、大規模ソフトウェア企業の製品開発に必要なエンジニアの数を過小評価しています。例えば、Googleのような検索エンジンの構築は、インデックス作成、ランキング、国際化、セキュリティ、組織的な複雑さなど、多岐にわたる困難な課題を含んでおり、単純なものではありません。MVP(実用最小限の製品)は週末に構築できるかもしれませんが、収益を最大化し、市場の大部分をカバーするには、数千人規模のエンジニアと継続的な最適化が必要となります。
全文翻訳
「週末にできるよ」と言う人々(2016年)
インターネット上のコメントで、「従業員は何をしているんだ?自分ならその製品を自分で作れる」という形のコメントを定期的に見かけないような、大規模なソフトウェア企業は一つも思いつきません。Benjamin PollackとJeff Atwoodは、Stack Overflowでそのような人々を指摘しました。しかし、Stack Overflowは比較的明らかにスリムなので、一般的な反応は「ああ、確かにStack Overflowはスリムかもしれないが、FooCorpは本当に肥大化しているに違いない」というものです。そして、ほとんどの人はFooCorpについて比較的低い可視性しか持っていないため、任意のFooCorpの値に対して、それはもっともらしい声明のように聞こえます。結局のところ、どのような製品が数百人、あるいは数千人のエンジニアを必要とする可能性があるのでしょうか?数年前、rapgeniusのSEO論争の後、多くの人々が誰かにGoogleより優れたものを作るよう呼びかけました。Alex Clemmerは、Googleより優れたものを作ることは、単純な問題ではないかもしれないと応答しました。Googleの5000億ドルの時価総額のどれだけが検索から来ているか、そして競合他社がその価値の一部を獲得するためにどれだけのお金(数十人?数百人?)を費やしてきたかを考えると、検索は単純な問題ではないというのはもっともらしいように思えます。しかし、Alexの投稿のコメントでは、複数の人々がLuceneはGoogleが行っていることと基本的に同じことを行っており、Luceneは今後数年間でGoogleの能力を追い越す態勢にあると応答しました。それから十分な時間が経過したので、LuceneはGoogleが危険にさらされるほど改善されておらず、LuceneクラスターをまとめたスタートアップからGoogleが脅かされることはないと言えます。むしろ、Google検索の実行可能な競合相手を作成するコストは増加しています。実行可能なGoogle競合相手を作るために、ランキングはインデックス作成よりも難しい問題だと信じていますが、インデックス作成だけを見ても、インデックス作成したいページが約1兆ページ(Twitterのようなもの)のオーダーである個別のドメインがあり、ドメインも約1兆のオーダーで見つけられると推測できます。Googleの負荷の1/100の負荷を処理するために、約1兆個のアイテムのインデックスを保持するように、既製の検索インデックスのいずれかを設定し、レイテンシ予算を例えば100ミリ秒(レイテンシのほとんどはランキング用であり、インデックス作成用ではない)に設定しようとすると、これは単純ではないことがわかるでしょう。そして、Twitterを検索するためにGoogleを使用すると、少なくとも一部のユーザーやツイートについては、GoogleがTwitterをほぼリアルタイムでインデックス化していることがわかります。高負荷下で大規模なコーパスに対してLuceneでリアルタイムインデックス作成を試みたことがある人なら、これも単純ではないことに気づくでしょう。主要な検索エンジンにインデックス化されていないツイートを見つけることができるので、これは完全に公平ではないと言うかもしれませんが、何をインデックス化するかしないかを決定したいのであれば、それも一般的には単純ではない問題です。そして、これはインデックス作成についてのみ話しており、インデックス作成は検索エンジン構築の最も簡単な部分の一つです。実際に利益を上げることを気にするビジネスは、MVPが週末に構築できたとしても、システムを最適化するために多くの時間(したがって、多くのエンジニア)を費やします。また、レイテンシの低下が、かなりの範囲のレイテンシで一部のビジネスの収益に大きな影響を与えることが見出されている広範な研究もあります。パフォーマンスの向上は、コスト削減の利点もあります。ビジネスは、追加するエンジニアのコストが、収益の増加と限界でのコスト削減に等しくなるまで、最適化に取り組むエンジニアを追加し続けるべきです。これはしばしば人々が考えるよりもはるかに多くのエンジニアを必要とします。そして、それはパフォーマンスだけです。機能も重要です。あらゆる企業のほぼあらゆる製品に取り組んでいるエンジニアと話すと、収益に整数パーセントポイントを追加できる、一見単純な個々の機能を見つけることがよくあります。パフォーマンスの場合と同様に、人々は、エンジニアが自分たちの費用に見合うようになる前に、製品に追加できるエンジニアの数を過小評価しています。さらに、機能はしばしば外部の人が考えるよりもはるかに複雑です。検索を見ると、日付や電話番号のさまざまな形式が同じ結果をどのように提供するかをどうやって確認しますか?国際化はどうですか?各言語には、考慮しなければならない独自の癖があります。フランス語では、「l'foo」はしばしば「un foo」と一致すべきですが、90年代のアメリカの検索エンジンは実際にはそれを正しく処理していませんでした。単語の間にスペースがなく、文に一意のトークン化がない中国語のクエリをトークン化する方法はどうですか?クエリに4つの異なるアルファベットを簡単に含めることができる日本語はどうですか?右から左に読まれることが多いアラビア語を処理する方法はどうですか?ただし、右から左に読まれる部分を除く。そして、それはアラビア語を扱う最も複雑な部分でさえありません!週末プロジェクトのMVPでは、これらのことを無視しても構いませんが、実際のビジネスで無視することは、市場の大部分を無視することになります!これらの問題の一部はオープンソースプロジェクトでうまく処理されていますが、多くの問題はオープンな研究課題を含んでいます。セキュリティもあります!セキュリティ担当者を雇用して会社を「肥大化」させなければ、HotmailやYahooのように、製品が他のどの機能よりもハッキングされる頻度で知られるようになるでしょう。これまでに見てきたすべては技術的な問題です。組織的な問題と比較すると、技術的な問題は単純です。実際のシステムはメッセージの約0.1%をドロップしたり、さらに少ない割合のメッセージを破損したり、マイクロ秒からミリ秒の範囲のレイテンシを見たりする可能性があるため、分散システムは難しいと考えられています。上層部と話して、彼らが言っていると思っていることと、同僚が言っていると思っていることを比較すると、メッセージの損失率は50%をはるかに超え、すべてのメッセージが破損し、レイテンシは数ヶ月または数年になることがわかります1。人々が何かを構築するのにどれくらいの時間がかかるかを想像するとき、彼らはしばしば完璧に機能し、時間を100%コーディングに費やすチームを想像しています。しかし、それはスケールアップ不可能です。問題は非効率性が存在するかどうかではなく、どれだけの非効率性があるかです。組織的な非効率性を排除できる会社は、あらゆる技術スタートアップよりも大きなイノベーションとなるでしょう。しかし、会社が「べき」従業員数を計算するとき、人々は通常、会社が効率的な組織であると仮定します。この投稿は検索を例として使用していますが、LuceneがすぐにGoogleの能力を追い越すだろうと主張する人々に出くわしたためですが、この投稿には検索に固有のものは何もありません。ほぼすべての分野の人々と話すと、その分野の問題の複雑さを人々がどれほど大きく過小評価しているかについての話を聞くでしょう。ここでのポイントは、小規模チームがGoogle検索よりも優れたものを作るのが不可能だということではありません。誰かがPageRankのような偉大なイノベーションを生み出し、小規模チームがそれを実行可能な会社に変えることは完全にあり得ます。しかし、その会社がVC資金による急成長段階を過ぎて利益を最大化したい場合、会社がハードウェアとソフトウェアの非効率性により年間数億ドルまたは数十億ドルをテーブルに残したくない限り、Googleのような数千人規模のプラットフォーム組織を持つことになるでしょう。そして、会社はタイ、アラビア語、中国語、日本語のような言語を扱いたいと思うでしょう。それぞれが単純ではありません。そして、会社は比較的良好なセキュリティを確保したいと思うでしょう。そして、ユーザーが気づいていない何百もの小さな機能があり、それぞれが収益を顕著に増加させています。請求業務をアウトソースするのは「明白」ですが、自社で請求業務を処理している会社と話すと、StripeやBraintreeからは得られない、コンバージョンを単桁または二桁パーセント増加させる個々の機能を示すことができます。あるサイズを超えると、その50人の請求チームは完全に価値があります。そして、ほとんどのエンジニアは考えもしない営業があります2。正確に