持续化思考之:项目迭代式开发,是选择垂直开发好还是水平开发?
2012-10-17 16:39
519 查看
【本Blog均为xu1ji原创,仅作为学习总结之用。如转载,请保留此声明并注明本页URL】
垂直开发 Vs. 水平开发?(欢迎评论)
问题背景描述:
我们现在在做一个相对大型的互联网应用,搜索引擎相关。
采用敏捷+迭代的开发方式,开发流程也还算比较规范(svn+jra+持续部署)。
产品在做的时候,也是一边思考新的功能,一边开发,一边测试和提新需求,所以整个开发基本都是在不断的提新需求,不断改bug,不断修正的过程中。根据大的功能模块,将产品发布分为一期,二期,三期,然后逐步完成,直到把它做成一个很成熟,安全性,健壮性,用户体验都很好的产品。
然后我这也让我思考:项目推进过程中,比较核心的一个问题:项目应该水平推进还是垂直推进?
水平推进:在产品定义完备的情况下,先把后台服务全部搭建完成,测试通过,优化工作全部完成。再做前台的全部功能,最后做优化和用户体验,做每个功能模块都考虑清楚和别的模块的接口,因为做每一个部分都是从全局出发的。
垂直推进:先做一个简化的系统版本,打通数据流,很多功能暂时不考虑。然后把前台界面,用户体验做到极致。然后加入若干功能,做优化和用户体验,再依次加入新的功能。(我们现在的方式就属于这种..)
持续思考日志:
写于2012-10-17:
作为一个刚刚毕业的我来说,我觉得这个问题很难理解。
尽管我知道,垂直推进跟符合“软件工程”的思想,能够尽快看到产品,有效规避风险,采用滚雪球的方式开发能够使产品稳定迭代的向前推进。但是水平搜索更符合我觉得理想的开发过程:
定义所有功能模块-->定义接口与通信方式->选择算法-->开发测试。
这样所有的代码都是基于全局思考的,都是有效而且完备的。不用担心现在做的将来会被反复改写、对其他模块考虑不充分甚至因为需求直接删掉。
总结一下,垂直迭代的优缺点有:
1. 优 尽早看到产品。这个对于外包类项目,尤其是那些乙方完全不懂技术的来讲,尤其重要。
2. 优 尽早做界面,可以有更充分的交互测试,也可以尽早为后台程序提供更好的修改参考。
3. 缺 垂直迭代往往伴随着产品定义不充分或者不明确,这就会导致每个模块处理的都是局部问题,没有做全局考虑(尤其是一些全局功能:比如权限控制等),只见树木不见森林的开发是很要命的,将会导致大量模块间接口的bug,系统规模慢慢增长的时候,系统架构会接受更大的挑战。
4. 缺 如果一开始,开发人员没有一个全局的认识,包括功能上的,模块接口上的,模块通信上的等,就很难在开放工程中,做到“心中有数”,做到明确知道系统的来龙去脉,更不要说把握系统的思想了。
水平迭代的优缺点:
1. 优 系统架构清晰,前期会把所有模块接口,功能定义清晰。
2. 优 步步为营,如果后台尘埃落定,前台就不用考虑后台的事情,每一阶段只考虑一个层面的问题,一切尽在把控中。
3 缺 产品,界面出现较晚,做到后期,出现问题修改代价比较大。
深入一步看,关键在于
产品前期定义是核心,这也是垂直开发的弊端,如能前期充分定义和思考,垂直会更具有优势。
写于2012-12-15:
就写一句:
没有前期的充分设计,没有对产品充分的理解和信心,我甚至不知道今天做的有什么用,会不会马上就被删掉,六个字:
心里完全没底。
垂直开发 Vs. 水平开发?(欢迎评论)
问题背景描述:
我们现在在做一个相对大型的互联网应用,搜索引擎相关。
采用敏捷+迭代的开发方式,开发流程也还算比较规范(svn+jra+持续部署)。
产品在做的时候,也是一边思考新的功能,一边开发,一边测试和提新需求,所以整个开发基本都是在不断的提新需求,不断改bug,不断修正的过程中。根据大的功能模块,将产品发布分为一期,二期,三期,然后逐步完成,直到把它做成一个很成熟,安全性,健壮性,用户体验都很好的产品。
然后我这也让我思考:项目推进过程中,比较核心的一个问题:项目应该水平推进还是垂直推进?
水平推进:在产品定义完备的情况下,先把后台服务全部搭建完成,测试通过,优化工作全部完成。再做前台的全部功能,最后做优化和用户体验,做每个功能模块都考虑清楚和别的模块的接口,因为做每一个部分都是从全局出发的。
垂直推进:先做一个简化的系统版本,打通数据流,很多功能暂时不考虑。然后把前台界面,用户体验做到极致。然后加入若干功能,做优化和用户体验,再依次加入新的功能。(我们现在的方式就属于这种..)
持续思考日志:
写于2012-10-17:
作为一个刚刚毕业的我来说,我觉得这个问题很难理解。
尽管我知道,垂直推进跟符合“软件工程”的思想,能够尽快看到产品,有效规避风险,采用滚雪球的方式开发能够使产品稳定迭代的向前推进。但是水平搜索更符合我觉得理想的开发过程:
定义所有功能模块-->定义接口与通信方式->选择算法-->开发测试。
这样所有的代码都是基于全局思考的,都是有效而且完备的。不用担心现在做的将来会被反复改写、对其他模块考虑不充分甚至因为需求直接删掉。
总结一下,垂直迭代的优缺点有:
1. 优 尽早看到产品。这个对于外包类项目,尤其是那些乙方完全不懂技术的来讲,尤其重要。
2. 优 尽早做界面,可以有更充分的交互测试,也可以尽早为后台程序提供更好的修改参考。
3. 缺 垂直迭代往往伴随着产品定义不充分或者不明确,这就会导致每个模块处理的都是局部问题,没有做全局考虑(尤其是一些全局功能:比如权限控制等),只见树木不见森林的开发是很要命的,将会导致大量模块间接口的bug,系统规模慢慢增长的时候,系统架构会接受更大的挑战。
4. 缺 如果一开始,开发人员没有一个全局的认识,包括功能上的,模块接口上的,模块通信上的等,就很难在开放工程中,做到“心中有数”,做到明确知道系统的来龙去脉,更不要说把握系统的思想了。
水平迭代的优缺点:
1. 优 系统架构清晰,前期会把所有模块接口,功能定义清晰。
2. 优 步步为营,如果后台尘埃落定,前台就不用考虑后台的事情,每一阶段只考虑一个层面的问题,一切尽在把控中。
3 缺 产品,界面出现较晚,做到后期,出现问题修改代价比较大。
深入一步看,关键在于
产品前期定义是核心,这也是垂直开发的弊端,如能前期充分定义和思考,垂直会更具有优势。
写于2012-12-15:
就写一句:
没有前期的充分设计,没有对产品充分的理解和信心,我甚至不知道今天做的有什么用,会不会马上就被删掉,六个字:
心里完全没底。
相关文章推荐
- 程序员开发项目是选择效率还是质量呢?
- 项目开发时的编码选择,utf-8还是gb2312
- 项目开发中对设计模式的思考
- 开发学习选择稳定成熟的技术还是未成熟的新技术?
- iOS开发那些事-关于性能优化–选择nib还是故事板的讨论
- 思考下:工作沟通工具的选择(QQ?、微信?、邮件?、m2m还是其他的?)
- 最近做项目中用到的文字或图片水平和垂直方向平滑滚动(含Ajax效果)
- 网游开发中选择线程模型的思考
- 如何选择PHP项目的开发方案?
- CoreCRM 开发实录——开始之新项目的技术选择
- 选择GUI开发还是Web开发的问题
- 业务的需求:服务器垂直还是水平扩展?
- 关于项目进度慢的思考----如何提高整体开发效率
- HTML5开发桌面应用:选择node-webkit还是有道heX
- 【腾讯Bugly干货分享】微信小程序开发思考总结——腾讯“信用卡还款”项目实践
- 浅谈开发人员是按部门划分还是按项目划分为好
- 关于项目开发的数据库更新的思考sql_update
- iOS开发那些事-关于性能优化–选择nib还是故事板的讨论
- J2EE学习从菜鸟变大鸟之八 企业级项目开发的思考
- 使用Qt开发跨平台桌面应用时,应该选择widgets还是qml?