携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情
现在互联网公司里面的开发流程一般都是敏捷开发,而不是传统软件工程领域里经常提到的瀑布式模型,迭代周期也越来越短,原先几个月的迭代周期现在可能已经缩短到了几周的级别(这种开发模式通常被称作scrum)。那么一个需求,从提出到最终结束,到底会经历几个环节呢,这中间又涉及到哪些角色和相关方呢?这一系列的文章将主要带大家从一个服务端的视角来观察一个需求从出现到结束的完整生命流程。
首先需求调研,这个阶段一般是有PM(产品经理)来负责的,PM需要调研当前市场上已经存在的同类型产品(可以称为“竞品”)的类似需求。现在这个时候,已经很难有完全新颖的领域没有被涉足了,我个人认为都是对一些现有功能的修修补补或者是一些微创新。调研的方式可以有很多,由于主要讨论技术,所以与技术不太相关的部分就不多涉及了。当然,这里说的是普通的产品需求,实际上,还有一种需求叫做技术需求。技术需求顾名思义就是与技术相关的需求,这类需求一般是可能包括,代码结构重构(增加封装、按照设计模式重写)、架构调整(由单体服务拆分为微服务)、数据迁移(Oracle迁移到MySQL)等。技术需求也不一定就是为了还所谓的“技术债”,因为随着时代高速变化,很多的东西可能在当时是比较合理的解决方案,到现在就不能适应新时代的特点了。最典型的比如腾讯、字节,腾讯过去一直在使用C++、字节创立之初的服务都是Python写的,现在越来越多的服务开始向golang上转移,这也是从开发效率、性能等各方面综合考量的结果。
现在互联网公司里有一个比较时髦的词叫做数据驱动,产品需求调研其实也是需要借助数据做决策的。这个时候可能就要求PM会写SQL。这里依赖公司的底层大数据基建,现在一种比较流行、比较普遍的做法是在Hadoop生态中的数据仓库组件Hive上进行二次开发,在里面添加一些定制化的feature。这里的具体流程涉及对SQL(在Hive中是HQL)进行词法/语法分析、编译、优化、生成逻辑执行计划,最后生成的计划存储在HDFS中,由MapReduce进行调用执行,这部分我会放到大数据专题进行专门的讲解。