你好,世界-Zerodha,印度最大的股票经纪人

2020-05-07 23:33:29

Zerodha现在是印度最大的股票经纪人,自力更生并盈利,今年就满十岁了。泽罗达科技团队就满7岁了。在我们存在的过程中,技术团队在很大程度上仍然难以捉摸。虽然我们已经考虑创建一个科技博客超过五年了,但我们经常发现自己太忙于建立股票经纪公司的基础设施。我们也因为没有准备好与世界谈论我们非常非常规的设置而停滞不前。

但现在,装备了久经沙场的后见之明的力量,博客终于来到了这里,我们希望分享我们建造了什么,我们是如何建造的,以及我们这些年来学到了什么。

TLDR:七年来形成的30名成员的技术团队打造了印度最大的股票经纪公司。非常规的设置。期待已久的科技博客终于来了。一些背景故事和背景。

Zerodha于2010年由两兄弟和终身交易员NiThin和Nikhil Kamath在班加罗尔成立,当时是一家小型折扣经纪公司。2012年,我在学校的一位老朋友的劝说下开发了一款投资应用程序,完全是偶然的,我们发现了Zerodha,就因为他们的办公室恰好就在我们出没的同一附近。

到2013年初,我们已经停止了对这款应用的开发,在未能获得监管部门的批准后,我们分道扬镳。如果是今天,我们就会获得必要的批准,因为今天的监管机构比2013年成倍地精通技术。我决定坚持下去,主要是因为当时资本市场上所有科技产品的状况(也就是说没有)令人惊讶,在一个未被触及的领域开发软件令人兴奋,而且真的是因为尼辛和我相处得真的很好。在那个时候,我已经做了十多年的业余开发人员/黑客,我觉得我可以继续这样做,尽管我一直在“公司”的环境中开发软件,这是我一直持怀疑态度的。

然后建造,我们做到了。我们在2013年年中成立了技术团队。当时,Zerodha大约有75名员工。今天,技术团队有30名成员,公司其他部门的人员已增长到约1200人,分布在销售、运营、支持和合规等不同部门。股票经纪,特别是在印度,是一份复杂而艰难的工作。

技术团队有两名移动开发人员、两名设计师、两名前端开发人员、一名测试工程师、一名devops工程师和一名联络员,帮助我们跟踪与其他杂乱无章的部门的沟通。我们其余的人,包括前面提到的专注于特定领域的成员,都是全栈开发人员,他们几乎什么都做。没有专门的项目或产品经理,开发人员担任这些角色,自然就会出现领导者。产品和技术由两到四个开发人员组成的小团队构建、维护和拥有,这些微团队之间有几个重叠。

团队中没有人有任何金融背景,除了少数开发人员外,大多数人也没有以前的工作经验。每个人都是刚走出大学校门的黑客或业余爱好者。什么大学,我们既不问,也不跟踪。

一个由30名成员组成的技术团队从头开始构建并扩展了一个复杂的金融+股票经纪堆栈,为最终用户构建了一整套金融软件,人们在一个极其复杂、约束和快速变化的监管环境中真正欣赏这些软件,而事先对行业一无所知,这是一个相当大的壮举。与其说是壮举,不如说是反常。然而,我发现,一群黑客在正确的环境中,在正确的哲学指导下,即使在印度股票经纪行业这样一个不时髦、不酷的地方,也能具有令人难以置信的创造力和生产力,这是很自然和令人心酸的。过去的规范-一小群黑客开发优秀的软件-现在已经变成了例外。

Zerodha在2019年1月成为印度最大的股票经纪公司,超过了大型银行运营的股票经纪公司。我们缓慢而有机地实现了这一点。我们从来没有筹集过外部资金,没有负债,而且一直是盈利的。我们没有营销团队,没有在任何地方做广告,多年来让我们的服务和产品不言而喻,建立了我们的用户基础、品牌和信任。

所有印度证券交易所每日零售交易量和投资额的15-20%都通过我们的应用程序进行。

我们每天有大约100万活跃用户在印度各交易所实时进行数百万笔交易,总交易额超过30亿美元。3月初,当美国嘉信理财(Charles Schwab)报告称,一天内交易达到270万笔的新纪录时,我们进行了700多万笔交易。当然,比较是基于活动的规模,而不是交易量(美元对印度卢比)。在刚刚结束的上一财年,我们执行了超过10亿笔交易。

我们的系统在市场高峰期每秒处理数十万个请求。我们每秒向数十万并发用户广播约1600万个市场交易记录。由于仔细的逐字节优化,带宽费用可以忽略不计。

我们从存储数千亿行投资记录的Postgres节点即时构建和提供详细的投资组合报告、细分和可视化。

在我们不久的将来开始深入研究之前,这里是对我们堆栈的一个快速、广泛的概述。

我们所有的性能关键型、高吞吐量服务都是用Go编写的。我们还没有收到任何主动提出的建议,要求我们重写Rust或Nim的所有内容(目前还没有)。

实时性能不是瓶颈的数据密集型后台系统是用Python编写的。Django和Flask提供特定的Web应用程序。

无数复杂的业务、财务、帐户、人员流程和后台应用程序都构建在ERPNext之上。感谢宇宙的ERPNext。

适用于iOS和Android移动应用程序的Ffltter。放弃了原生的Android/Java、Swift,而改写了原生的一切。诚然,仍然有一款“反应原生”(Reaction Native)应用程序。

具有数千亿行的自我管理Postgres实例。由于某些依赖关系,MySQL实例有数十亿行。

高吞吐量热路径中的自管型Redis实例。很少有软件具有如此令人难以置信的自动化程度。

ELK堆栈用于日志,其中存储数年数TB的可搜索日志是法规要求。

混合基础设施。许多交换机租用线路终止的物理机架+AWS。有时,当孟买的市政机构挖掘道路时,这些租用的线路就会倒塌。

这些是碰巧对我们起作用的一些广泛的指导原则。

无论是为了“成长”的大型团队,还是10倍的忍者开发者,都没有意义。重要的是,一群优秀的开发人员,无论多小,都能够很好地合作。

僵化的方法往往会失败。人员、团队、需求和环境是无限不同和动态的。一个环境和团队独有的方法论必须以同样的方式建模,就像“为正确的工作使用正确的工具”一样。

技术堆栈应该遵循“为正确的工作使用正确的工具”,并且应该有机地发展。您可能不需要K8群集(或K8或Docker)群集,或者在第一天或永远不需要端到端CI/CD平台支持的AI和区块链。在采用一项技术时做出的每一个选择都会产生严重的长期后果。

尽量保持代码和堆栈的非花哨和简单。重常识,轻冷静。例如,用正确的权衡来避免微型服务地狱和巨石怪兽。

福斯-第一。只有自由/开源软件,真的。我们使用和生产自由/开源软件(今年,我们将启动一个自由/开源软件基金)。

不要害怕自己主持。我们自行托管公司的员工内部网和人力资源系统,支持票务和CRM、内部论坛和聊天系统、财务后台和会计应用程序、监控和记录基础设施、邮件服务器、数据库、代理,几乎无所不包。OAuth+2FA背后的一切都具有基于角色的访问控制和精细权限。对于开发人员,基于无密码证书的SSH登录。全是福斯。

技术团队应该以开发人员为中心来运行,而不是以业务或管理为中心。

技术决策,即使是那些具有业务影响的决策,也应该由技术人员做出。否则,功能就会出现爬行、臃肿、技术债务和倦怠。

绝对每个决策--人员、技术、运营、产品--都是一种权衡。每种权衡都应该在正确的技术和业务方面、开发人员和管理团队以及产品和最终用户之间取得平衡。做出正确的权衡是一门艺术。

对技术性债务要格外警惕。知道何时报废和重写系统。我们已经多次报废和重写了我们堆栈的大部分,包括我们的关键交易平台,每一次迭代都会显著改进它们。这些都是艰难的决定;极其重要的权衡。当然,不受非技术管理层的干预是不可思议的幸运。

构建组织和组织流程,如架构良好的软件系统中独立的、可互操作的单元。在2020年3月12日,由于冠状病毒紧急情况,我们能够让所有部门的大约1200名员工通宵完全远程访问。由于我们将整个组织的工作流程、系统和交互构建成一个设计良好的模块化软件系统,因此麻烦最少,这要归功于我们的结构和架构。

这种方法还帮助我们将组织开放为一套API,创建了一个“经纪即平台”系统,使几家初创企业能够通过接入我们进入投资技术领域,进而帮助我们启动金融科技基金,该基金现在已经投资了十几家初创企业。

与组织内的非技术团队建立有机的、有意义的关系。我们与组织内的小型非技术团队(支持和财务的子集)合作,从财务的角度对产品进行评审和验证,收集反馈和数据,并进行质量保证。

非常讲究质量和一致性。额外50KB的Javascript,或者Web应用程序上100KB的PNG,或者平均延迟突然达到10ms的峰值,都是不可接受的。无论成本如何微不足道,都是好工程的原则问题。稍作停顿,以更好的方式做事是可以的。

好的设计是最重要的。在不考虑人与人之间的互动和情感的情况下为人类构建软件是犯罪的。保持简单的UI和交互、清晰的排版、最小的杂乱和平稳的间距。为了在“美观的”和“易于使用的”之间取得适当的平衡,我们尽可能长时间地重复。

将技术成本视为工程挑战。总是在可能的情况下进行优化,不要把不是绝对必要的东西花掉。节俭和节制应该是黑客的第二天性。

并不是编写的每一行代码都是巧妙的或创新的,而且很多工作往往是乏味的。这就是现实世界的运作方式,也是每个开发人员都应该接受和内化的事实。

开发人员应该涉足所有领域(前端、后端、测试和QA/QC、基础设施、devops),并逐步自然地构建重点。

不要害怕冻结功能,以更好的方式构建技术。放慢速度来干净地建造是可以的,因为现在建造的东西将在未来产生严重的影响。“上市时间”的热情往往被夸大了,而且目光短浅。这对我们来说从来都不是障碍。事实上,遵循这种方法使我们能够以令人难以置信的速度制造大量产品并将其推向市场。

信任开发人员,容忍(甚至是可怕的)错误。关键是要在试错中学习,不要重蹈覆辙。不是每个人都是10倍的神枪手忍者,这没什么。每个人都有自己的关键角色要扮演。要有耐心,让人才成长。如果有人不尊重这一点,并且不断重复同样的错误,那么他们很可能不会放弃这一点。幸运的是,我们很少有这样的例子。

对于开发人员来说,找到有意义的工作以保持创造性和生产力是很重要的。团队中的每个人都有自己构建并拥有、维护、控制和负责的各种系统。此外,我们还有一项员工持股计划,当团队成员成熟并在其角色中成长时,该计划会增加他们对公司的所有权-员工持股计划的价值来自于实际利润。这还不包括金融科技创业投资的一部分。这显然在第一天就不可能实现(我们从未接受过外部资金)。多亏了团队和业务的发展,我们逐渐做到了这一点。

玩得开心是极其重要的。如果有机会让事情变得有趣,不管一个环境的现状有多“严重”,都应该让事情变得有趣。归根结底,重要的是工作质量。“一天不停的迷因和燃烧,可以帮助你远离压力和乏味。”到目前为止,我们已经连续五年多每天晚上在Steam上进行反罢工条件零(1.6)LAN比赛,从未失败过。永远不会变老,除了被n00bs无情地击中头部。

我们的工作,我们的产品,我们的失败,甚至我们的成功,都是可笑的。没有什么是伪善的。每件事都有一种模因。这帮助我们应对了过去面临的停机带来的愤怒,这些愤怒源于堆栈和控制之外的因素。

认识到没有什么是绝对的,一切都是荒谬的(参见冠状病毒世界)。打造一支健康、成功的团队是没有规则的。常识+努力+乐趣+运气。

接受并欣赏运气。无数微小的决定和权衡导致了一个成功的结果,这既是运气,也是代码。当然,几率与投入的工作量和激情成正比。我们最终处于正确的环境中(没有技术和管理分歧。感谢我。),我们的产品成功了,我们有能力做我们喜欢的事情,赚钱谋生,玩得开心,这是运气。

老实说,作为一名业余开发人员,我之前没有在公司结构中工作或管理团队的经验,除了黑客优先的方法之外,我没有任何可以借鉴的东西,而且我非常幸运地找到了志同道合的黑客,他们可以整天燃烧表情包,同时不断学习和制作高质量的作品。

我对这个博客的前景感到兴奋。它早就该来了。我们急于使用Zerodha作为案例研究,以说明不仅可以构建好的软件,而且可以构建大型企业(“独角兽”),使用小型黑客团队,即使在最不可能的行业也是如此。希望技术团队的成员能开始抽出时间半定期地出现在这个博客上,带着他们自己的经验和技术洞察力。