程序员也可以“砍”需求吗?

Allegro PCB设计小技巧:如何用Shift键快速平移复制走线和过孔? 本文深入解析了Allegro PCB设计中利用Shift键进行平移复制的核心技巧。通过对比传统复制粘贴流程,详细演示了如何高效、精准地批量复制走线和过孔,尤其适用于创建等间距电源总线、过孔阵列等场景,能显著提升PCB设计效率与准确性。 阅读详情

本文已收录GitHub,更有互联网大厂面试真题,面试攻略,高效学习资料等

我们前面讲的任务分解,主要是在讲开发任务的分解。今天我们换个角度,看看需求的分解。是的,需求也要分解。

有一次,我和一个做开发的同事聊天,他给我讲了他近期的烦恼。

同事:我们现在就是需求太多,开发的人太少,再这么干下去,哪天觉得自己抗不住了,我就拍拍屁股走人。
我:你没尝试着砍砍需求?
同事:怎么没尝试?产品的人都不同意。这批功能他们都说是关键功能。
我:你有没有尝试把需求拆开了再砍呢?
同事:还可以这样?

同事很惊讶,我一点都不意外。我们都是在说需求,但彼此对需求的理解却是大不相同。我先来问个问题,提到需求这个词,你会想到什么呢?

以我们用了好多次的登录为例,如果我问你这个需求是什么,大多数人的第一直觉还是用户名密码登录。

基本上,闯入你脑海的需求描述是主题(epic),在敏捷开发中,有人称之为主用户故事(master story)。

如果你对需求的管理粒度就是主题,那好多事情就没法谈了。比如,时间紧迫的时候,我想砍需求,你问产品经理,我不做登录行不行,你就等着被拒绝吧。

但是,如果你说时间比较紧,我能不能把登录验证码放到后面做,或是邮件地址验证的功能放到后面,这种建议产品经理是可以和你谈的。

这其中的差别就在于,后者将需求分解了。

大多数人可以理解需求是要分解的,但是,分解的程度不同,就是导致执行效果差异极大的根源。

以我的经验而言,绝大多数问题都是由于分解的粒度太大造成的,少有因为粒度太小而出问题的。所以,需求分解的一个原则是,粒度越小越好。

需求要分解

“主题”只是帮你记住大方向,真正用来进行需求管理,还是要靠进一步分解出来的需求。这里的讨论,我们会继续沿用前面文章中已经介绍过的需求描述方式:用户故事,它将是我们这里讨论需求管理的基本单位。

如果你的团队用的是其他方式描述需求,你也可以找找是否有对应的管理方式。

上一个模块介绍“以终为始”,我们对用户故事的关注点主要在:用户故事一定要有验收标准,以确保一个需求的完整性。而在“任务分解”这个模块,我们看用户故事,则主要关注它作为需求分解的结果,也就是分拆出来要解决的一个个需求点。

在前面的讨论中,我们已经知道了用户故事的“长相”,但更重要的问题是,划分需求的方式有无数种,就像一块蛋糕,你可以横着切,也可以竖着切。如果你一刀不切,那就是拿着主题当用户故事。你也可以快刀飞起,把主题切碎。

每个人都会有自己喜欢的拆分方式,我相信知道拆分的重要性之后,你总会有办法的。这里,我主要想和你聊聊怎样评判拆分结果,毕竟我们要把它当作需求管理的基本单位。

只有细分的需求才能方便进行管理。什么样的需求才是一个好的细分需求呢?我们先来看看用户故事的衡量标准。

评价用户故事有一个“ INVEST 原则”,这是六个单词的缩写,分别是:

  • Independent,独立的。一个用户故事应该完成一个独立的功能,尽可能不依赖于其它用户故事,因为彼此依赖的用户故事会让管理优先级、预估工作量都变得更加困难。如果真的有依赖,一种好的做法是,将依赖部分拆出来,重新调整。
  • Negotiable,可协商的。有事大家商量是一起工作的前提,我们无法保证所有的细节都能 100% 落实到用户故事里,这个时候最好的办法是大家商量。它也是满足其它评判标准的前提,就像前面提到的,一个用户故事不独立,需要分解,这也需要大家一起商量的。
  • Valuable,有价值的。一个用户故事都应该有其自身价值,这一项应该最容易理解,没有价值的事不做。但正如我们一直在说的那样,做任何一个事情之前,先问问价值所在。
  • Estimatable,可估算的。我们会利用用户故事估算的结果安排后续的工作计划。不能估算的用户故事,要么是因为有很多不确定的因素,要么是因为需求还是太大,这样的故事还没有到一个能开发的状态,还需要产品经理进一步分析。
  • Small,小。步子大了,不行。不能在一定时间内完成的用户故事只应该有一个结果,拆分。小的用户故事才方便调度,才好安排工作。
  • Testable,可测试的。不能测试谁知道你做得对不对。这个是我们在前面已经强调过的内容,也就是验收标准,你得知道怎样才算是工作完成。

“INVEST 原则”的说法是为了方便记忆,我们这里着重讨论两个点。

第一个关注点是可协商。作为实现者,我们要问问题。只是被动接受的程序员,价值就少了一半,只要你开始发问,你就会发现很多写需求的人没有想清楚的地方。

在我的职业生涯中,我无数次将需求挡了回去,不是我不合作,而是我不想做一些糊涂的需求。我之所以能问出问题,一方面是出于常识,另一方面就是这里说的用户故事是否是有价值。用户故事,之所以是故事,就是要讲,要沟通。

还有一个更重要的关注点,也是这个模块的核心:小。无论是独立性也好,还是可估算的也罢,其前提都是小。只有当用户故事够小了,我们后续的腾挪空间才会大。

那接下来就是一个重要的问题,怎么才算小?这就牵扯到用户故事另一个重要方面:估算。

需求的估算

估算用户故事,首先要选择一个度量标准。度量用户故事大小的方式有很多种,有人用 T恤大小的方式,也就是 S、M、L、XL、XXL。也有人用费波纳契数列,也就是 1、2、3、5、8 等等。有了度量标准之后,就可以开始估算了。

我们从分解出来的用户故事挑出一个最简单的,比如,某个信息的查询。这个最简单的用户故事,其作用就是当作基准。

比如,我们采用费波纳契数列,那这个最简单的用户故事就是基准点 1。其他的用户故事要与它一一比较,如果一个用户故事比它复杂,那可以按照复杂程度给个估计。

你或许会问,我怎么知道复杂程度是什么样的呢?这时候,我们前面讲过的任务分解就派上用场了,你得在大脑中快速地做一个任务分解,想想有哪些步骤要完成,然后才好做对比。

所以,你会发现,任务分解是基础中的基础,不学会分解,工作就只能依赖于感觉,很难成为一个靠谱的程序员。

估算的结果是相对的,不是绝对精确的,我们不必像做科研一样,只要给出一个相对估算就好。

同一个用户故事,不同的人估算出的结果可能会有差别。怎么样尽可能在团队中达成一致呢?这就需要团队中的很多人参与进来,如果团队规模不大,全员参与也可以。

如果多人进行估算,你就会发现一个有趣的现象,针对同一个用户故事,不同的人估算的结果差异很大。

如果差别不大,比如,你觉得 3 个点,我觉得 2 个点,我们协调一下就好。但如果差异很大,比如,你认为 2 个点,我认为 8 个点,那绝对是双方对任务的理解出现了巨大的差异,这个时候,我们就可以把刚才在脑中进行的任务分解“摆”到桌面上,看看差异在哪。

通常情况下,是双方对需求的理解出现了偏差,这时候负责用户故事编写的同事就要站出来,帮助大家澄清需求。所以,一般来说,估算的过程也是大家加深对需求理解的过程。

估算还有另外一个重要的作用:发现特别大的用户故事。一般而言,一个用户故事应该在一个迭代内完成。

比如,你预计大小为 1 点的用户故事要用 1 天完成,而你团队的迭代周期是两周,也就是10 个工作日,那 13 点的任务是无论如何都完不成的。那该怎么办呢?很简单,把它拆分成多个小任务,这样一来,每个小任务都可以在一个迭代中完成了。

所以,一般来说,用户故事有可能经过两次拆分。一次是由负责业务需求的同事,比如,产品经理,根据业务做一次拆分。另外一次就是在估算阶段发现过大的用户故事,就再拆分一次。

当我们有了一个合适的用户故事列表,接下来,我们就可以安排我们的开发计划了。只要厘清用户故事之间的依赖关系,安排工作是每一个团队都擅长的事情。

我在这里想回到我们开头讨论的话题。我们常说,需求来自产品经理,但需求到底是什么,这是一个很宽泛的话题。到这里,我们已经有了一个更清晰更可管理的需求,用户故事。这时候我们再说需求调整,调整的就不再是一个大主题,而是一个个具体的用户故事了。

许多团队真正的困境在于,在开发过程中缺少需求分解的环节。在这种情况下,需求的管理基本单位就是一个主题,既然是基本单位,那就是一个不可分割的整体。团队就被生生绑死在一个巨大的需求上,没有回旋的余地。

如果团队可以将需求分解,需求的基本单位就会缩小,每个人看到的就不再是“铁板”一块,才能更方便地进行调整,才会有比较大的腾挪空间。

总结

软件开发中,需求管理是非常重要的一环。在需求管理上常见的错误是,需求管理的粒度太大,很多团队几乎是在用一个大主题在管理需求,这就让需求调整的空间变得很小。

结合用户故事,我给你讲了一个好的需求管理基本单位是什么样子的,它要符合“INVEST原则”。其中的一个关键点是“小”,只有小的需求才方便管理和调整。

什么样的需求才算小呢?我给你介绍了一种需求估算的方式,每个团队都可以根据自己的特点决定在自己的团队里,多大的需求算大。大需求怎么办?只要再进行分解就好了。

告别理论劝退:用动画和Tanner图轻松理解QC-LDPC的译码原理(BP算法详解) 本文通过动画和Tanner图直观解析QC-LDPC码的BP译码原理,帮助读者轻松理解802.11ac协议中的编译码过程。文章详细展示了QC-LDPC的结构之美、BP算法的动态信息流动以及LLR的视觉化解读,并对比了硬判决算法的性能差异,为开发者和研究者提供了实用的可视化工具开发建议。 阅读详情

相关推荐

京东商品多维特征提取:基于时空大模型的实时库存预测接口设计

在电商行业,库存管理是供应链的核心环节之一。库存水平过高会导致资金占用、仓储成本增加,而库存水平过低则可能引发缺货风险,影响客户满意度和平台声誉。京东作为中国领先的电商平台,拥有海量的商品数据和复杂的业务场景,传统的库存预测方法难以应对市场动态变化和业务需求。时空大模型作为一种融合时间序列分析和空间特征提取的前沿技术,能够捕捉商品多维特征在时空维度上的变化规律,为实时库存预测提供更精准的决策依据。

FB13713612741的博客 954

如何解决甲乙双方需求理解巨大偏差的问题?

如何解决甲乙双方需求理解巨大偏差的问题?

CoCode888的博客 1331

海思MPP平台千兆以太网驱动集成与测试指南

千兆以太网(GE)是嵌入式视觉系统中音视频流传输与边缘控制的核心物理接口,其底层驱动需兼顾DMA高效调度、中断实时响应与PHY链路稳定性。在Linux嵌入式环境中,GE驱动通常基于net_device框架实现,并深度耦合于SoC专用媒体处理平台(如海思MPP),通过硬件抽象层(HAL)屏蔽寄存器操作,提供零拷贝、RGMII时序适配、描述符环管理等关键能力。技术价值体现在降低CPU负载、保障1080p@30fps实时推流、支持ONVIF/RTSP协议交互及固件远程升级。典型应用场景包括网络摄像机(IPC)、A

weixin_42599908的博客 89

我觉得 “砍需求” 是程序员最牛逼的本领

我觉个自己团队的例子,前段时间我们想统计下老鱼简历的数据,比如注册率和注册来源等,按照正常的方式,可能是需要开发统计分析的能力,我们开发同学也欣然接受了。所以理解需求、跟需求提出方保持统一是很重要的,之前我们团队的开发同学,在需求评审会上 “大放豪言”,产品经理说完需求,他就说:“这个简单!砍需求的前提是对需求有深刻的理解,这就包括理解需求的背景、需求的目标、分析需求的优先级、可行性、以及对用户和业务的影响等等。注意,砍需求不是砍产品经理,也不是单纯地 “拽” —— 劳资是大爷、劳资说不做就不做!

zznn0306的博客 948

IC618新手避坑指南:从零在Linux上配置Cadence Virtuoso环境(含cds.lib文件详解)

本文详细介绍了在Linux系统上配置Cadence Virtuoso IC618环境的完整指南,特别针对新手常见问题提供解决方案。重点解析了cds.lib文件的关键配置,包括库路径定义和工艺库管理,并分享了高效工作流设置和典型问题排查技巧,帮助工程师快速搭建稳定的EDA设计环境。

weixin_26805597的博客 553

立创开源:基于AD831/ADF4351的250-500MHz宽频调幅信号处理实验电路设计与实现

本文详细解析了基于AD831混频器和ADF4351本振源的250-500MHz宽频调幅信号处理实验电路的设计与实现。文章从项目需求出发,系统讲解了超外差接收架构、核心模块(包括射频前端、混频器、本振源、AGC环路及解调电路)的选型与原理,并提供了实战调试波形与性能验证,为射频电路学习者提供了从理论到实践的完整指南。

weixin_35706255的博客 227

程序员和需求分析

需求分析因业务需要    需求分析是指理解用户需求,就软件功能与客户达成一致,估计软件风险和评估项目代价,最终形成开发计划的一个复杂过程。(这个和我在微软体验到的又不太一样,微软的需求分析大多是市场人员和用户协助小组的人去评估用户的接受程度,这一点也可以理解,因为公司的性质有根本差别)在这个过程中,用户的确是处在主导地位,需求分析工程师和项目经理要负责整理用户需求,为之后的软件设计打下基础。需求分

被啃de萝卜 2998

从自然语言到PCB设计:DeepSeek与Altium协同自动化实战指南

摘要:在电子设计领域,将自然语言需求转化为PCB设计图是实现自动化设计的重要目标。受限于当前NLP和EDA技术,通过DeepSeek直接生成完整PCB设计图尚无法实现,但在设计辅助环节已展现实用价值。本文深入分析技术可行性,提出"自然语言→设计约束→脚本生成→人工验证"的人机协同工作流。通过28个完整代码示例、12张技术图表及5个工程案例,详细展示DeepSeek解析需求、生成设计约束,并结合Altium Designer API实现元件放置、规则设置、DRC校验的全流程。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1764

为什么软件开发周期总是预估的2-3倍

我审慎思考并总结了一下。开发环境与过程会极大的影响进度。计划赶不上变化,就算制定了规范的计划书,但是有时候实际问题还是会超乎我们的想象力与能力。不同需求理解有差异,用户表达的和程序员理解的不一样,出现偏差。软件开发的思维模式不能像数学一样简单的计算,软件开发过程没有公式可以套,不是按照一定的步骤就能得到想要的结果。总之,慢慢开发吧。 ...

qq_58960421的博客 164

加速访问Cloudflare的网站的解决方案

本文主要介绍了加速访问Cloudflare的网站的解决方案,希望能对大家有所帮助。通过软件计算得到最快的IP地址的效果图如下图所示,具体解决方案参考下文。 在这里插入图片描述 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

获取抖音中x-secsdk-csrf-token的方法

获取抖音中x-secsdk-csrf-token的方法

sh_moranliunian的博客 2019

17 程序员也可以“砍”需求吗?

摘要: 需求管理的关键在于精细分解。将大主题拆分为小颗粒度的用户故事(遵循INVEST原则:独立、可协商、有价值、可估算、小、可测试),能提升管理灵活性。通过团队估算(如费波纳契数列)可识别过大的需求,进一步拆分以确保迭代完成。核心观点:需求越小越易调整,分解是解决开发资源紧张、优先级冲突的基础。建议阅读Mike Cohn的书籍深化理解,并反思团队当前需求管理的痛点。

AatZai的博客 643

Unitree G1仿人机器人协同搬箱:从仿真搭建到多机协同部署完整指南

Unitree G1仿人机器人协同搬箱技术方案摘要 本文提供了一套完整的Unitree G1人形机器人协同搬箱解决方案,涵盖从仿真环境搭建到多机协同部署的全流程。核心内容包括: 双仿真环境配置:同时搭建Gazebo+ROS Noetic基础仿真环境与Isaac Gym+Mujoco高性能RL训练环境,支持Sim2Sim迁移验证 训练框架搭建:详细配置unitree_rl_gym框架,提供PPO算法定制化训练流程和参数优化方案 数据集应用:整合宇树开源真机数据集(UnifoLM-WBT-Dataset)~~~

huanghm88的专栏 472

17 | 程序员也可以“砍”需求吗?

软件开发中,需求管理是非常重要的一环。在需求管理上常见的错误是,需求管理的粒度太大,很多团队几乎是在用一个大主题在管理需求,这就让需求调整的空间变得很小。结合用户故事,我给你讲了一个好的需求管理基本单位是什么样子的,它要符合“INVEST 原则”。其中的一个关键点是“小”,只有小的需求才方便管理和调整。什么样的需求才算小呢?给你介绍了一种需求估算的方式,每个团队都可以根据自己的特点决定在自己的团队里,多大的需求算大。大需求怎么办?只要再进行分解就好了。

qq_37756660的博客 890

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

程序员必备技能-科学砍需求

作为码农在电商圈、O2O、互金行业和产品需求纠缠了多年,做过一些好的产品需求,也做过很多失败的产品需求,好的产品需求即使不成也未尝不是一种探索尝试,结果应该是让人有所收获的。好的产品逻辑清晰,产品价值明确,有效的解决了一部分问题,经的起团队各方的挑战。反之产品经理需求没想好,边界条件没想清楚,最后需求被砍,不光程序员时间白白浪费,配套的设...

weixin_34358092的博客 328

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

在家办公的我,砍需求砍得更狠了

△Hollis, 一个对Coding有着独特追求的人△这是Hollis的第251篇原创分享作者 l Hollis来源 l Hollis(ID:hollischuang)最近全民开始了在...

HollisChuang's Blog 1591

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

程序员的“非程序员”之路

20多年前我就开始写代码,很喜欢写代码,直到现在为止仍然热度不减!人生总是会和你开点小玩笑,我在多年之前走上了”非程序员“之路。我觉得无论你将来是否继续走技术路线,你的程序员经历将为你打下雄厚的基础。本文为你分享我的一些心得,分享一些程序员也应该掌握的”非程序员“技能,希望对你有帮助。

张传波(网名:Fireball,大大大火球) 7271

“主动程序员”与“被动程序员”

我觉得这个世界上的程序员 可以分为两种:"主动程序员"和"被动程序员"。"主动程序员"可以自己选择开发方式,开发语言和框架,"被动程序员"被动接受公司指定的语言和开发方 式。其实在现实生活中,这种分类并不绝对,一个程序员可能在不同的时候担当不同的角色,"被动程序员"也可能享有有限的主动权。这么分类并不以程序员本身 的知名度,财富多少,是否自己创业还是受雇于人有关。  David Heineme

游戏编程兔子 8924

惹毛程序员的十件事!需求变更居然不是排第一

本文转载自 程序员编程社区 如何惹毛一名开发者? 再好脾气的程序员,总能被下面一条逼疯,你中了几条呢? 第十位 程序注释 程序注释本来是一些比较好的习惯,当程序员老手带新手的时候,总是会告诉新手,一定要写程序注释。于是,新手们当然会听从老手的吩咐。只不过,他们可能对程序注释有些误解,于是,我们经常在程序中看到一些如下的注释: 每当看到这样的注释——只注释是什么,而不注释为什么,相信你一定会被惹火,这是谁写的程序注释啊?不找来骂一顿看来是不会解气了。程序注释应该是告诉别人你的意图和想法,而不是告

m0_46163918的博客 6620

程序员如何做"好"需求判断?

1. 导语本文作为2024上半年核心思考之二。通过他人经验传导、个人实践、广泛阅读书籍(方法论类、企业经营类、传记类、财务类,具体书单附文末),学会基于更高阶的经营者视角来做好业务需求判断。本文思路如下:首先,抛一个灵魂问题让大家思考: 你评估过自己负责的项目做的好不好吗?接着,带着问题看解决思路2. 引人深思的问题正在看本文的你:评估过自己负责的项目做的好不好吗?可能大多数人的答案是「按时、按质...

TIGERB的技术博客 865

程序员的需求分析

作为一个开发人员,怎样一步步地做好应用的需求定位和分析,这是很重要的 。一个好的需求定位和明确的分析,可以让你在之后的工作,事半功倍,让系统的功能和可用性得到很大的提高。 ###第一步、收集需求 ####如何收集需求? 1、对于用户进行有针对性的访谈(因为我们需要了解和明白核心需求,后期的业务会主要围绕这些部分进行开展) 2、对于内部需求的收集,需要内部人员提供需求使你明确需求提出的目的,并提供解...

qq_37837407的博客 4685
上一篇: 漫谈粗放与精益:编程的两种思路与方式
下一篇: 阿里架构师剖析程序运行原理,程序是如何运行又是如何崩溃的?
Java_Cappuccino
博客等级 码龄7年 17粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值