认清 Tech Lead 的位置
对于软件工程师做技术经理是一件好的事情,可以从另外一个更高的角度观察自己现在正在做的事情。
成长为技术经理并不是一件很值得得意的事情,我接触到的技术经理压力都非常大,所以很多人还是愿意做一个纯粹的开发。软件开发行业很其他行业有一个不同的地方就是,会出现 Tech Lead 的角色没人愿意做的现象。
那么 Tech Lead 所处的位置是什么呢?
**实现领导的开发目标。**软件工程师的职责就是为老板构建可用的软件,至于老板拿这个软件在市场上赚钱和赔钱是市场和老板需要关心的事情。Tech Lead 能够把控产品经理的需求,并对老板给出估算,这事儿靠谱还是不靠谱,需要多久的时间。对老板来说,他不关心具体的技术实现和细节,Tech Lead 能帮他拿捏好,这需求能做还是不能做,能做的话最终能保证出活儿。对老板来说,靠谱是最重要的。
**安排好项目的进展情况。**如果没有项目经理专门带队做软件研发,Tech Lead 也需要关心项目管理的事情。项目管理并不是发布任务,设定目标,保证目标的达成这么简单。要需要考虑技术选型、技术决策和移除项目的困难点和阻塞点。
关心好团队的成员。 开发人员往往除了工作挣钱之外还有一些自我成长的诉求,所以还需要关心人员的成长,以及帮他们搭舞台唱戏。Tech Lead 不仅仅是给他们分配任务的人,还一定能引导他们的兴趣,尽可能帮他们找到资源,分配给他们感兴趣的任务。毕竟成就他人就是成就自己。
所以在 Thoughtworks 把 Tech Lead 这个角色赋予了四种能力:
- Expert:是这个项目和产品的核心专家,必须保证有足够的业务知识和技术知识,能把握项目上的一些关键问题
- Manager:能拆分任务,讲活儿分给其他同事做,并且管理项目的进展
- Coach: 具有发展他人、团队的能力,能给其他团队成员提供指导和帮助
- Leader:知道如何用正确的方式达成目标,激励人,知道团队的业务和技术目标
从这四个方面来看,操心的事情不少,后面部分整理了一下作为 Tech Lead 经常要操行的事情。
应该操心什么事情?
技术选型和决策
- 能根据业务需求做出合理的技术选型
- 技术选型能满足未来一段时间的业务和架构演进目标
- 技术选型需要考虑成本
- 技术选型需要考虑团队人员素质和背景
软件架构和搭架子
- 服务设计和领域划分
- 数据库设计
- 分层架构和包结构的设计
- 错误码规范和定义
- API 规划
- 一些常见操作的例子供开发人员参考
- 日志和监控设计
需求评审
- 需求是否合理,业务逻辑上是否自洽
- 交互设计的性价比
- 设计的一致性,和项目现有的逻辑是否一致
- 是否会影响安全
- 是否会造成性能的大幅度降低
基础设施和运维把控
- devops 基础设施,例如流水线、制品库、跳板机等
- 建立运维手册,例如定期拨测和数据备份
- 定期防灾演练
- 定期检查系统健康状态,密匙、证书、域名有效期
- 制定上线流程和规范
- oncall 和线上轮值计划
非功能性需求
- 关注需求的性能指标
- 关注兼容性需求
- 关注容量和弹性伸缩的需求
代码质量
- 配置静态代码扫描,例如 checkstyle、find bugs
- 设计团队代码规范
- 进行代码评审
安全
- 安全规范,例如密匙的要求
- 安全建模
- 定期的安全扫描工具异常处理
- 预防技术方案中的潜在安全问题,比如数据和隐私泄露
团队
- 制定团队协作策略,例如分支策略
- 制定版本策略
- 制定团队契约,例如 codereview 时间和主持人、技术例会
- 对团队新人进行 onboarding 和维护团队 onboarding 文档
- 人员梯队建设、管理人员流动的任务交接
- 团队矛盾和冲突处理
知识共享
- 制定团队技术分享机制
- 制定文档存放契约
- 更新系统架构图、部署图和数据库模型等项目架构材料
项目管理
- 工时估算和迭代计划
- 技术债的评估和分析
- 项目风险评估
- 跟踪第三方依赖的时间点
- 收集项目反馈