如何让项目准时上线?
项目为什么容易延期?
1、软件研发是一项创造性工作
项目延期是一种普遍现象,管理者最为头疼的一个问题。但是外人并不理解。明明是你们自己做的计划,怎么总会出现这么多问题。说到底,这是由于我们的工作特性决定的。我们做的是一个创造性的工作,他不像建房子,有特定的步骤。我们实现一个功能,怎么写,有多少行代码,我们在写之前是不知道的。
基于我自己的经验,我觉得项目延期还有以下两个方面的原因:
2、工作中的突发事件多
我们在评估工作量的时候,都是基于过往的经验。这种经验性评估在真实环境中并不可靠。你无法应对突发问题。而我们真实开发的过程中突发问题太多了。
3、协作之间的耦合性高
技术人员工作的耦合性太高。从最开始产品经理提出需求、UI设计原型、UE设计体验、程序员做系统设计,写代码、测试人员编写测试用例。环环相扣,其中一个环节出了“意外”,时间就得往后延。
工作中常见的延期原因
我这里列了工作中常见的延期原因:
- 需求变更,一般指新增需求或者需求细节一直在变;
- 需求评估的工作量不足,低估了功能实现的难度;
- 需求理解不对,功能做错了。等最后测试或对接的时候才发现;
- 有临时需求插入。比如线上突然出现了一个bug,需要修复;
- 新需求本身存在逻辑问题,做之前都没发现,在做的过程中才发现。
- 自测不仔细,测试发现问题太多,bug越改越多;
- 临时人员变动;
- 偏离计划后没有做好应对措施;
- 技术难点调研出了问题,实现方案得改;
......
那是不是我们就没办法了呢?也并不是。方法总比问题多,只要所有出现的问题都有应对方案,准时上线也是可能的。当然面对复杂问题,想一次性解决很难,但好在我们可以迭代。每一次项目结束都应该对项目做一次复盘。
如何解决项目延期问题?
这是我应对项目延期的解决方案:复盘 —— 找问题 —— 拆解问题 —— 制定解决方案 —— 迭代 —— 复盘
1、复盘,找问题
复盘:上一次我们延期的原因是什么?把问题原因找出来。比如上次是需求变动导致的。
2、拆解问题,制定解决方案
接着就是拆解问题。为什么需要变动?因为这个功能更重要。这是答案是真的吗?这个功能真的很重要吗?好,是真的。那么评判标准是什么?如果没有。那么我需要制定出来。有了标准,下次遇到新增需求,我们就能很快决定是否加入到这个版本里。好,我们还可以继续拆,是新增需求导致的延期?对,因为新增需求而且并没有修改上线时间。那我们下一次面对新增需求是不是可以对外争取更长一点的开发时间?
这个方法的优点是,每次进步都能感受的到。缺点是,时间周期太长。但好在,我们别人的经验是可以学习的。别人趟过的坑,我们没有必要再趟一次。
解决项目延期的关键三要素
基于我多年的项目管理经验,我认为要解决项目延期问题,必须做好三件事。
一、项目开始前:需求管理
项目开始前的需求管理有四个关键步骤
1、达成需求优先级排序的共识
首先,我们要达成给需求优先级排序的一个共识。什么样的需求是最重要的,一定要完成的?每个公司可能不一样。我自己是基于商业价值和用户价值两个维度来排序的。
商业价值,就是那些直接给公司带来利润,能够降低运营成本、完成公司长期战略目标等功能。而用户价值是,那些能够提升用户体验、提高用户使用效率,解决用户痛点问题的功能。
基于这两个维度,我们可以画一个四象限图,把我们所有的需求按照商业价值、用户价值两个维度给归类到不同象限里。对于商业价值高、用户价值高的产品。我们应该马上去做。至于优先级排第二的是商业价值高、用户价值低的需求;还是商业价值低、用户价值高的需求,要根据公司实际情况来定。
为什么要给需求分优先级?时间有限,要做的功能太多。如果根据商业价值和用户价值拆解后,还有很多需求,我们还可以继续用重要紧急两个维度来拆。
2、弄清楚需求的目的
达成了共识后,第二步就是在需求评审时,要求产品先讲解需求的目的。不只是说明我们要做什么,还要说明我们要达到什么目标。这样做有两个好处。
- 让所有人参与其中,发挥团队所有人的价值,通过集体共创可以获得更好的解决方案。
- 在事后,我们可以很清晰的看到,我们做的功能是不是往目标更前进了一步。如果没有。那么复盘的时候,能更有指向性的去找问题的原因。
3、弄清楚需求细节
第三步,就是开发者需要弄清楚需求细节。每一个开发人员都应该养成这样一个看透细节的能力。
代码的世界里只有0和1,没有随便。产品在给我们讲需求的时候,并不知道系统的具体实现。有些细节他也不知道。这会导致很多需求在做的过程中有很多细节需要反复确认,如果做的不好,很多细节问题都会在测试的时候体现出来。举个例子,当产品说我们这次做一个活动,用户下单满29包邮。看起来很简单的一个需求,但如果你系统足够复杂,开发人员应该要想到,跨店的情况怎么办?含虚拟商品怎么办?如果店家设置了其他活动,冲突了怎么办?需求后期会不会变成49包邮?如果这些在评审的时候没有想到,那么在做的过程中一定要和产品保持沟通。有些新人刚来的时候不好意思问,其实没啥,每个人都是这么过来的。这种能力是需要时间积累的。
需求理清了也有两个好处:
- 评估的工作量会跟精准。
- 更早的发现需求里潜藏的问题。
4、输出完整的项目上线计划表
第四步,就是上下同步需求,生成需求计划表。首先我们拆解需求,大需求变成小需求。然后评估小需求的工作量。输出自己的个人计划表。然后部门内部整合需求,输出部门的计划完成表。最后是与团队其他成员生成整体的项目计划表。一般会做成甘特图。这样在做的过程中更容易发现问题。
异常情况
这四个关键步骤,说起来简单,但要真正做好不容易。如果能做到,那需求管理基本不会存在大的问题了。当然也会有一些异常情况。比如需求确定后,能不能变动?一般需求确定下来后,最好不要做临时变动。除非特殊情况。
那什么是特殊情况?这就是制定需求优先级规则的好处了,如果确实有更紧急、成本低的高商业价值、高用户价值的需求。我们可以变动。只要团队内成员都认可这个规则,做需求变动就会比较好实施。
那如果是领导不按规则变动需求怎么办?
谁担责谁决策。因为站的角度不一样,我们认为的高价值任务不一定对。这是一条职场通用原则,在需求确定做不做之前,作为项目组成员,你可以表达自己的建议,但如果最终负责人拍板要做,那就坚决执行。
二、项目开始中:过程管理
过程管理的关键是要解决信息不同步的问题。我的解决方案是:
1、每天都开站立晨会。
很多人说早上开晨会没有用,是管理者没有其他办法,只能通过会议来推进工作的一种表现。我倒不觉得,晨会并不复杂,也不会花费很多时间,但正是因为有了这样一个固定”沟通“事项,每个人心里都会想着这件事,自然会把当下的工作按计划推进。这里我介绍一下我公司开站立晨会的具体步骤:
- 首先团队之间达成共识。明确晨会的目的是协同,而非汇报。每个人时间就2分钟。控制发言时间。
- 确定汇报的内容。每个人讲讲当天的计划和实际进度是否一致。是否遇到了什么问题,是否需要什么支持。
- 固定发言顺序,发言过程中,其他人不评论,不解答。具体的问题等到会后在找相关人员一起讨论。
- 晨会的主持人很关键,他需要控制流程和时间,对于偏离主题的发言要给予提醒。
- 最后就是要做会议纪要,只记录某人遇到的问题或请求以及整个项目的进度是否正常。
开会时间推荐在正式上班时间30分钟后,比如9点上班。9点30开始。10点前结束。备注:我公司弹性上班可以9点半到公司。
晨会能很好的解决团队内部信息不对称的问题,大家能更好地了解到彼此的项目进度并做好配合。而且人都要面子的,如果自己制定的计划未完成,还要自己当众说出来没按计划完成的原因,是很有压力的,这种压力会在潜意识里影响到自己每天任务的完成度以及专注度。
很多公司把晨会开成了汇报会,最后就变成了一个没有太多信息量的务虚会议。并不是这个工具不好用,而是你没有用对方法。记住上面我说的几个原则,相信你能组织好一场适合团队的晨会。
2、如果是跨部门协作,每日要进行"对表"
如果是跨部门协作。我们每天也要进行”对表“,也就是同步信息。
3、关键节点的跟进。
千万不要等到上线了在来看项目进展,这样即使发现问题,你也没有时间来解决。
4、制定异常问题的处理机制。
所有的异常情况,都需要设计一个应对的应对方案,有了应对方案,至少解决问题的流程有了,心理就不会慌。解决起来就容易很多。
5、建立自己的问题清单库。
很多大公司都有这样一个产品问题清单库。客服同事在处理用户问题时候,通过关键字搜索就能找到通用的解决方案。这极大地提高了客服处理问题的效率。同样的方式其实也可以用在开发上。也许很久之前某个同事遇到的问题,其他同事也能遇到。这种情况下,通过关键字搜索,原来要花半天才能解决的问题,可能一分钟就给解决了。需要注意的是在做这个问题清单库的时候,一定要先定义好格式。这样才好管理。
那是不是做到上面这些就能保证项目能准时上线了?也不一定。因为这里面最关键的是执行的人。人的管理是一门艺术。这里以后再详细讲。
三、项目结束后:对项目做复盘。
复盘会:全员参与
做的好的,要想办法将其标准化、可复制。
做的不好的,要想办法制定应对的方案。
防止项目延期的几个方案
最后,说一下我在防止项目延期上的个人经验。
1、大项目要分阶段转测试。
不要把测试和设计工作都集中在一个时间段。版本迭代的时长也不要超过一个月。
2、预留测试时间
开发人员每次做完一个任务后,都要预留测试时间。同时和开发人员要达成一个共识,如果开过程中出现延期,要自己通过加班时间赶上进度,不能影响其他同事的进度。
3、制定常见异常情况的处理标准。
也就是最开始讲到的,如果真的有需求变更,那么就一定要做好变更需求的标准。需求可以变,变了之后如何处理。这个也需要明确。有些是可以直接放到版本里通过加班解决,有些可以舍弃掉一些需求。尽量不在要发布的时候做变更。
4、做好PLAN B计划。
遇到一些突发时间的预案是什么。比如有人员临时请求,怎么办?有技术难点攻克不了怎么办?作为管理者需要提前想好备选方案。
5、制定两个发布计划。
一个计划是对内的,根据大家工作计划整合之后的发布时间,还有一个是对外上线的计划。我们团队要追求对内时间上线。但如果出现问题,预留出的时间就是我们的缓冲带。当然也可以对外给出一个模糊的上线时间,比如对内9月10号上线,对外9月中旬上线。
以上,是我应对项目延期的一些经验。希望给大家带来一些启发。
相关文章:
如何让项目准时上线?
项目为什么容易延期? 1、软件研发是一项创造性工作 项目延期是一种普遍现象,管理者最为头疼的一个问题。但是外人并不理解。明明是你们自己做的计划,怎么总会出现这么多问题。说到底,这是由于我们的工作特性决定的。我们做的是一…...
ChatGPT 和 Elasticsearch:APM 工具、性能和成本分析
作者:LUCA WINTERGERST 在本博客中,我们将测试一个使用 OpenAI 的 Python 应用程序并分析其性能以及运行该应用程序的成本。 使用从应用程序收集的数据,我们还将展示如何将 LLMs 成到你的应用程序中。 在之前的博客文章中,我们构建…...
不使用辅助变量的前提下实现两个变量的交换
package operator; //不用第三个辅助变量,实现两个数的交换 public class Demo08 {public static void change(int a, int b){a ab;b a-b;a a-b;System.out.println(a);System.out.println(b);}public static void main(String[] args) {change(900,3000);} }后续…...
SV-DJS-i13电梯对讲网关
SV-DJS-i13电梯对讲网关 DJS-I13 是一款主要应用于电梯场景的对讲设备,可以将电梯原有模拟通话器的模拟信号转换成数字信号,不仅有稳定性好、电信级音质的优点,且完美兼容当下所有基于SIP的主流IPPBX/软交换/IMS平台,如Asterisk, Broadsoft,…...
论文解析-基因序列编码算法DeepSEA
论文解析-DeepSEA 参考亮点功能 方法数据集来源数据 实验评估评估DeepSEA预测染色质特征的性能评估DeepSEA在变异序列上的DHS预测性能数据集结果 参考 Zhou, J., Troyanskaya, O. Predicting effects of noncoding variants with deep learning–based sequence model. Nat Me…...
计组与操作系统
非科班出身的程序员,还是得补一下相关理论课程,最近看了下九曲阑干关于CSAPP的视频,学习了一下计算机组成原理,这里列一下相关知识点。 计算机组成原理: 数的表示与运算:CSAPP第二章 指令系统࿰…...
Pytorch中张量矩阵乘法函数(mm, bmm, matmul)使用说明,含高维张量实例及运行结果
Pytorch中张量矩阵乘法函数使用说明 1 torch.mm() 函数1.1 torch.mm() 函数定义及参数1.2 torch.bmm() 官方示例 2 torch.bmm() 函数2.1 torch.bmm() 函数定义及参数2.2 torch.bmm() 官方示例 3 torch.matmul() 函数3.1 torch.matmul() 函数定义及参数3.2 torch.matmul() 规则约…...
如何在matlab绘图的标题中添加变量?变量的格式化字符串输出浅析
文章目录 matlab的格式化输出控制符字段宽度、精度和对齐方式的控制matlab的格式化输出总结 matlab的格式化输出控制符 Matlab在画图的时候,采用title函数可以增加标题,该函数的输入是一个字符串,有时候我们想在字符串中添加一些变量&#x…...
Spring MVC 八 - 内置过滤器
SpringMVC内置如下过滤器: Form DataForwarded HeadersShallow ETagCORS Form Data 浏览器可以通过HTTP GET或HTTP POST提交form data(表单数据),但是非浏览器客户端可以通过HTTP PUT、HTTP DELETE、HTTP PATCH提交表单数据。但…...
@Change监听事件与vue监听属性:watch的区别?
change 和 watch 是 Vue 中用于处理数据变化的两种不同方式。 1. change: - change 是一个事件监听器,用于监听特定DOM元素的变化事件,通常用于表单元素(如输入框、下拉框等)的值变化。 - 它在用户与表单元素交互并提交了变化时触…...
C++面试记录之中望软件
上次面试体验不好,记录了,这次同样记录一次体验不好的面试,中望软件…直接写了名字,因为真的很无语😓 记录一下我不知道的问题 忘记录音了😢 1. main函数之前做了什么? 我:实话我…...
多功能翻译工具:全球翻译、润色和摘要生成 | 开源日报 0914
openai-translator/openai-translator Stars: 18.1k License: AGPL-3.0 这个项目是一个多功能翻译工具,由 OpenAI 提供支持。 可以进行全球单词翻译、单词润色和摘要生成等操作提供三种模式:翻译、润色和摘要支持 55 种不同语言的互相转换支持流模式允…...
在 Vue.js 中,使用 watch 监听data变量如:对象属性/data变量
watch 监听对象属性 在 Vue.js 中,使用 watch 监听对象属性的变化时,应该将属性名作为字符串传递给 watch 选项。 示例如下: javascript watch: {addform.isCheck1: function(newValue) {console.log(newValue);var quantity this.addform…...
vue中预览xml并高亮显示
项目中有需要将接口返回的数据流显示出来,并高亮显示; 1.后端接口返回blob,类型为xml,如图 2.页面中使用pre code标签: <pre v-if"showXML"><code class"language-xml">{{xml}}</code></pre> …...
MFC中嵌入显示opencv窗口
在MFC窗体中建立一个Picture Control控件,用于显示opencv窗口 在属性中设置图片控件的资源ID为IDC_PIC1 主要的思路: 使用GetWindowRect可以获取图片控件的区域 使用cv::resizeWindow可以设置opencv窗口的大小,适合图片控件的大小 使用cvGetWindowHandle函数可以获取到ope…...
金鸣识别网页版:轻松实现表格识别的神器
来百度APP畅享高清图片 金鸣识别网页版是一款功能强大的在线识别工具,它可对图片或PDF中的表格文本内容进行识别,还支持各种证票的结构化识别。以下是以表格识别为例,对金鸣识别网页版的操作说明进行详细介绍: 首先,打…...
DasViewer可以设置打开指定文件吗?
答:会员可以。工具里面选择坐标转换,输入源数据,设置好源坐标和目标坐标以及路径。根据两张坐标系的性质选择转换方式。 DasViewer是由大势智慧自主研发的免费的实景三维模型浏览器,采用多细节层次模型逐步自适应加载技术,让用户在极低的电脑…...
uniapp微信小程序用户隐私保护指引弹窗组件
<template><view v-if"showPrivacy" :class"privacyClass"><view :class"contentClass"><view class"title">用户隐私保护指引</view><view class"des">感谢您选择使用我们的小程序&am…...
Java的反射应用(Method和Class)
记录:473 场景:使用java.lang.reflect.Method和java.lang.Class类,根据Java反射原理实现使用指定字符串类名和方法名称,调用对应对象和对应方法。 版本:JDK 1.8。 1.使用Java反射调用指定类的指定方法 (1)参数说明…...
Java之泛型系列--Class使用泛型的方法(有示例)
原文网址:Java之泛型系列--Class使用泛型的方法(有示例)_IT利刃出鞘的博客-CSDN博客 简介 本文用示例介绍Java在方法前加泛型的使用。 类类型的写法 对象所对应的类的泛型写法 Class classAClass<T> classAClass<?> classB Class与Class<?&g…...
【【无用的知识之串口学习】】
无用的知识之串口学习 USART串口协议 •通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 •通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 就是我们并不能在芯片上设计完全部的一下子完成所有的设计&am…...
9月13日上课内容 第三章 ELK日志分析系统
本章结构 ELK日志分析系统简介 ELK日志分析系统分为 Elasticsearch Logstash Kibana 日志处理步骤 1.将日志进行集中化管理 2.将日志格式化(Logstash) 并输出到Elasticsearch 3.对格式化后的数据进行索引和存储 (Elasticsearch) 4.前端数据的展示(Kibana) Elasticsearch介…...
不知道有用没用的Api
encodeURIComponent(https://www.baidu.com/?name啊啊啊) decodeURIComponent(https%3A%2F%2Fwww.baidu.com%2F%3Fname%3D%E5%95%8A%E5%95%8A%E5%95%8A) encodeURI(https://www.baidu.com/?name啊啊啊) decodeURI(https://www.baidu.com/?name%E5%95%8A%E5%95%8A%E5%95%8A) …...
(2023,LENS 视觉模型 LLM)迈向可见的语言模型:通过自然语言的镜头来看计算机视觉
Towards Language Models That Can See: Computer Vision Through the LENS of Natural Language 公众号:EDPJ(添加 VX:CV_EDPJ 进交流群获取资料) 目录 0. 摘要 1. 简介 2. 相关工作 2.1 大语言模型能力 2.2 解决视觉和…...
线段树上树剖再拿线段树维护:0914T4
cp 一种常见套路: 如果在线段树上进行一段区间修改,那么必然是一段右节点一段左节点 这个过程其实就是zkw的本质 下面都要用zkw来理解 考虑原题,有一棵不规则的线段树 类似zkw,在这类题目中,我们要先把开区间变成闭…...
互联网医院系统|互联网医院探索未来医疗的新蓝海
随着互联网技术的飞速发展,互联网医院应运而生,为人们带来全新的医疗体验。本文将深入探讨互联网医院的开发流程、系统优势以及未来发展方向,带您领略医疗领域的新蓝海。互联网医院的开发流程是一个结合技术、医疗和用户需求的复杂过程。首先…...
Acrel-2000系列监控系统在亚运手球比赛馆建设10kV供配电工程中的应用
安科瑞 崔丽洁 摘要:智能化配电监控系统是数字化和信息化时代应运而生的产物,已经被广泛应用于电网用户侧楼宇、体育场馆、科研设施、机场、交通、医院、电力和石化行业等诸多领域的高/低压变配电系统中。安科瑞自研的Acrel-2000系列监控系统可监控高压开关柜、低压…...
c++中遇到一个不了解的函数,查看能用的接口功能
在C中,您可以使用几种方法来查找函数的接口和使用方式。下面是一些常用的方法: 查阅官方文档:每个常见的C库都应该配有官方文档,其中包含所有可用函数和其接口的详细说明。您可以从官方网站或下载的文档中查找所需函数的接口和使用…...
windows linux子系统 docker无法启动
windows安装Linux子系统后,使用sudo service docker start启动后,再使用sudo service docker status查看docker状态,docker无法启动,使用sudo dockerd查看错误信息如下: failed to start daemon: Error initializing …...
【Redis】深入探索 Redis 的数据类型 —— 无序集合 Set
文章目录 一、Set 类型介绍二、Set 类型相关命令2.1 添加元素和检查成员2.2 移除元素2.3 集合运算求交集求并集求差集 2.4 Set 相关命令总结 三、Set 类型编码方式四、Set 使用场景 一、Set 类型介绍 Set(集合)是 Redis 数据库中的一种数据类型…...
discuz做网站赚钱经历/女装标题优化关键词
### 以下是常用的代码收集,没有任何技术含量,只是填坑的积累。转载请注明出处,谢谢。 #### 1. PC - js- 返回指定范围的随机数(m-n之间)的公式javascriptMath.random()*(n-m)m - [return false](http://stackoverflow.com/questions/1357118/…...
自己怎么做云购网站/seo文章代写一篇多少钱
Iterator接口 public interface Iterator<E> {boolean hasNext();E next();void remove(); } 访问元素前需要使用hasNext进行判断是否有元素存在,如果有再通过next操作获取,直接使用next操作而不进行hasNext检测,当到达末尾时会抛出NoS…...
建设摩托官方网站/电商代运营收费标准
目录 需求分析 1 1 需求概述 2 文档介绍 2 1.1 文档目的 2 1.2 读者对象 2 1.3 参考文档 2 1.4 原始功能需求 2 1.5 非功能性需求 2 2 用例模型 3 2.1 用例列表 3 2.2 用例图 4 2.3 用例规格说明(用例描述) 4 2.3.1 UC01用例 4 2.3.2 UC02用例 5 2.3.3 …...
关于网站开发的一些论文/seo关键词是什么意思
springboot 本地访问静态页面,动态页面,其他静态资源,以及默认页面的方式 静态页面访问 (其他静态资源也行) spring boot项目只有src目录,没有webapp目录,会将静态访问(html/图片等)映射到其…...
关于官方网站建设情况的汇报/广告推广策划方案
DedeCMS Error:Tag disabled:"php" more...! 问:DedeCMS Error:Tag disabled:"php" more...! 解决办法:查找你的模板里是否使用了:{dede:php}**{/dede:php} 这样的代码,如果有,清除…...
杭州做网站公司/优化疫情二十条措施
在bootstrap中,我们可以使用不带任何class的跟来创建一个有序列表,但是如果加上list-group类,样式有了,但列表前面的数字却没了。Bootstrap给list-group-item应用了display:block; 所以显示不了序号,因此我们只要修改一…...