データ分析業界の状況
市場概要、リスク、競争環境
Plaidは、他の企業が銀行データとつながるのを支援する金融テクノロジー企業です。他の人がやりたくない退屈な作業をすることで、他の人にとって生活が便利になり、非常に粘着性の高い商品になります。
今日は金融テクノロジー企業について話Plaidします。その前に、抽象化やアプリケーションプログラミングインターフェース(API)について直感を身につけておくと良いでしょう。セクション1は抽象化、セクション2はAPIについて話します。すでにこれらの概念に慣れている方はセクション3に飛ばしてください。いつものように、理解しやすいように技術的に正確さは控えめにします。
まず抽象について話しましょう。
例えば、画期的なアプリのアイデアで大金を稼ぐとします。ユーザーがキーボードのF2キーを押すたびに何かが起こり、利益を得るようにアプリをコーディングします:

これをノートパソコンでテストし、すべて順調に動作し、収益を上げ始めます。あまりにもうまくいくので、参加したい友人たちに話すのです。コードを送って、成功しろと伝えます。
友人の一人(うるさいヒップスターの方)が、そのコードがMacでは動かないと言い、次の単一産地単一バレル単一植物のコーヒーを買うためにお金が稼げないことを悲しんでいます。なぜそうなるのか不思議に思い、コードのトラブルシューティングに行きます。
Macにはファンクションキー用の奇妙なTouch Bar thingがあり、その唯一の目的は生活を困らせることだけのようです。Macユーザー向けに特別なコードを追加します:

今はそれが彼に合い、彼はsuing magazines for saying all hipsters look alike.に進みます
別の友人は、モバイルもサポートして外出先でお金を稼げるか尋ねています。別の人はBlackberryのサポートを追加できるか尋ねています。さらに別の友人は、アプリがいつKFC gaming consoleで利用可能になるのか知りたがっています。
さまざまなコンピューティングデバイス向けにコードを追加する作業を見つめていると、だんだん絶望し始めます。なぜお金を稼ぐのがボタンを押すだけの簡単なことではないのでしょうか?一度コードを書いて、それを複数のデバイスで使えるようにしたいだけです。
上記の考え方は、実際にはコンピューティング(複数のデバイスサポート、つまり収益化のためのものではなく)でよくある問題です。すべてのことを目的としたソフトウェアを書くなら、すべてのエンドユーザーデバイスを考慮する必要があります。コードをバイナリ(1と0)に変換した後も、同じことをしなければなりません。デバイスごとに独自の癖があり、主な機能を書くよりも例外処理に多くの時間を費やすことになります。
90年代後半には解決策が見つかりました。つまり、その間にもう一層、つまり他人の問題にする*という方法です。 As Shimon Schocken explains,「仲介者」がいることで作業が簡素化されます。すべてのデバイス向けにコードを書く代わりに、「一度書いてどこでも動く」という形で、その仲介者がコードの互換性を担当する1:

大きなタスクを小さなタスクに分割することで、みんなにとって楽になります。 あなたは問題の一部を抽象化してしまいました。なぜなら「高レベル」なコードを書きたいので、特定の実装バグを気にしなくていいからです。他の人は「低レベルの」実装の詳細は好きでも、その上にアプリを書くのは嫌がるかもしれません。それぞれの能力に応じて、それぞれのニーズに応じて、そういった流れです。
この抽象化の考え方に戻ります。抽象化は、人々がタスクの特定の部分に集中できるようにします。
さて、あなたと友人たちが世界中の銀行にそのお金をすべて振り込みたいとします。銀行はそれぞれ異なる手続きを持っており、ルールに従わなければ追い出されます:
グループの多くはこれらのルールを暗記するのが嫌いだが、エイプリルは例外だ。彼女は難解な選択肢を扱うことを楽しんでおり、グループの代わりにすべての銀行とやり取りすることを志願している。取引の進み方には関心がなく、ただ取引が起こることだけを気にし、グループはすべて彼女に任せている。
あなたが参加したサイケデリックリトリートの知り合いの何人かが、あなたの取り決めについて聞いています。彼らは銀行と直接やり取りするのを嫌い、エイプリルにも助けられるかどうか知りたがっています。彼女は少額の料金を支払えば喜んで協力します。噂が広まり、やがて皆が仲介者としてエイプリルに電話をかけるようになります。
またしても、人々が一番気にかけていたのは大きなタスクの一つ―入出金――に集中していたということです。人々はエイプリルがなぜこれを好むのか、どうやってすべてを覚えているのかは気にせず、ただそれをやり遂げることだけが大切です。エイプリルがいることで生活がより便利になります。
最後に、もしあなたがアカウント残高を確認したいとしたら、エイプリルがレンタルAirBNBの隠れたサービス料を横領していないか確認したいのです。あなたはスプレッドシートに最近の入金を入力し始めます:

プログラマーなのでExcelが嫌いで、その機能に詳しくありません。ただし、追加用の「+」記号は知っていて、その方法で手動で残高を計算し始めます。

100セルと1時間後、ほぼ終わろうとしたとき、友人が「何をしているの?」と尋ねます。彼らはsum()関数があなたの望むことをすると説明します:

また、エクセルが数学を楽にするための「ライブラリ」機能(例えばavg()、count(など)についても教えてくれます。面白いのは、どのデバイスを使っていても、Windowsノートパソコンでも友人のMacでも、お父さんの携帯電話でも同じ動作が期待できることです。関数の動作や呼び方がわかれば、時間の節約になります。Excelがどうやって使うかは気にせず、どこでもいつでも動作すればいいだけです。
異なる作業層を抽象化することで、各層での可能性と機会が増えます。 sum() をプログラムした人は、あなたの預金を合計するのに時間を費やしたくありません。あなたも sum() 関数をプログラムしたくありません。人は自分が取り組みたい部分に集中します。すべてをやらなければ、多くのものを作れるのです。
抽象化の概念はプログラミングの外にも適用されます。 私たちは皆、問題の「層」に取り組み、その下のすべてが信頼できると信じています。あなたはメールでこれを読んでいて、メールサービスの仕組みは気にせず、ただ予測可能な振る舞いをしているだけです。
これでアプリケーションプログラミングインターフェース(API)について考える準備ができました。上記のsum()のような数学関数のライブラリをプログラムしたと想像してください。それらの関数を他のプログラムで使えたら便利ではないでしょうか?
そして、そのライブラリを誰でも利用できるようにすれば、他の人もそれを使って自分だけ面白いものを作ることができます。あなたは数学関数の作成に集中でき、他の人は必要に応じてライブラリの機能を呼び出すアプリを作ることに集中できます。
Joshua Blochが指摘するように、1952年にはすでにDavid Wheeler 2のような人々がこのhaving libraries of functions (sub-routines)の考えを提案していました。

**その関数ライブラリをAPI3と呼びます。**ジョシュアはこの用語がa 1968 paper by Ira Cotton and Frank Greatorex:年に初めて使われたと考えています

この用法は、私たちが例で議論した概念に触れています。
私たちのAPIは明確に定義された契約で、必要な入力と期待される出力を教えてくれます。例えば、sum()関数は常に入力の合計を返してほしいのですが、場合によっては合計ではなく、また別の場合は平均を返しません。
また、APIが契約外のことを期待することもできません。例えば、sum()はExcelでは動作しますが、make_me_money()はExcelの作成者がその機能をコード化しない限り動かしません。
そして、厳格なテストを経てAPIが正しくプログラムされていると信頼しています。例えば、sum()関数は同じデータセットで毎回同じ結果を出すはずです。
APIがない生活を想像してみてください。何かをプログラムするたびに一からやり直さなければならず、あらゆるエンドユーザーのシナリオを考慮しなければなりません。それはまるでmaking a sandwich from scratchのようなものです。
APIとは何か、なぜ重要なのかを確立しました。では、Plaidは何をするのでしょうか?
ご存じない方のために説明すると、Plaidは金融テクノロジー企業で、supposed to be bought by Visa for $5bnしていましたが、独占禁止法の問題で買収を断念しました。私の恋愛とは違い、拒絶されたことで実際に価値が高まり、今ではその会社はrumoured to be raising money at $15bn.
4月があなたと銀行の間にあったのを覚えていますか?4月をAPIだと考えてください。
Plaidは銀行と銀行データを利用したい他の企業間のAPIです。 彼らは顧客がAPIの上にアプリを構築できるようにし、裏での統合作業を気にする必要がありません。そしてそれは膨大な作業です。
例えば、予算アプリを作っているとしましょう。ユーザーの支出履歴にアクセスする必要があります。もし自分のコードを銀行と接続するなら、新しい銀行が追加されるたびに新しいセクションを書く必要があります。新しい基準が常に変わっているため、アプリの主要な機能よりも多くの時間をかけることになるでしょう。

Plaidは常に動作するAPIを提供し、銀行に接続した際にユーザーが見ることができるユーザーインターフェースも提供します(Plaid Link).あなたの問題が彼らの問題に変わったのです。
Plaidのクイックスタートガイドhereを参考にして、この様子を少し見てみましょう。自分のパソコンでデモアプリをセットアップするためのファイルがいくつかあります。
一日のトラブルシューティング、複数回の再起動、そしてほぼすべてのプログラムを無差別にインストールした後4:

ついに一部を動かし、テスト用の銀行口座に接続しました:

これにより、銀行口座残高などのダミーデータを見ることができました:

または最近の取引データ:

もし私がやり方を知っていれば金融アプリを作り続けることもできました。アプリはPlaid APIを使って残高データを取得し、取引を記録し、残高を更新します。しかしこの時点でさらにバグに遭遇し、諦めましたはまた別の機会にしておきました。
もし私が会社を作っているなら、Plaidに基礎的な財務業務をすべて任せて時間を節約できるか想像できるでしょう。銀行統合の問題はその下の層にあるので、私は取り組みたくありません。それは私にとってワクワクしません。むしろ、その上にピカピカの株式取引ルーレットホイールを作って人々のお金を騙し取る仕事をしたいです。それがdoing god’s workです。
現代の多くの企業を「テクノロジー」企業と考え、さらに多くの企業が「財務」データを必要とすることを考えると、Plaidのチャンスがどれほど大きいかがわかります。** 顧客の銀行口座と直接連携したい企業が増えれば増えるほど、Plaidの関連性は高まります。
**PlaidはAPI5の利用に対して消費者ではなく企業に料金を請求しています。小規模企業seems to take取引手数料、大企業にはサブスクリプション料金がかかります。「退屈な」作業を行うことで、彼ら自身と利便性のために喜んで支払う他のイノベーターにとってウィンウィンの状況を生み出しています。
一度Plaidを使い始めると、切り替える可能性は低いでしょう。なぜなら、PlaidのAPIを使う多くのコードを書き直すことになるからです6。それがPlaidの価格上げ能力にどう影響するか考えてみてください。配管はどのくらいの頻度で交換していますか?
もしこれが非現実的に聞こえるなら、初期のプログラミング言語であるFortranを考えてみてください。その関数ライブラリはdefined in 1958され、現在も使われ続けています。一度実装されると、APIは長く使えます:

今日は多くのことを扱いました。抽象化の直感、API、そしてPlaidが何をしているのか。主な教訓は、人々がやりたくないことがたくさんあり、そういったことで多くのお金が稼げるということです。 ニュースレターは退屈な人を避けるように言っていますが、この場合、退屈なものを作ることは数十億ドルのビジネスです。
この記事に関するアドバイスをくださったBrian Rubinton、Justin Gage、ベン・モルシロ、Denis Papathanasiou、マイ・シュワルツ、Aditya Athalye、Jeremy Presser、Ian Karに感謝します
より技術的に正確に言うと、コード自体ではなく、すべてのデバイスと互換性があるのはコンパイラであり、コード自体はコンパイラの上の層です。 ↩
デイビッドはコンピュータサイエンスの博士号を授与された最初の人物らしい。 ↩
技術的には当事者間の契約自体がインターフェースであるべきですが、初心者には一括りにまとめた方が理解しやすいと思います ↩
Plaidのpython用githubフォルダは99%間違いだと思います。index.htmlファイルが空だからです。また、plaidとplaid-pythonの間には理解できなかった名前空間の問題もありましたが、最終的には修正されました。なぜDockerを使う必要があるのか分かりませんが、私の作品が動作するために必要な多くの追加プログラムの一つでした。更新:Plaidはこれらのバグが修正され、クイックスタートプロセスが変わったと述べています。 ↩
企業はそのコストを消費者に転嫁しようとしていると思いますが、ここでのポイントは、サービスに対して直接支払っているのは、金融統合を必要とするアプリを作っている企業だということです ↩
私はそう思いますが、間違っていたら教えてください。 ↩