工作10多年,职业生涯可以分为两个阶段:有2/3时间是在传统软件公司,最近1/3时间在互联网公司,大部分经历也是在开发企业级应用。 当然这两个阶段的调整,也并非一帆风顺。 虽然一直都在软件研发领域,但在招聘、用人、开发、管理等方面,从想法到方式,都发生了颠覆性的变化。 有被动的调整,而更多的是为适应环境所做的主动调整。在调整时,往往也会很迷茫,不知道这么走是否是正确的。 在这过程中,Netflix这个PPT是对我最有帮助的一份文档。
最早看到这一份PPT的应该是在2010年左右,当时还在传统企业, 受公司文化影响,对其中大部分内容是无法真正去理解,也很难实践。 后来得到一个机会,进入一家互联网视频公司,开始了向互联网领域转变的历程。 这过程中,逐步理解Netflix的企业文化,同时也亲身经历了这公司从高速发展到进入平庸的整个过程。 在2017年,为了准备一个的面试,再次翻阅这个PPT,回顾这个公司在这几年的发展历程,才真正理解Netflix在公司文化建设上的用心和坚持。
作为一个软件工程师,我更倾向于从技术的角度来理解公司的运作。 当Netflix公司文化这个PPT成为互联网领域圣经的同时,我们还应该知道,Netflix是目前微服务领域(敏捷开发,微服务,Devops,持续交付)的做的最好、最有影响力的公司。 他的微服务架构、组件、方法论,已经成为这个领域的标杆。 这和20年前,作为全球最大软件公司的IBM,它的RUP(Rational Unified Process,统一软件过程)也被各公司奉为圭臬的盛况是一模一样。 Conway定律是软件公司无法摆脱的魔咒:
If the parts of an organization (e.g., teams, departments, or subdivisions) do not closely reflect the essential parts of the product, or if the relationship between organizations do not reflect the relationships between product parts, then the project will be in trouble… Therefore: Make sure the organization is compatible with the product architecture.
公司的产品架构会倒逼公司组织结构的调整。公司的组织结构必须和公司的产品架构相吻合。
我在上一家公司是率先在项目中实践微服务,推动过程中障碍重重,最终结果差强人意。 加入新公司后,所负责的各项目都非常自然地采用微服务。 传统自上而下管理的公司中引入微服务无一例外都遭遇重重困难,而在新兴的互联网公司中,单体系统要么已经被拆解为微服务,要么在拆解的过程中。 虽然从管理的角度,我们会认为Netflix有些做法会比较激进,但从技术的角度来看,这些举措却又显得自然而然。比如:
- 只有每个领域都招聘到业内最强的人,才能保证这些领域的服务不会成为系统的短板。
- 我们需要警惕哪些不羁的天才, 因为这么多服务都需要遵循约定的规范才能够完成协同, 挑战这些规范会带来巨大的风险。
最近几年工作一直集中在企业应用领域,而最近企业应用又有新的发展趋势。 到现在,绝大部分的企业应用还是在使用传统的软件开发方式, 从需求分析到最终交付的产品,和20多年前并无本质差别。 虽然少量系统开始试图使用最新的一些技术框架,如spring boot等,但也只是在使用和20多年前一样的功能。 Spring boot中和微服务相关的一些特性,基本都用不上。 如同腾讯微信支付、蚂蚁金服等互联网公司通过在线支付来颠覆了金融服务的输出方式一样,企业应用接受互联网的改造已经成为无法避免的趋势。 而作为参与者,我们必须做更彻底的转型,颠覆自己在招聘、用人、开发、管理上的认知,才能够解决在这个转型中面临的困难。
因而,在分享企业应用系统的设计之前,我首先分享如何参考Netflix企业文化,建立一支适合互联网时代的企业应用系统开发的团队。