一次完败的Release

去年8月份加入一家创业公司,和原同事做VR相关的产品开发,到18年正月初七,总共release过两次,真正经理了一次从0到1的过程。第一次release产品初步成型,大概在10月份,在公司内部做了一次宣发,我们做的是ToC的产品,但这次release没有真正意义上的C端客户,倒是可以拿着这个雏形产品到处去找内容提供商;另外可以拿到市场上去"试点"了,找一些潜在的目标用户,去收集反馈;再有就是需要向投资人交答卷。

第二次release就是直接面向实在的客户了,release时间点在正月初七。我认定这次Release叫做『完败』,是因为软件质量出现了问题——产品拿到使用现场的时候发现诸多bug,系统根本跑不通,在现场调试了三天才将就着能用。想想自己曾经信誓旦旦的说这次发布的目标是要保证软件健壮性,出错率保证在5%以内,脸不禁红到了脖子跟,呵呵。

这篇文章只从项目管理和软件开发的角度来阐述这次release之前的诸多流程,用以分析项目失败的原因。

一个好的软件产品,软件质量是基石,软件质量指的是软件的稳定性和流畅度,软件质量过不了关,软件再怎么易用,业务功能再牛逼,也称不上合格的产品。

研发团队成员

研发团队总共四个开发,我和原同事做后台和VR终端开发,一个新员工做网页前端开发,一个员工做Unity开发。做美工的就不算了。没有测试,没有项目经理(敏捷教练)。我和原同事是资历比较深的,另外两个员工经验相对要浅。研发团队是原同事和老大组建的,不知道为什么忽略掉这两种成员角色。或许是因为支出吧。

为什么会失败

这次失败,当然有客观原因,譬如成员角色就是不完整的,譬如时间紧迫,但这些都不说,主要还是从自身找找原因,这样在下次遇到相同情况的时候,我们不能保证做到完美,但至少能保证减少错误或者没有大的错误,臻于完美。

因为团队成员角色的缺失,所以我们自己要担任起这些角色的功能,其实这都是后话,我们没有意识到它的重要性。

先从自身问题说起,我以前的背景全部是在发展相当成熟的大公司里任职开发工作,估计原同事也是类似,没有小公司创业经验,缺乏大局观。原先经历的项目都号称是敏捷开发,眼睛看见了项目经理如何运作一个项目:如何进度跟踪,如何协调资源,如何应对产品团队提出的需求变化等等;看到了测试人员如何工作:写测试计划,写自动化测试用例,和开发人员沟通测试结果等等。但这次经历说明了,眼见为『虚』,这些其它角色都没有亲身经历,过脑没过心。从心里知道这些程序是必要的,但没有见过缺失这些角色会造成什么后果,心里自然而然的还是将自己定位成开发人员,按照开发的路子一直走。 没有项目管理整个团队就是一盘散沙,没有目标,没有计划,没有需求优先级,产品过来需求就去做,做到什么时候没有预估,最后,失败是注定的。下面详细说说我们这次项目运作过程中缺失的流程:

没有时间节点

这是致命的,老大把release时间确定了,研发团队应该将研发测试的时间节点也定下来,什么时候代码写完,什么时候单元测试完,要留出来多长时间的系统联调时间,什么时候code freeze.时间确定下来后,各个阶段的目标就明确了,写代码阶段要保证代码质量,自测阶段要尽可能的发现新加代码中的问题,联调阶段至少要保证没有大的bug,小bug要尽量清理掉。code freeze出release版,坐等上线。

我们这次只有一个release时间,其余的都是瞬息自然,最后可想而知,运送设备当天勉强把软件装到设备里,没有测试完,发现的问题没有解决完。

没有进度跟踪


敏捷开发标准流程中的一环就是standup meeting,由项目经理了解每天项目进度,这其实是把写代码的时间节点分成了小目标,每个开发人员把需求的完成当做自己的一个目标,一个小目标又可以分成几个小小目标,例如,一个模块的完成就是完成了一个小小目标。项目跟踪可以让项目经理了解大致的开发进度,和大的时间节点相关联,如果过程中遇到问题,可以提前做出判断,采取补救措施。项目成员也可以通过这种方式让目标更加明确,遇到问题及时做出调整,并且也能了解其它项目成员的进度。

很可惜的是我们也没有standup meeting,目标变得模糊起来,这会导致问题,就像上学的期末考虑,把所有问题最终都堆积到临考试的前两周,结果可想而知,能及格就不错了。

需求传递流程不规范

先说问题,我们的产品经理传递需求都是通过口头来传达的,有以下几个缺点:

  • 口头传达会有信息损失,表达出来的东西和想法可能就会有出入,再传递到另外一个人的脑子里,理解的可能和你表达的又不一样,一次次传递,到最后的实施人员,最终可能面目全非。可能有点夸张,我们的团队也很小,沟通成本也小,但终究还是有问题。你碰到过开发和产品打架么?开发:你就是这么说的,我做的完全是照你说的做的。产品:我没这么说过,你肯定是误解我的意思了。呵呵。
  • 人的想法是会变的,人是会遗忘的。今天以为东西这么做好,头脑里有一套完整的功能流程,但明天可能觉得那里不对,但却想不起来具体是哪里不对了。
  • 有些东西不是一下就能理解的,实施人员得到需求后,可能一下就以为自己明白了,但设计和实现过程中才会发现产品需求有更深层次的用意。在反复揣摩产品需求,加深自己的理解时,记在脑子中的需求可能没有原先那么清晰明确了,好吧,又得去找产品团队确认。

我说这么多的目的只有一个:需求需要书面形式的写下来。产品团队写的过程中会多一个反复揣摩的过程,怎么表达更准确无误,自己的这种想法对不对?然后写下来,写下来就是写下来了,产品可以在这个基础上反复更改,直到无误。实施人员可以反复的理解产品的需求,这回反复理解的需求每次都是清晰可见的。

我们这次也碰到了需求理解不到位的问题,开发人员的功能实现和需求传递者的想法出现了偏差。

最后说说测试的问题

最近研发团队加入了Scrum Master新成员,有比较丰富的管理经验,但他做出的决定是先不要招测试人员。功能自己做自己测试。我对测试人员的看法如下:

  • 我觉得开发和测试是对立的,某种意义上来说,开发人员测试自己的代码往往不客观,尤其是单元测试覆盖不到的功能点,开发往往认为自己的功能是没问题的,有一个比喻:程序员写出的代码就是自己的孩子,哪有老给自己孩子揭短的。呵呵。因此这两个角色看问题的角度是不一样的。所以我认为测试人员还是必要的。

Scrum Master可能觉得我们目前的功能还没有那么复杂。所以自测应该没问题吧。在没有测试人员的情况下,为了保证软件质量,覆盖率高的单元测试就很有必要了。

希望我们以后能够做的更好,加油!

一次完败的Release的更多相关文章

  1. ASP.NET Core 1.1.0 Release Notes

    ASP.NET Core 1.1.0 Release Notes We are pleased to announce the release of ASP.NET Core 1.1.0! Antif ...

  2. maven 中snapshot版本和release版本的区别

    maven中的仓库分为两种,snapshot快照仓库和release发布仓库.snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本.定义一个组件/模 ...

  3. VS2010 release编译下进行调试,“当前不会命中任何断点,还没有为文档加载”问题解决方案

    在release模式下调试程序,经常出现"当前不会命中任何断点,还没有为文档加载"的问题,可尝试以下方法: 1. 属性 → 配置属性 → C/C++ → 常规 → 调试信息格式:选 ...

  4. 玩转Windows服务系列——Debug、Release版本的注册和卸载,及其原理

    Windows服务Debug版本 注册 Services.exe -regserver 卸载 Services.exe -unregserver Windows服务Release版本 注册 Servi ...

  5. maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

    maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository. ...

  6. Oracle Database 12c Release 1下载安装(自身经历)

    1.访问Oracle官网:https://www.oracle.com/index.html,下载Oracle Database 12c Release 1 (注意:File1和File2都要下载!! ...

  7. android系统release签名

    转自:http://blog.csdn.net/yangkai6121/article/details/38682321 为什么需要给Android系统签个名才能进行CTS认证呢?原来我们通过make ...

  8. .NET 的 Debug 和 Release build 对执行速度的影响

    这篇文章发布于我的 github 博客:原文 在真正开始讨论之前先定义一下 Scope. 本文讨论的范围限于执行速度,内存占用什么的不在评估的范围之内. 本文不讨论算法:编译器带来的优化基本上属于底层 ...

  9. VS2008 Debug与Release的本质区别(转)

    如何设置:工具栏“生成”→“配置管理器”→“活动解决方案配置” 对于VS2008的初次使用者来说,常会遇到的编译问题时,Debug版本运行正常,但在Release版本则不稳定或无法运行.以下是对Deb ...

随机推荐

  1. 智齿客服网页端接入文档V2.3

    产品介绍 智齿客服网页端接入提供以下两种部署方式. 一.网页组件(推荐) 通过智齿客服网站咨询组件,企业的用户可快捷联系到企业客服获取帮助.智齿客服网页组件提供强大的用户行为采集能力和系统对接能力,支 ...

  2. Java多线程:Callable,Future,FutureTask

    一.Future Future和Callable基本是成对出现的,Callable负责产生结果,Future负责获取结果.     1.Callable接口类似于Runnable,只是Runnable ...

  3. Mybatis-no getter for property named 'col_name' in 'class com.xxx.onebean'

    Mybatis中出现该异常 There is no getter for property named 'col_name' in 'class com.xxx.onebean 意思是onebean这 ...

  4. lua精灵移除报对象非法

    function addLeftCard(isVisible) if self.left_CardSprite == nil then self.left_CardSprite = cc.Sprite ...

  5. Item 15: 只要有可能,就使用constexpr

    本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 如果说C++11中有什么新东西能拿"最佳困惑奖" ...

  6. 系统右键添加cmd命令

    我们运行cmd.exe时,会发现刚刚打开时,一般提示在默认路径下: 有时候我们希望直接能够切换到某个路径下运行程序或者做某些工作,那么切换路径可能就会比较麻烦.下面我们介绍一种比较实用的方法,用鼠标右 ...

  7. Alpha冲刺No.8

    一.站立式会议 解决真实手机中出现的各种问题 细化界面设计 数据库上传与获取日拍 二.项目实际进展 能够上传和获取日拍信息 界面设计微调 三.燃尽图 四.团队合照 五.总结 白天金工实习,晚上才有时间 ...

  8. python的Virtualenv

    Virtualenv 虚拟的 Python 环境(简称 venv) 是一个能帮助你在本地目录安装不同版本的 Python 模块的 Python 环境,你可以不再需要在你系统中安装所有东西就能开发并测试 ...

  9. Mybatis-select-返回值类型错误理解

    Mybatis :Cause: java.lang.UnsupportedOperationException异常: 今天在写一个练手项目,作为初学Mybatis的小白,想着这里findByEmp_i ...

  10. LR之error(一)

    1 录制时频繁卡死的解决方案 添加数据保护 路径:计算机--高级系统设置(环境变量设置的上级窗口)--高级--设置--数据执行保护 更改LR录制设置,将run-time setting的brower改 ...