《人月神话》:我所遇见的“焦油坑”

最近在读《人月神话》这本书。

发现大部分task延期和研发关系不是很大,技术为业务服务,但是偿还不了业务债。 

焦油坑的概念源自于挖掘坑井时的一种不幸状况。当挖掘坑井时,首先会进入表土层,进展颇快。但接下来遇到了沥青或泥浆,这种材料比较粘稠,导致进展明显减慢。在开采坑井时,无论是多么小的焦油坑,都会导致进展受阻。

在软件开发中也存在类似的问题。开发项目的初期,团队可能会进展迅速,但随着项目的推进,可能会遇到一些没有预料到的问题,如技术难题、人员调整或需求变更等,导致开发进度的延误。

那么最近实际工作中,确实遇见了"焦油坑"。

在做”消息定时发送“功能的初期,我快速地完成一些基础功能的开发,如定时任务配置,消息模板等。但在开发过程中,我遇到需求描述不清的问题,这就需要投入大量时间和资源来解决。这个问题就像是一个焦油坑,阻碍了项目进度的进展。

回顾一下我接手这个task的过程:

1. 初期,我知道是个什么样的功能,快速的了解了相关的技术栈

2. 下一步,架构抽象 -- 实现接口 

3. 业务需求不清楚 和 需求变更 导致功能延期

4. 和测试,产品沟通,整理需求文档,达成一致性

5. 回到step2去重构相关功能

很明显,假设我的预估成本是 程序*编程系统=3n,我给出的假设成本是 6n ,但是实际花费的成本是 n*3*3 = 9n 

主要的问题,可能是出现在需求的传递上,或者换句话说,需求文档的缺失

需要什么样的文档?

不同对象需要不同级别的文档,以下总结仅针对  产品 -- 研发  这种传递来说。

使用程序:对功能的一段描述性文字,大部分需求描述只是描绘树叶和树皮,没有描述森林的图景。

  • 1. 目的:功能是什么? 开发此功能的原因?
  • 2. 范围:有效的输入范围,有效的输出范围
  • 3. 输入-输出格式:保证确切和完整
  • 4. 操作流程:此功能的正常操作流程和异常操作的处理
  • 5. 精度和校验: 预期的结果,如何进行结果校验?

 注:流程图不是必要的,如果总结性文字足够精炼。

或者更实际一点, 我给出一份通俗的文档描述的案例

  • 1. 用户想获得定时提醒的功能,工作流中,完成A节点后,通知B节点相关的人继续处理
  • 2. B节点相关的人是 X,Y和Z类型的角色,消息通知将会告诉X,Y角色要做什么
  • 3. 通知的输出是:时间,内容,节点A的若干信息 
  • 4. 功能操作中,由任意类型的角色配置。每一个列选项的输入范围是()
  • 5. 当用户在APP上收到消息通知后,此功能完成。
  • 6. 若出现程序集宕机或者升级导致当前时间点无法推送消息,处理方式为()
  • 7. 附:流程图(包括异常分支处理)
  • 8. 附:歧义名词的注解
  • 9. 附:此模块相关功能可能出现的影响

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/63811.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 学习系列3 -- 函数压栈与出栈

在C中,函数压栈(函数调用)和出栈(函数返回)是函数调用过程中的两个关键步骤。下面将逐步解释这两个过程: 一 函数压栈与出栈过程简介 函数压栈(函数调用)的过程如下: …

【Bert101】变压器模型背后的复杂数学【01/4】

一、说明 众所周知,变压器架构是自然语言处理(NLP)领域的突破。它克服了 seq-to-seq 模型(如 RNN 等)无法捕获文本中的长期依赖性的局限性。变压器架构被证明是革命性架构(如 BERT、GPT 和 T5 及其变体&…

RocketMQ 延迟消息

RocketMQ 延迟消息 RocketMQ 消费者启动流程 什么是延迟消息 RocketMQ 延迟消息是指,生产者发送消息给消费者消息,消费者需要等待一段时间后才能消费到。 使用场景 用户下单之后,15分钟未支付,对支付账单进行提醒或者关单处理…

走进知识图谱(二)【世界知识图谱篇】知识表示的经典模型与平移模型及基于复杂关系建模的知识表示学习

上篇文章提到,该系列文章将主要围绕世界知识图谱和语言知识图谱这两大类知识图谱进行展开,并且提到知识图谱的主要研究包括了知识表示学习、知识自动获取和知识的推理与应用三大部分。今天主要介绍世界知识图谱的知识表示学习,其中包括经典的…

使用C语言实现UDP消息接收

目录 简介:步骤:步骤 1: 创建套接字步骤 2: 接收消息步骤 3: 完成 函数及变量解释总结: 简介: 在网络通信中,UDP(User Datagram Protocol)是一种无连接协议,它提供了一种快速、高效的数据传输方法。本文将向您展示如何使用C语言编…

Spring Bean 生命周期的执行流程

问题描述 Spring 生命周期全过程大致分为五个阶段: 1、创建前准备阶段 2、创建实例阶段 3、依赖注入阶段 4、 容器缓存阶段 5、销毁实例阶段 下图是 Spring Bean 生命周期完整流程图,其中对每个阶段的具体操作做了详细介绍: 一、创建前准备阶…

栈和队列详解

目录 栈 栈的概念及结构: 栈的实现: 代码实现: Stack.h stack.c 队列: 概念及结构: 队列的实现: 代码实现: Queue.h Queue.c 拓展: 循环队列(LeetCode题目链接&#xff0…

每天一道leetcode:516. 最长回文子序列(动态规划中等)

今日份题目: 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。 示例1 输入:s "bbb…

【高频面试题】JVM篇

文章目录 一、JVM组成1.什么是程序计数器2.什么是Java堆?3.能不能介绍一下方法区(元空间)4.你听过直接内存吗5.什么是虚拟机栈6.垃圾回收是否涉及栈内存?7.栈内存分配越大越好吗?8.方法内的局部变量是否线程安全?9.什么…

【技巧】如何保护PowerPoint不被改动?

PPT,也就是PowerPoint,是很多小伙伴在工作生活中经常用到的图形演示文稿软件。 做好PPT后,担心自己不小心改动了或者不想他人随意更改,我们可以如何保护PPT呢?下面小编就来分享两个常用的方法: 1. 将PPT改…

吉利科技携手企企通,打造集团化数智供应链系统

近日,吉利科技集团有限公司(以下简称“吉利科技”)联合企企通成功召开SRM采购供应链管理项目启动会。企企通与吉利科技高层、项目负责人与团队成员出席此次启动会。 双方将携手在企业供应商全生命周期管理、采购全流程、电子招投标、采购分析…

阿里云预装LAMP应用导致MySQL不显示访问密码如何解决

😀前言 本篇博文是关于阿里云云服务器ECS部署MySQL过程中出现的一下坑,希望能够帮助到您😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家…