数据分析行业格局
市场概况、风险与竞争格局
Plaid是一家金融科技公司,帮助其他公司连接银行数据。通过做别人不想做的无聊事情,这让大家的生活更方便,也成为一个高度粘性的产品。
我将讨论一家金融科技公司 Plaid 今天。在此之前,先了解一些抽象和应用程序接口(API)的直觉会很有帮助。我会把第一部分讲抽象,第二部分讲API;如果你已经熟悉这些概念,可以跳到第三部分。像往常一样,我会倾向于技术准确度较低,以便更容易理解。
我们先讨论抽象:
假设你有一个开创性的应用创意,想赚很多钱。你把应用写成每次有人按下键盘的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:

将一个大任务拆分成更小的任务,对所有人来说都更容易。 你已经抽象化了部分问题,因为你想写“高级”代码,不想担心具体的实现漏洞。还有人可能喜欢“低级”实现细节,但不想在上面写应用。根据能力和需求各写一个,等等。
我们会回到抽象的概念,它让人们能够 专注于任务的具体部分。
现在,假设你和你的朋友想把所有这些钱存进世界各地的银行。各银行有不同的程序,如果你不遵守他们的规则,他们会把你赶出去:
大多数成员讨厌背这些规则,但April是个例外。她喜欢处理一些晦涩的选择,自愿代表团队处理所有银行事务。她不在乎交易如何进行,只关心交易是否会发生,团队让她处理一切。
你参加过的迷幻静修营里的一些熟人听说了你们的安排。他们也不喜欢直接和银行打交道,想知道April是否也能帮忙。她很乐意帮忙,只要他们付她一小笔费用。消息传开了,很快大家都找April做中间人。
我们再次看到人们最关心的 更大任务的一部分 - 存款和取款。人们不在乎April为什么喜欢这个,或者她怎么记住一切,只关心她能完成。有April让生活更方便。
最后,假设你想检查账户余额,确认April没有挪用钱支付她租赁AirBNB的隐藏服务费。你开始在电子表格中输入最近的存款:

作为程序员,你不喜欢Excel,也不熟悉它的功能。不过你知道用“+”符号添加内容,然后开始手动计算余额:

一百个单元格和一个小时后,你快完成时,一个朋友问你在做什么。他们解释说sum()函数能实现你想要的效果:

他们还告诉你整个情况 函数的“库” Excel必须帮助简化数学,比如AVG()、count()等。有趣的是,无论你用的是Windows笔记本、朋友的Mac、你爸的手机,这个函数都能有同样的表现。一旦你知道这个函数是做什么的,怎么调用它,你就能节省时间。你不在乎Excel怎么做,只要它在任何地方、随时都能用就行。
抽象化不同层次的工作 在每个层面上都增加了可能性和机会。 编写sum()的人不想花时间帮你计算存款。你也不想编写sum()函数。人们只专注于自己想做的部分。不做所有事情,人们可以创造很多东西。
抽象的概念在编程之外同样适用。 我们都在处理问题的“层面”,相信下面的一切都是可靠的。你正在邮件中看到这些信息,并不关心邮件服务的工作原理,只关心它们的行为是可预测的。
现在我们准备开始思考应用程序接口(API)。想象一下你编写了一个数学函数库,比如上面提到的sum()。 如果能在其他程序中使用这些功能,那不是很方便吗?
如果你能让这个库对所有人开放,别人也可以用它来构建他们自己有趣的东西。你可以专注于制作数学函数,其他人则可以专注于开发能够根据需要调用你库功能的应用程序。
作为 Joshua Bloch 指出,早在1952年,人们就喜欢 David Wheeler 2 我们已经提出了这个想法 having libraries of functions (sub-routines):

我们将该函数库称为 API 3. 约书亚认为这个词最早是在 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.
还记得四月在你和银行之间跑吗?把四月当作一个API。
Plaid是银行和其他想使用银行数据的机构之间的API。 他们让客户能够在API之上构建应用,而无需担心幕后集成工作。而且这工作量非常大。
假设你正在构建一个预算应用,它需要访问用户的消费历史。如果你用自己的代码连接银行,每当新增银行时,你就得写一整块新部分。鉴于新标准不断变化,你可能会花在这上面比应用的主要功能还多。

Plaid可以为你提供始终可用的API,以及用户连接银行时能看到的用户界面 (Plaid Link). 你的问题已经成了他们的问题。
我们将通过Plaid的快速入门指南,一窥这到底是什么样子 here.它会给你一些文件,可以在自己的电脑上设置演示应用。
经过一天的排查、多次重启电脑,以及盲目安装几乎所有可能的程序 4:

我终于让部分功能正常工作,连接了一个测试银行账户:

这让我可以查看虚拟数据,比如我的银行账户余额:

或者最近的交易数据:

如果我 想要 我知道怎么做,我可以继续这样构建一个金融应用。应用会用Plaid API拉取余额数据,记录交易并更新余额。不过这时我遇到了更多bug, 放弃了 留待以后再说。
如果我要创业,你可以想象让Plaid帮我做所有基础财务工作能节省多少时间。我不想处理银行整合问题,那是下一层;那对我来说并不令人兴奋。我更愿意做那个闪亮的股票轮盘赌轮盘,骗取人们的钱;那是 doing god’s work.
如果你把现在大多数公司都看作“科技”公司,再考虑有多少公司需要“财务”数据, 你会开始感受到Plaid的机会有多大。 越多公司希望直接与客户银行账户集成,Plaid的相关性就越大。
Plaid收费公司, 不是消费者,而是用来使用API。 5.它 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 关于本文的建议
更准确地说,编译器必须与所有设备兼容,而不是代码本身,因为代码是编译器上方的一层。 ↩
大卫显然是首位获得计算机科学博士学位的人。 ↩
技术上来说,界面应该是双方之间的合同本身,但我觉得把它们合并起来对初学者来说更容易理解 ↩
我99%确定Plaid的Python文件夹是错误的,因为里面有空的index.html文件。plaid和plaid-python之间还有一些奇怪的命名空间问题,我当时不太理解,但最终修复了。我不明白为什么他们需要用Docker,而Docker是我软件运行所需的众多额外程序之一。更新:Plaid后来提到这些bug已经修复,但快速启动流程不同。 ↩
我相信公司会试图将成本转嫁给消费者,但关键是,直接付费的客户是那些制作需要金融集成应用的公司 ↩
我相信是这样,但如果我错了请告诉我。 ↩