目标
对于能力之前的理解都是,是否可以做TDD、需求分析、业务能力、架构设计等等具体的能力项。但是这些能力能够解决问题是零散的,没有聚焦在一个完整的职业需要的技能上。 现在我转换了一下思路: 假设我现在离职了,需要换一家工作,那么我想些什么工作呢? 结合我现在的基础,我想做软件工程后中间一段的事情,包括:需求分析(偏向软件侧)、架构设计、软件设计、这样的事情。具体到实际可能的职位:
- 开发团队的教练
- 产品架构师
- 技术Leader
基于要达到这个目标,我需要具备的能力就可以场景化为:
一个公司在做一个产品时,遇到各种设计和开发中的问题,需要一位教练来改善软件研发过程。
今年的目标就是作为教练能够指导一个团队完成产品分析和落地。
虚拟推演
在这部分,假设我做为敏捷技术教练进入一个团队,辅助这个团队完成软件产品的改造和能力提升。按照时间顺序推演整个过程包括如下环节:
- 组织业务专家和技术专家完成问题复盘,总结出各个环节的问题。后面在不同环节进行分别寻找办法
- 在这个过程中,需要组织会议进行复盘(如何进行引导,问题又如何确定是真正的问题,如何确定到最本质的问题以及不可变约束)
- 需要区分哪些软件开发环节,这些环节又是基于什么划分的?
- 需求分析:描述需求、确定问题域范围、需求实例化、需求分析规范和格式
- 需求描述,需求实例化,明确解决的问题,以及需要解决的场景和外部系统
- 输出需求分析的DoD
- 收集非功能需求:扩展性、性能、可靠性、成本等
- 这些也要考虑并合并到上面需求实例化中
- 通过前面问题域内容:进行架构设计、通用域选型(服务框架、中间件、语言、软件框架),规格标准确定
- 考虑当前确定因素(软、硬)
- 进行系统架构设计
- 进行组件软件架构设计
- 进行外部设施的选型
- 进行语言的选型
- 进行敏捷中需求队列,任务排序的实施,迭代的制定
- 交付管道的敏捷流程管理方式
- 进行软件架构的搭建(DDD战术设计),并且进行开发指导(TDD)
- clean architechure
- tdd + DIP + 端到端
- DevOps搭建
- AC + 自动化流水线
以上具体推演总结各个环节的实践经验,并且将每个环节进行详细描述,并通过实践经验进行串接。