系统工程地完成一个任务

09 July 2020 - Shanghai

任务背景

几个月前,我的发小guok找到我,请我一起完成一个任务,这个任务有很多部分组成:

  • 一个可以人脸识别的app
  • 一个微信小程序
  • 一个为多端提供服务的api
  • 一套数据库+文件存储的设计

这些组成部分有一些我非常熟悉,比如api和数据库,我每天的代码都围绕着他们; 也有我非常陌生的领域,比如app和小程序,我只和这些开发者进行过合作,并没有完成过这方面的代码。

完成过程

刚开始的时候,是我一个人完成这任务的所有组成部分,后来,guok找了外包公司,负责app部分的开发。 我开始思考如何让这个任务可以持续地进行,能够在我或者外包公司开发完成过后,后续的开发者可以顺利地接手迭代。

技术选型

app部分

  • 我使用的是flutter,准备支持Android和iOS,后续外包公司使用了Java,仅对Android进行支持,这也满足了现在的需求

微信小程序

  • 我采用了凹凸实验室的Taro框架

api部分

  • 我使用的是Python的Django框架,没有使用Java的SpringBoot或者Golang的gin,是因为虽然我对两者都更加熟悉,但是我需要考虑云端数据呈现的问题,又会增加了一个组成部分的工作量

数据库+文件

  • 我使用的是Mysql,我也没有使用其他中间件,对于定制软件的使用者,简洁够用即可
  • 文件我通过api直接存储于实例上

代码的维护

我在码云上开辟了多个私有库,用于存放几个工程的代码

可持续地部署

在开启堆码之前,先进行了流程疏通

  • app从打包,到传至云端,通过链接下载
  • api代码拉去实例,systemd service启动与守护
  • nginx对api、file等service_name的转发验证

于是当我还没有投入多少精力时,已经可以整个流程跑通,剩下的就是对业务逻辑的翻译,堆码

阶段性的验证与交付

即使是发小,他也是甲方,对于系统的期待总会超出实际的进度,尤其是在进度偶然达到或超出预期时。

所以要非常慎重地进行预期管理,否则就会进入一个恶性推导:

进度赶不上-> 信任感下降-> 进度预期就是赶不上-> 果不其然没赶上-> 信任感荡然无存

正向推导:

主动 沟通预期-> 评价预期的合理程度-> 约定交付预期-> 如约完成阶段性-> 靠谱

核心:

  • 编码的硬实力
    • 天赋
    • 勤学苦练
  • 推动外包公司(或者其他合作伙伴)的软实力
    • 平等对待
    • 多提问引导,少指导
    • 注意节奏

这样做的好处

  • 可以有效地规避不必要的服务不可用:
    • 因为开发过程都是建立在稳定服务流程的基础上,所以服务抖动可以有效减少
  • 可以减少很多沟通成本
    • 和需求方及外包公司的沟通都是有节奏的进行,减少了不在节点上的无效沟通
  • 任务如期完成
    • 这是最重要的