程序员如何做好技术规划?
1 前言
随着程序员的经验、资历不断提升,不再满足于日常业务搬砖,也要朝技术创新方向不断努力。对低级别的技术同学来说也许点上面的优化就可以做的不错了,但对于高级别的同学,体系化的思考能力尤其重要,这就需要做好技术规划。
在大前端新框架层出不穷的年代,技术规划似乎约等于轮子大法,不管三七二十一,新出一个框架拿来就尝试一下,例如RN、Flutter这类框架,第一批吃螃蟹的总能获得不错的红利。要是再有追求的,直接另起炉灶自己实现一下,例如Weex就是RN的Vue语言版本,在阿里体系内也是混的风生水起。
但最近几年大前端的新技术趋于稳定,不再有那么多红利可吃,另外很多公司也严禁重复造轮子,作为业务开发的我们如何在日常繁重的业务开发中做好技术规划呢?
2 什么是技术规划
规划,意思就是个人或组织制定的比较全面长远的发展计划,是对未来整体性、长期性、基本性问题的思考和考量,设计未来整套行动的方案。规划是融合多要素、多人士看法的某一特定领域的发展愿景。
-百度百科
从百度百科的定义来看,技术规划相比于日常技术优化有几个特点:
- 整体性:技术规划一定是对现有系统有体系化的思考,得出一个全面整体的改进方案,不在停留在某些具体优化点之上
- 长期性:技术规划一般周期都在在季度、半年度甚至年度,这就意味着这件事情是比较长期稳定的,需要持续推进的
- 方向性:技术规划需要针对某个方向,提出一个较为长远的目标,设计全面的发展计划和行动方案
3 怎么做技术规划
前期准备
-
业务分析
技术不是空中楼阁,一定是服务于业务场景,这个需要技术同学加深业务的理解。有句话提到加深业务理解总结下来就是:“站在业务方的视角,在理解业务发展目标、看清业务发展方向的前提下,做出技术和业务的平衡”。
所以技术规划首先要考虑的是业务价值,千万不要为了技术自嗨,为了规划而规划,一定要想想做这件事情最终给业务能带来什么? -
业界对标
当你要解决一个问题的时候,要相信你不会是第一个遇到的,也许业界已经有很好的解决方案,所以技术规划时候需要前期做足准备,充分调研看看别人是如何解决的,是否适合你的场景,多比较多对标,再开始动手。
技术同学往往会有自己动手的冲动,往往觉得自己亲自造轮子解决才有成就感,其实如果你能采用成熟方案以最小代价解决问题,这个难道不是更有效吗?
设立目标
一般设立目标的时候遵循SMART(S=Specific、M=Measurable、A=Attainable、R=Relevant、T=Time-bound)原则,可以逐条对照目标原则看你的目标是否符合。
当然设立目标也需要考虑一些因素:
- 收益:目标一定是能够获得业务收益的,例如收入、效率、体验,不要设立一个无法明确收益的目标。
- 技术:从技术层面来看,分为三个层次:现有扩展或者深度挖掘,新方向探索,趋势判断。越往后面的层次约考验技术同学的技术判断能力,这个需要大量的积累。
- 团队:目标是否是现有团队人力可以承受的?技术能力上团队是否能够支撑?比如做一个移动操作系统可能就不是一个中小公司可以考虑的事情,或许只有华为、阿里这类大型公司才有可能落地实现。
一个技术规划设立目标的例子:
在xxx时间内达到:
- xxx系统可用性99.99%
- xxx系统线上故障<x个
- xxx系统响应时间90线<x秒
任务分解
在目标设立好之后,需要进行目标的拆解,形成一份可以执行的计划。在任务分解的过程中需要注意几点:
-
全景图
任务分解不是没有章法的,这个尤其考验技术leader的技术大局观,必须具备开阔的视野看到整个事情的全景图,才能够在宏观层面更好的进行拆解。
以美团点评金融平台 Web 前端技术体系为例(图片来源:https://tech.meituan.com/2018/03/16/front-end-web-architecture.html): -
明确可执行
拆分出来的子任务需要明确可执行,子任务或者子目标也是要遵循SMART原则,同时拆分后更加贴近最终落地的结果,更加容易执行,未来也更容易进行衡量。
执行计划
任务分解后是制定执行计划,这个和做业务需求一样,要把一件事在分解拆细,评估工时,安排到人,进行项目排期。在执行计划上需要注意几点:
-
设定里程碑
对于一个长期的技术规划项目而言,经过任务拆解后可以能会分为几个子方向或者子项目并行开发,再加上周期漫长,如果要等到全部做完后再验证结果,这时候往往会产生非常大的偏差。里程碑的设立非常重要,一方面可以给到团队阶段性的胜利成果鼓励信心,另一方可以快速验证小步快走,避免出现重大的方向误差。 -
高风险项目
针对高风险项目,需要采取快速试错的方式,小步快走,前期要分阶段快速出成果。先做demo进行技术验证,再小范围尝试,最终再沉淀为应用。 -
计划设定
技术设定时候可以前紧后松,项目管理按照时间分阶段,月度计划可以细化到周或者天,长期计划可以细化到月。
任务拆分和估时的颗粒度也要适中,拆分出来的每一件事情都是可以测试验证效果的,但同时不宜太大(1~3天工作量最好),这样可以提高工作量预估的准确性,而且将来计划调整也比较灵活。
风险评估
执行过程中需要不断评估风险,风险分为两类:技术风险和管理风险。
技术风险:前期需要评估技术可行性,结合团队技能和梯队情况,充分调研业界最佳实践,寻找到合适自己的技术方案,一定要记住不要被“颠覆性”的想法冲昏了头脑。
管理风险:团队人员配备是否充足,是否会因为业务波峰波谷导致技术需求无法持续,这个需要考验技术leader对于未来业务的判断,同时和业务团队充分沟通,针对技术需要留有一些固定比例人力,保证技术项目的长期性。
贯彻执行
执行过程中,项目到了一个里程碑,需要停下来进行总结复盘,看看当前的位置离目标是否越来越近,复盘过程中是否有改善的地方,同时按照当前的状态对计划进行调整和制定改进动作。规划就是为了更好地适应明天的变化。
4 总结一下
技术规划包括明确目标、任务分解、执行计划、风险评估、贯彻执行这5个环节,每个环节都需要技术leader们认真思考,技术规划不光是表面光鲜高大上的事情,更需要脚踏实的狠抓细节才能落地。
最后,大家往往提到技术规划的时候脑中总是飘过各种高大上、酷炫屌炸天的技术,对于那些脏活苦活不屑一顾。但是我们需要仔细思考,回归到技术的本源,任何技术都是为业务服务的,如何选取合适的技术并且体现业务价值才是真正应该值得各位同学好好追寻探索。
---华丽的分割线---
第一则广告:美团点评上海团队招聘前端资深/专家工程师,有兴趣的同学欢迎投简历到wangdan53[AT]meituan.com
第二则广告,有兴趣同学可以关注微信公众号奶爸码农,不定期分享关于投资、理财、IT等内容: