阿里感悟(十三)降低成本的敏捷设计
作者:方腾飞
最近在参与一个比较大的项目,需要耗费上千人日,而细分设计和设计评审就花掉了几百人日,基本上10几个人写了几周的设计文档,并开了几周的设计评审会。整个过程模式比较重,所以耗费的人力比较大。
为什么模式比较重?
- 参与者众多。设计评审会时,要求与本会相关的人都参与设计评审,一个屋子里可能坐着几十人,哪怕一个小时的会议和你相关的就5分钟,你也要参加。而且这样的公司会议太多,如果每个相关的会议都去参加,那就基本上是白天开会,晚上写代码的节奏,所以现在当有人找我开会时,我会问是否必须要我参加,能否会前或会后找我沟通确认,可能10分钟就能解决的问题。
- 设计文档内容多。系分设计非常全,需要把所有设计场景都写上去,首先需要花大量时间写系分设计文档,其次需要几个小时的会才能评审完。而这样全面的设计文档,可能需要三个月到半年才能开发完成。
- 有的设计评审没有经过小范围初审,有些设计遗漏了,导致要反复评审。
这样的详细设计和设计评审虽然模式比较重,但是优点是考虑的很全面,风险在一开始都能大部分暴露出来,缺点就是耗费的人力太多,不够敏捷。所以本文想和大家一起探讨下敏捷设计,希望能抛砖引玉!
在谈敏捷设计前,首先需要思考下到底什么是软件设计?在精益思想中对于浪费有这样的定义,任何不对最终客户产生价值的行为都是浪费,而设计本身是不对客户产生任何价值的,那么为什么需要进行软件设计?
什么是软件设计?
大学应用基础是这么定义的,软件设计是从软件需求规格说明书出发,根据需求分析阶段确定的功能,设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。我总结下,软件设计是将需求抽象成软件系统的过程。
为什么需要软件设计?
因为好的设计可以降低成本,如减少返工,当需求变更时,能快速响应需求,并且开发成本最低。
什么是敏捷设计?
在网上找了下定义,致力于保持系统设计在任何时间都尽可能的简单、干净、以及富有表现力!其实就是减轻设计阶段的压力,最大程度上减少浪费,多余的设计和考虑不周全的设计都会造成浪费。有些文章谈到代码就是设计,这个有点理想化不好落地,简单的项目可以这么做,但是像我们做的互联网金融产品,业务都极其复杂,光看代码是很难看懂的。
如何进行敏捷设计?
我总结出的几个思路,可能比较概念化:
- 分阶段设计。先设计必须要的东西,快速拿到产出,暂时不用的先不要设计,想不清楚的也暂时不要设计。没事的时候就多想想系统的设计有没有问题,有问题即时提出来,然后修改掉。
- 快速讨论设计方案。自己设计出来的东西先找某个同事简单过下,如果在设计评审中还有很多问题,那浪费的人日会更多,因为参与设计评审的人很多,不通过还要开复审。一只笔,一个黑板擦,一面玻璃板足以完成一次设计,用笔直接在板上画一下自己的设计思路,并和同事进行讨论,确认之后把设计图拍照提交到文档库,或者用工具Visual Paradigm画出来。
- 不需要的不设计。优先以最小人力解决问题,能用简单的方法解决问题,就不要用复杂的办法。比如,能通过打通网络解决系统间访问问题,就不要走代理,这样可以节约很大的设计和开发成本。能通过业务解决的问题,就不要想用系统解决,比如人工操作修改数据,和系统启定时任务批量修改数据。
敏捷设计的优缺点
优点:互联网开发业务变化得非常快,如今天产品经理觉得应该上旗舰版来提高产品的销售额,但是几个月后发现由于价格比较贵,购买的人比较少,于是旗舰版就分拆成不同的模块进行售卖。从我们的经验来看,一个扩展性非常好的业务设计可会带来三个问题,第一设计和开发时间比较长,第二代码不易读,第三大部分扩展以后都不会用到。 所以敏捷设计的思路是只做必要的设计,需要的时候再重构。
缺点:可能的确是有些场景在设计的时候没有考虑到,导致系统在未来很特殊的场景下不能支持业务需求。到时候可能就需要打补丁或者用很奇怪的方式实现。
敏捷设计评审会议
- 减少会议。为了会议的高效,我们之前的做法是会合并几个会议,在Kick Off会议之后直接进入设计评审会议,因为定会议室,投影仪,让参会人员准时参加都需要一定的成本。设计评审会议一般是半个小时到1个小时。设计者讲下自己的设计,可以使用PPT或直接在黑板上画一下自己的想法。如果是对已有功能的修改,需要先讲这块功能原来是什么样,现在需要修改成什么样,涉及到哪些修改点,自己是如何设计的。如果设计方案审批不通过,则设计者需返工,因为我们强调简单设计,所以即使返工,成本也不会很高。同样为了高效,设计者重新设计的方案不需要再开一次设计评审会议,只需要把相关人叫到座位旁边确认下就可以。
- 减少参与者。只邀请必须参加的人,非必须单相关的单独沟通。
- 高效评审。设计评审中很重要的一点是参加评审的人必须有足够的耐心和胸怀听明白别人的设计,设计评审是为了优化设计者的设计方案,而不是为了挑战设计者,或给设计者挑刺。任何设计方案都有它的优缺点,所以评审人在听完设计之后,需要先思考下这个设计方案的优缺点是什么,再想想自己的设计方案是什么?对于设计者没有考虑或讲到的点,可以通过反问的方式让对方补充。
阿里感悟(十三)降低成本的敏捷设计相关推荐
- 阿里感悟系列文章(存)
方腾飞:并发编程网 http://ifeve.com/thinking-in-ali/?spm=5176.100239.blogcont7262.4.Mu35Nz 阿里感悟系列文章 阿里感悟(三)- ...
- 阿里云容器服务飞天敏捷版详解
阿里云容器服务飞天敏捷版详解 libinjingshan 2017-04-24 23953浏览量 简介: 阿里云容器服务提供了公共云.专有云以及飞天敏捷版三种部署形态,全方位地满足企业客户利用CaaS ...
- 【华为云技术分享】敏捷设计,高效协同,凸显设计端云协同价值
DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师. 官方网站:devui.design Ng组件库:ng-devui(欢 ...
- java晋升述职_阿里感悟(九)-如何才能晋升
如何才能晋升? 努力突破自己,超越本层级的能力,并创造当前层级的人创造不出来的价值. 如何才能突破自己的能力? 首先要做的是改变习惯.在阿里很流行的一句话是,当自己不舒服的时候就是自己成长的时候.比如 ...
- 微信小程序开发之路(十三)正式开工--设计ER图与数据库的创建
微信小程序开发之路(十三)正式开工–设计ER图数据库的创建 先制作班费公是示功能 我们在项目的 settings.py 文件中找到 DATABASES 配置项,将其信息修改为: DATABASES = ...
- 亚马逊光缆被挖?——阿里工程师讲解支付宝如何架构设计数据中心
文: 周瑜 校对:李二 全文2500字,建议阅读时长7分钟 点击右上角关注我们,每天都能收到有趣的推文哦. 亚马逊光缆被挖?--阿里工程师讲解支付宝如何架构设计数据中心 昨天科技圈最火的新闻应该是&q ...
- 敏捷软件开发总结——什么是敏捷设计
什么是软件设计 软件系统的源代码是它的主要设计文档,我们可以使用各种工具比如UML来描绘软件系统结构,但它最终体现为源代码. 敏捷开发的作用和设计方法 关于敏捷开发,大家可能会有如下疑问: 1.敏捷开 ...
- 剑指云原生数据库 2.0,阿里云发布全新一站式敏捷数据仓库解决方案
作为基础软件"三驾马车"之一的数据库,其发展历程可追溯到60年前:从上世纪50年代的层次数据库.网状数据库,70年代的关系型数据库,再到90年代的关系型数据库.数据仓库.PC单机数 ...
- 从业十余年的阿里工程师告诉你,敏捷开发的核心是什么?
[数据猿导读] 工程师如何在控制性和创造性中找到平衡点?生产的严谨和创造的不严谨性怎么解决?来自阿里IoT事业部,具有超过10年无线通信行业从事技术研发工作的陶震,为您解答 作者 | 陶震 官网 | ...
最新文章
- java 内存映射文件 主要应用_VC++中使用内存映射文件处理大文件(3)
- python 日志内容提取
- 如何利用openSsl来计算一个文件的md5值?
- 老化试验机ami怎么寻找过去的数据_广东元耀:您知道塑料臭氧老化试验机检测浓度的方法有哪些吗?...
- php如何增加字段,php如何增加字段
- 201507之佛山移动实习
- android将彩图转为黑白_Android逆向反编译代码注入APK过程思路分析
- 浅谈DOMContentLoaded事件及其封装方法
- iconfont-矢量图标字体的运用
- fastDFS引入jar包后日志冲突
- 自动驾驶 9-3: 走向非线性 - 扩展卡尔曼滤波器 Going Nonlinear - The Extended Kalman Filter
- Django 字段选项之 related_name 和 related_query_name
- 小魔术用计算机猜年龄,魔术中的数学之猜年龄
- 小ck活动机器人包包_2018爆款包:不是LV,Gucci而是平价小CK~
- 分享一篇日志,与迷茫中的你,生命如此短暂
- AI初创公司新机遇,谷歌苹果竞相收购
- 微信调用扫一扫功能实现
- tf-faster-rcnn代码学习.目标检测(Tensorflow版Faster R-CNN)
- ESP32-C3入门教程 WiFi篇②——WiFi Station 模式连接到 AP 热点接入点
- 求100以内所有的素数和
热门文章
- Linux安全管理-Iptables-NAT技术应用
- 虚拟内存,虚拟地址空间,用户空间,内核空间
- oracle client中对 TNSNAMES.ORA的研究
- 代友招中高级.NET开发工程师【上海-徐汇】
- pxe安装linux后命令不可用,CentOS7下的PXE无人值守系统安装(亲测成功)
- Java学习_day007:数组与方法
- h5执行php函数,值得一个的5个强大的HTML5API 函数
- 定时任务重启后执行策略_quartz定时任务框架调度机制解析
- 2021年度脑机接口重大事件和进展汇总
- 手把手教你EEG脑电数据预处理-操作篇