技术选型
- 狭义:解决技术问题
 - 广义:技术决策
 
误区
不尊重业务需求
随波逐流
面向简历编程
过度考虑
把别人的主观当事实
步骤

明确问题与目标
- 遇到了什么问题
 - 目标是什么
 - 评判技术选型标准
 
调研
- 真的需要额外的技术吗
 
如无必要,勿增实体
候选技术
- 从团队内部交流找到
 - 从搜索引擎
 - 日常积累
 
拓展技术视野路径:
- 开源中国
 - thoughtworks技术雷达
 
对比
- 风险
 - 成本
 
技术因素
如何选择开源技术: 聚焦于是否满足业务,而不需要过于关注开源项目是否优秀
- 官方活跃度
- 发布周期
 - 提交历史
 - README说明
 - issue回复解决率
 
 - 社区活跃度
- 搜索引擎热度、数量
 - 辅助参考 star数
 - 第三方社区
 
 - 可维护性 可运维能力
 - 学习曲线 难不难
 - 性能
 - 安全性
- 安全补丁及严重程度
 
 - 熟悉程度
 
在线上使用开源组件,需要注意:
- 先深入研究,仔细测试
 - 逐步灰度上线 持续观察
 - 做好应急
- 数据备份
 - 后备方案
 
 
非技术因素
- 被大规模采纳并获得成功
 - 能不能快速招到人
 - 平衡各方利益
 - 法律问题
- license
 
 - 炒作
 
方法
- 因素加减法
 - SWOT分析
 
验证
- 小型原型验证
 
决策
- 相关人员 评审会议
 
落地
- 初期小规模试水 降低风险
 
总结复盘
技术选型与项目
短生命周期 糙快猛
长生命周期 成熟稳定的技术
边缘项目 可用来做实验尝试
核心项目 成熟、经验足够、拥有较好技术支撑
新项目 灵活
老项目 能与现有体系融合
探索项目 既要快 也要可维护 保障简单性
守成型项目 稳定第一
技术选型与团队
强 未来趋势 激进
薄弱 在现有体系下 加强规约
- 走出薄弱
 
小团队 简单性
大规模 细分问题域 自治技术选型
技术选型与组织架构
- 康威定律
 
技术栈版本
- 使用
 - 功能
 - 升级
 
- 新旧版本不兼容 使用新版
 - 观望最新发布的次版本
 - 使用BOM(bill of material)统一管理版本
 - 尽量使用正式版
 - 尽量LTS版本
 - 关注软件间的兼容关系
 
失败补救
- 统一抽象逐步使用新实现替换老实现
 
对开源项目二次开发
- 尽量不要去动它本身的代码 把它包装起来提供外部接口 我们通过外部接口使用它
- 现在我们的基础框架就是这样 因为自身的业务需要对核心框架直接改动 导致升级框架版本很痛苦 升级也很容易出错
 - 另外一个使用的Maxkey这个项目 初期改了很多 后面也升不动
 
 
当然,如果一个开源项目需要改动很多 那么证明其实这个项目并不适合你的业务 应该考虑自己造轮子了