从敏捷开发到微服务,maybe再到中台
--
先说下准备这个的背景:
本来是想让我分享下敏捷开发,可能是听我说为as**搭建并完善了敏捷开发体系的原因吧。
我一般分享一个东西,希望大家能真的理解,而不只是知道。
我不大相信有万能的东西,不希望大家因为我说了,所以盲目的去套用,最后出了问题。
所以,这里讲下我对于开发模式这个东西的理解,主要说下敏捷开发的一些经验和小的tips。
可能大家也会对近两年很火的微服务感兴趣,所以顺带提一下。
$ 开发模式的意义
那么,讲这些有什么意义呢?
从大的出发点来说,比如灵硅的科技赋能至臻至善、滴滴的美好出行、抖音的记录美好生活、百度的让信息获取平等便捷,一个公司要为社会创造价值,才能受到大家的认可和支持,才能赚钱召集大家一起来创造更多的价值,形成良性循环。
从小的出发点来说,同样的工作强度,你自己能到大街上卖出公司给你的这么多薪水吗?我想很多人都是不能的。
人与动物的区别是,人会利用工具。
很多时候集体对个人的优势在于1+1》2,好的管理、协同方法能够让集体事半功倍,比如古代的战阵、现代的编队和美军的军用数据链。更直观一点,大雁的队形兼容不同年龄、体力,同时利用尾流集体省力;
开发模式就是软件工程中一种协同方法。
如果评判一种开发模式好还是不好的?我们要辩证的看待,考虑到现实需求情况和团队情况,包括团队的技能组成、需求的复杂耦合情况、目标的权衡情况等。
$ 首先,什么是敏捷开发
一般而言,有如下几种传统开发模式:
- 瀑布开发;(C的经典开发模式)
- 需求 -> 分析 -> 设计 -> 编码 -> 测试
- 特点:固定次序、不重叠
- 迭代开发;
- 迭代增量式开发、迭代固定式开发,俗称小步迭代
- 需求完全确定之前就启动开发,开发中不断精修细节
- 螺旋式开发;
- 计划 -> 风险评估 -> 实施 -> 客户评估 -> 计划 。。。
- 比迭代的循环粒度要大
- 瀑布开发;(C的经典开发模式)
$ 看敏捷开发(Agile program development)
以上三种开发模式,瀑布开发是顺理成章的,其他可以理解为瀑布开发形式的变种,主要变化在需求的粒度、确定性变化上。
敏捷开发会复杂点,我们先从几个名词来看(参考Link):
- agile - 敏捷的意思。在软件行业的核心:频繁迭代、修正,鼓励团队所有人的责任感、自主性(主人翁意识),快速、高质量的交互符合客户需求的产品。可以说是一个比较抽象的指导思想,我总结两个核心点:充分发挥团队中个人的作用,紧跟用户需求变化。
- scrum - 原意是橄榄球里的“列阵争球”,需要很高的技巧,也需要足够的身体对抗性、协调性、平衡感,可以灵活配以各种进攻策略。这里用在软件行业,算是敏捷里最常用的一种轻量级的process framwork,实践形式?
Scrum的几个主要特点:
- 生产效率高,耗时短,结果确定性较好;
- 能支持频繁变更的需求,甚至是拥抱变化;
- 计划和状态可控;
对于敏捷核心点的理解:
- 要快。两种选择,单核更快或者多核并发;一般只能选择并发,并发存在并发调度的问题,必然要拆解需求,小步迭代,小步融合。
- 要变。首先得兼容变化,设计的时候就要留有裕量;其次得及时交付上一个版本,才能及时安排下一个变化;再次,每个变化的需求基本都要是可用版本,才能不会为了变而变,丢掉了本质;
从这个角度来说,scrum在步子大小、拆分逻辑、融合方式、变化节奏、迭代过程上都给了一个确定的指导意见,基本适用于大部分的项目情况。
$ 从几方面具体看敏捷的实施的tips
这里从agile网站上抄过来的,和大家一起看下
- scrum的要求
- scrum的一些基本概念
- scrum有哪些角色
- 如何能做好呢?用来衡量敏捷的一些指标
- 异地分割的团队如何实施scrum
- 敏捷开发中DevOps的重要性
从腾讯云的漫画抄过来的Link
- scrum的要义不是工具,是不听的scrum
号称最全的agile tips:Link
来个总结,好落地的tips
很难有十全十美的事情,需要注意的,agile的问题 —— 合适的团队规模、需求复杂度、人员素质:
- 如何准确的评估问题
- 如何准确的评估自己的能力
- 如何准确的预估兼容性需求
- 合理的分工
- 合理的合作
- 如何合理的拆解
- 合理的引入敏捷工具,如git、gtd、wiki、Jenkins、燃尽图、甘特图等
$ 那么轮到微服务;
敏捷风靡业界,不管技术的老板也都知道敏捷了,所以有了更大维度的敏捷,产品维度的敏捷,其story就是微服务。当然老板来决定这件事是开玩笑的了。
那么我们来看下“微服务敏捷开发模式”,参考华为的案例,我最近也总结了一些经验
IBM的微服务简介Link
## 我欣赏以人为本、灵活变通的处事逻辑,但是千万记得灵活变通,万变不离其宗 —— 基于现实的效率提升!