Think Coding软件乌托邦程序员

精益价值、原则和软件实践(下)

2017-10-09  本文已影响364人  ThoughtWorks

所谓的精益思想的价值和原则非常多,这里引用ThoughtWorks同事Jonny Schneider即将出版的《Understanding Design Thinking, Lean,and Agile》, 通过日常软件开发实践来补充这些看起来很虚的价值和原则,以此推广“精益”成为更好的软件开发指导思想。这是下篇,上篇在这里

我们来简单回顾一下上篇:

价值一:学习和适应 优于 分析和预测

价值二:赋权的人更快乐并容易取得更好的成果

价值三:成果优于输出

本篇将继续讲述价值四和价值五。

价值四:管理流动优化价值

减少批次大小

如果要我说软件开发管理中最重要的工作是什么,我觉得应该是减少批次大小。

软件管理中存在很多问题,比如需求不明确、需求易变、开发估算不准确、难测试、上线后发现没有真实价值等。

这些问题其实都可以靠减少批次大小来解决,我一般建议把User Story分解到1~2人天(当然还是要用故事点的方式,不能直接用人天来估算),这样的好处是:

微服务架构更加强化了减少批次大小的诉求和价值,达到更小的需求、更快的响应、更稳定的交付流速。

管理队列

批次大的时候,一个人好像只在处理一个事情。但实际上人脑容量有限,还是会把一件大的事情分解成多个小事情做,只是无意识的做而已。Scrum的管理方式比较粗暴,看上去只有Sprint backlog一个队列,因为在迭代会议的时候把事情都分配给开发人员了。所以对于Scrum这样的管理框架来说看不到什么队列,这样有什么问题吗?

因为人脑的局限,事情总是会溢出在外面,实际上就造成有个隐形的队列存在,只是没人刻意去管,这就造成有些人盲目的忙,有些人井井有条的干活,纯粹看个人意识。

隐形任务队列的坏处:

所以首先应该把任务队列显性化,要用团队的能力和意识来管理队列,而不是让个人去随便搞。

然后才是队列管理技巧,比如优先级调整,任务依赖关系管理,阻塞点识别和清除。

在精益里面有个很重要的原则,叫限制在制品数量,意思是要严格限制正在进行的任务队列大小,这样就能很容易的识别阻塞点,及时处理,并且更容易控制交付流速。

交付速度

在讲TDD特有价值的时候我提出其中了两个:

  1. 质量
  2. 可维护性

但怎么衡量这两个指标呢,尤其是可维护性。我觉得可以归到“交付速度”一个指标上。我们不把修bug当做价值而是当作浪费,这样质量差的软件开发,必然导致交付资源会被修bug挤占,从而影响交付速度。

软件的可维护性也会体现在交付速度上,做的好的软件交付速度会越来越快。因为该做的基础工作都逐渐完善,开发人员的领域知识和开发技能也逐渐提高。

然而很不幸的,能逐渐提升交付速度的团队很少,理由往往是需求越来越复杂啊,以前都没提有这样的需求现在要大改啊什么的。而且没人正在度量交付速度,所以只是开发人员和客户都抱怨罢了。

减少浪费

以前西方流行的精益观念认为“减少浪费”是精益思想的精髓,然后有非常全面的识别和消除浪费的方法。

我觉得减少浪费是精益思想的很小一部分,就像我们想增加收入要做开源节流。不能认为节流能增加收入就当做主要手段用,导致影响开源。但很不幸的是节流比开源要容易很多,所以很多企业在危机时刻很容易选择节流而导致开源不利。

比如只从业务功能角度讲,搭CI/CD所花的时间是浪费掉的,因为没有直接产出业务价值。

减少浪费的观念确实非常有用,能有效指导消除不必要的工作。

响应客户需求 优于 创造库存

我发现开发团队很喜欢创造库存,有一些原因:

敏捷宣言用了很大的比重来强调拥抱变化响应客户需求,很好地改变了软件开发团队和客户之间的信任关系。但是并没有什么方法很好的去响应客户需求,要不然Scrum这种固定时间盒的方法也不会大行其道了。

精益的拉动式流管理是完全面向客户的,利用客户需求驱动团队工作。而且只有需求交付到客户手上才算是完成了,使得软件尽早产生业务价值,这也是MVP思想的来源。

价值五:质量是结果而不是活动

内建质量

内建质量就不多说了,是我们倡导的实践口号,只是需要配合质量度量和持续改进,不然就只是口号了。

持续学习和改进

除了交付客户所需的价值,对我们来说更重要的是团队个人能力的提升。因为软件交付给客户价值后,对我们的价值(钱)也就结束了,唯有团队个人在交付的过程中不断提升,才能提升公司的整体价值和竞争力。

在敏捷管理里面设置回顾会议以支持持续改进,而且更关注问题和解决问题。为什么要等一个月或两个星期才做一次回顾会议呢? 固定时间、固定任务、做固定的事情好处是能有一种仪式感,容易协调不同人的时间和工作内容。但因为反馈周期太长,算不上持续,只能说是断断续续的学习和改进。

其实最好的学习和改进机会是做到on demand,发现问题及时处理问题,如果处理不了及时提出来引起团队的注意。另外每日站会和每日code review都是固定的时间点,可以用来做学习和改进。

学习和改进的内容不仅仅是软件代码、架构设计、需求质量,还有协作方式、甚至座位安排、客户对接方式、价值排序原则等。

追求完美

可能对于一个商业组织来说,追求完美是最正确又是最错误的事情。因为很容易陷入闭门造车,导致投入产出比失衡,造成亏损。

但精益思想并不是一个点,而是一组。我总结的精益思想的哲学是以客户为中心,持续自我改善,追求长期利益(完美)。

每个人或组织心中应该有个对“完美”的定义,以此为愿景进行长期可持续追求,但由于是企业,所以要以客户为中心。当然基础还是富有激情的个人在每时每刻进行持续学习和改进,以达到个人的完美。

文/ThoughtWorks 吴雪峰

上一篇下一篇

猜你喜欢

热点阅读