OK,敏捷哈。不争论什么是敏捷。我们来看一些现象,然后你来告诉我,你有没有遇到过这些问题。
没人提真正的Feedback
每个迭代结束之后,我都会做Showcase。但是从Showcase上收集到最多的,就是UI的问题,字体太小之类的。每个Release发布之后,项目都会部署一个试用版本。但就是不见真正的用户来“试用”,就更别提Feedback了。敏捷不是强调Feedback吗?客户(Customer)时间不够,同时他们也不是最终用户,提不出足够有深度的Feedback。而最终用户呢,压根就没兴趣。
架构咋弄啊
每个迭代都要被催着出东西,哪里有时间弄架构哦。一开始就一个劲的加功能。前几个迭代大家都很Happy,功能出来的特别快。后来就越来越慢了,团队情绪也很差。
客户说没有不是Must Have的
事情实在太多了,做不完呀。那让客户来排优先级吧,把哪些是Must Have的找出来。但是客户说了,这些都很重要,没有这个Feature,或者那个Feature系统就压根没有用处。
路漫漫其修远兮,我到底在往哪走
团队的成员越来越多地在抱怨,天天做Story。但是这些Story都是干什么用的呢?这做一点,那做一点,根本就整合不到一个Vision里去。客户说,我给了你Vision啊,你看这个Feature那个Feature,这些要做的东西就是我们的Vision啊(心里还在犯嘀咕呢,你们干活的吵什么吵)。
这些问题都有一个相同的最终根源。我们先来看最明显的Feedback问题。为什么客户和最终用户都不提Feedback?因为不关他们的事!做Showcase不过就是在眼前晃两下,有深度的Feedback不是那么容易及时地想到的。而Release又有多少是真正部署到产品环境的?最终用户一方面还用这旧的系统,天天忙着四脚朝天的,哪里有时间来试用我们的新系统呢?无论你是设置了一个测试机在他的桌子旁边,还是一天三次的发Email提醒。只要你的系统不是完成他工作必须的一部分,他就不会理你。
为什么Release出来的系统不能部署到Production环境呢?这不是很奇怪吗。是的,确实很奇怪。但是,假如你是客户,你被你的组织委任了一个替换现有系统的差事。现有的系统有100个功能,完全开发完这些功能可能需要两年。但是,每三个月都有一次绩效考核。你会不会希望每三个月,就让领导看到你都弄出了点了啥?于是你找到了一个号称可以做敏捷开发的外包公司,要求他们每三个月给你出一个版本。但是这个版本能真正上Production么?不能!现有系统有100个功能,那么多用户在用呢。你三个月弄出来的系统怎么替换这么大一个系统啊?一个“成熟的企业”,对于一个这样系统的GO OR NOT GO MEETING都要开三个月呢。
也许你要说,我们是真正的Green Field开发,彻底重头写的。那么有你开发的系统之前,这家企业是怎么运作的?至少有一个Paper Process吧。没有电子系统,人们就用纸笔,各种单据来工作呗。IT系统不过是Paper Process的自动化而已。再说了,这年头还真没几个请得起我们,而且现在还没有一个IT系统的,需要从Paper Process开始的?
除非你做的是非常有创新性的企业开发。通过创新性的IT系统,开发新的业务。比如通过新的交易应用来辅助新的Margin Loan产品的市场投放。大部分时间来说,我们都是被引入进来“替换”现有的Paper Process,或者现有的遗留应用的。
假设我们要替换的就是一个有100个功能的遗留应用,我们是怎么来“玩”敏捷的呢?基本上来说,我们假设了一个温室的环境。在这个环境里,你可以假设你做的是Green Field的开发。把100个功能,分成多个Release,每个Release又分成多个Iteration。在每个Release之后都会发布一个Pilot版本给测试用户试用。这样就可以迭代式地添加Feature,直到最后能够替换原有的系统。从我的经验看来,正是这种做法,部分导致了以上问题(甚至有些情况下是根源)。前面已经提到了,这样会导致缺少来自最终用户的,真正的Feedback。其次,由于少了一个Feature都无法替换旧的系统,客户很难做出优先级的正确选择。以替换旧的系统为目的,所有的Feature都是Must Have。同时这样会导致每个Release缺乏明确的,唯一的Goal。经常是这个Feature做一些,那个Feature做一些,Team会觉得没有明确的目标。
如果我们不以替换旧的系统为目标?那么应该以什么为目标?这个时候你可以去看看Eric Evan的Strategic Design。他说,你应该想想What drives you to spend million dollars on this project in the first place(你为什么在最开始要在这个项目上决定花上一百万美元)。这个背后一定是原因的。基于对这个原因的理解,我们可以选定一定的Feature来实现。然后就开始实现,然后把实现部署了让所有的用户去用。用这种策略,而不是前面那种策略,这样就逼着我们去做很多事情。而我相信这些事情,很有可能就有助于解决前面四个问题。特别是,其中的架构问题。为什么呢?架构是什么?架构就是对问题的一种分解方式。怎么样才能迫使我们去思考架构问题呢?在现有的系统上打个洞,然后挖掉一块,围一道墙,里面再把新的Feature做出来。没有对系统整体的了解,没有对模块的分解,没有对模块之间耦合依赖关系的分析,是不可能做到这些的。这样就迫使我们做出一个低耦合高内聚的架构!
把这种策略做到极致就是之前我说过的持续部署才是王道。不但每个Release都和旧的系统集成起来,然后真正的部署。甚至,我们可以做到每个迭代都部署。在Fred George描述的团队里,甚至都没有迭代。一个Feature开发出来就立马被部署了。
分享到:
相关推荐
3. 客户协作优于合同谈判:在敏捷项目中,与客户的紧密合作是至关重要的,以确保产品符合实际需求。 4. 适应变化优于遵循计划:敏捷开发鼓励在开发过程中接受变化,以保持项目的竞争力。 敏捷宣言还包含十二个原则...
当员工意识到他们有权利和责任提出问题,他们会对工作投入更多热情,主动寻求改进。例如,对于工具不完善的抱怨,员工可能会积极参与到工具优化的过程中,从而提高整个团队的工作效率。 为实现开放透明的环境,企业...
敏捷开发并不是一个严格意义上的完整开发模型,而更多地体现为一种思维方式或哲学。它并不像传统的瀑布模型那样,有着固定且详细的阶段划分及流程规范。相反,敏捷开发更加注重灵活性和适应性,强调快速响应变化而非...
在瀑布或者敏捷项目中您觉得测试计划有什么问题?这些问题相似或者不同吗? InfoQ:在瀑布或者敏捷项目中您觉得测试计划有什么问题?这些问题相似或者不同吗? EddyBruin:我记得我对我编写的第一个主测试计划非常...
- **响应变化**:敏捷的核心是适应变化,测试策略也应如此。 - **自我组织**:鼓励团队成员自我管理和自我激励。 - **关注人**:以人为本,重视团队成员的发展和个人成长。 - **享受乐趣**:积极乐观的态度有助于...
- **解决问题**:识别并讨论任何阻碍项目进展的问题。 - **增强协作**:鼓励团队成员之间的相互支持和协作精神。 通过上述内容的介绍,我们可以看出敏捷开发不仅是一种软件开发的方法论,也是一种思维方式。它强调...
5. **过程监控与改进**:文档中提到的施工管理问题,比如缺乏全面动态监管,提示我们在IT项目管理中,应实施严格的项目跟踪和控制,使用敏捷方法或DevOps工具来实时监控项目进度,及时发现问题并进行调整。...
例如,Jira是一个流行的选择,它用于敏捷项目管理,支持Scrum和Kanban方法;Trello则提供了一个看板视图,便于团队成员可视化任务状态;而Confluence则用于知识管理和团队协作。这些工具可以帮助项目经理跟踪任务,...
本书的核心问题是:“为什么好的软件如此难以创造?”这一问题贯穿全书,试图揭示软件开发过程中存在的根本性难题。尽管计算机科学已经发展了半个世纪之久,但至今仍未找到一个完美的答案来解决这一问题。本书通过一...
#### 为什么软件工程项目管理如此重要? - **确保项目进度与质量**:通过持续监控项目的进度与质量,确保项目能够按照既定的时间表完成,并达到预期的质量标准。 - **提高开发效率**:通过有效的管理和协作机制,...
这些方法论为项目团队提供了不同的工作方式与流程指导,有助于提高项目执行效率与质量。 #### 3. 风险管理 风险管理是IT项目管理中的一个重要环节,涉及识别潜在风险、评估风险可能性及影响、制定应对策略等步骤。...
在整个面试过程中,表现出对行业的热情、持续学习的态度以及处理复杂问题的能力,将有助于你在众多竞争者中脱颖而出。 对于有意申请石油工程留学的学生来说,除了学术成绩外,积累实践经验、提升沟通技巧和团队合作...
复杂度是导致项目失败的主要原因之一,因此,保持设计简洁有助于减少错误和维护成本。 6、迭代设计 敏捷开发倡导迭代和增量式开发,每次迭代都应有可工作的软件交付。架构设计也应如此,逐步构建,每次迭代完善一...
软件项目尤其如此,它们通常涉及开发独一无二的软件解决方案,满足特定用户的需求。项目有明确的目标、整体性、一次性、资源消耗性和不确定性等特征。与此相反,日常运作是重复性的、目标导向的,并且通过职能式线性...
##### 2.1 什么是 Yocto 项目? Yocto 项目是Linux基金会旗下的一个项目,旨在提供一套完整的工具和框架,帮助开发者构建定制化的嵌入式 Linux 系统。它不仅仅是一个构建工具,还是一套涵盖了从开发到部署整个生命...
总之,方法学是软件开发不可或缺的一部分,尤其在敏捷开发环境中更是如此。通过理解和应用方法学中的核心要素,可以有效提高项目的成功率。同时,注重沟通与反馈机制的建设,能够进一步增强团队的协作能力,确保项目...
即当项目中出现一个新问题时,解决这个问题的过程中又会暴露出新的问题,如此循环往复。作者建议通过更好的需求管理和变更控制流程来避免这种现象的发生。 - **实际应用:** 实施敏捷开发方法论可以帮助团队更好地...