当前位置: 首页 > news >正文

软件开发中的抓大放小vs极致细节思维

在这里插入图片描述

  最近在开发过程中,遇到了好多次 “这个需求点这次要不要做?” 的问题, 主要有两方阵营,比如以研发主导的 “这次先不做、等必要的时候再做” ,另外一方是以PM主导的 “这个不做需求不完整,可能影响用户体验” 。争议主要出现在一些小需求或者细节点上,一般不是啥核心功能,比如一些鸡肋需求或者有些极端异常case的处理。 前者的主要观点是“这个需求不重要可能会浪费时间,有哪些时间还不如做一些更重要的事”,后者的主要观点是“这个点虽然不是核心功能,但没有的话可能让用户决定我们产品有缺陷。” 如果遇到的两方脾气不好,甚至可能闹到剑拔弩张的情况。

  这两种不同的观点其实就是我标题上说的两种不同思维模式导致的,前者的思维模式更偏向于 “抓大放小,优先解决主要矛盾”,而后者的思维模式就是“细节决定成败,不放过一个问题”。不同的人在这两种思维模式上有不同的倾向,就是孰对孰错、孰优孰劣。这仿佛是个无解的哲学问题,下面我给出我对这个问题的答案,仅仅是一份我自己的观点,大家也可以在评论区探讨下。

  首先,我作为研发,大部分情况下的决策都是“不做”,因为做了会显著增加我的工作量,软件开发过程中也存在二八定律,80%的功能只占开发时间的20%,而剩余20%的功能需要额外投入80%工作量。剩下20%的功能ROI是极低的,这是我的第一个理由。 其次,很多需要点和细节点只是别人的假设,并不一定代表真实的场景,大部分情况下这个需求点是伪需求,直接拒绝可以有效避免研发人力的浪费。

  我们举个我所遇到的例子。我们公司的业务建立在某云之上,如果该云厂商宕机我们业务一定会挂,这显然从业务上讲这是不可容忍的,如果你去问老板,你希望自己的产品稳定性是多少,他一定会回答是100%。有一定技术经验的人都知道100%的稳定性是不可能达到的,我们只能无限趋近于100%。 摆脱单云依赖,我们唯一的选择就是要支持多云备份,然而这个成本巨高,可能需要我们全部技术吭哧吭哧改造几个月来完成,这对于一个以业务快速发展的团队来说也是不可接受的。在这件事上,我们都选择了坦然接受云厂商可能宕机的风险,选择抓大(业务发展)放小(极致的稳定性),

  再举一个决策完全相反的例子。我在入职阿里参加新员工培训的时候,听老员工将讲到了阿里曾经的去IOE项目,就是要在阿里巴巴的IT架构中,去掉IBM的小型机、Oracle数据库、EMC存储设备。其中我印象比较深的就是他讲到支付宝替换Oracle数据库过程中,他们投入了巨大的成本做数据稳定性一致性的验证,因为金融级别的数据就是要求100%的准确性,这种情况下就是追求极致的思维模式。

  可能有些同学也看出来以上两个案例决策结果不一致的原因。表面看是业务场景的不同,虽然我在案例一中没有具体介绍我们的场景,但大家也能看出来我们是可以接受不可用风险的,而且云厂商宕机其实算是小概率事件(虽然前两天阿里云就出事了),短暂出问题后我们的损失远小于投入人力建设多云备份的能力的。而反观支付宝替换Oracle数据库的事,他们处理的是金融相关的数据,也就是和钱相关的数据,比如给你少算一分钱,这不仅仅是一分钱的问题,而是信任的问题,一旦出问题公司可能就黄了,所以他们出问题的成本是非常高的。 虽然这两个场景得出了不一样的决策,但其背后都遵循同一个原则,就是投入产出比最大化,大白话就是在同样的收益下成本最小或者在同样的成本下收益最大。

  投入产出比最大化 这个思路相信正常人都是认同的,那为什么同样一件事不同的角色在抓大放小和极致细节之间选择不同的思维方式? 答案就是不同的人对收益和投入的评估结果是不一样的,有些时候做一件事投入的成本和预期收益是很难量化的,大家只能凭借自己的经验和感受做一个简单的评估,这个时候每个人评估的结果可能就会出现差异。我举一些观察到的现象(不一定完全准确)

  • PM倾向于高估收益低估成本
  • 研发倾向于低估收益
  • QA倾向于高估风险
  • 管理层和PM一样容易高估收益低估成本
  • 不了解技术的人容易低估技术成本
  • 乐观的人任意高估收益,悲观者容易高估风险
  • 容易替别人低估成本,替自己高估成本
  • 如果最近出过严重问题,容易高估风险
  • ……

  有些是角色使然、有些是性格使然、还有些是环境使然,这些都很难控制,只能多沟通、建立规范、多尝试,各方在软件开发过程中,可以参考下这些建议,希望可以尽可能减少在成本和收益上的认知偏差。

  1. 在评估收益时,我们应该考虑功能对用户和业务的实际价值,而不仅仅是满足用户的要求。很多用户需求可能只是“好奇心”或者“完美主义”,真正使用时作用不大。我们需要区分核心价值和边际价值。
  2. 评估成本时,不要只看短期投入,还要考虑带来的长期维护成本。一个小功能可能需要持续Debug、完善、升级,总成本远超初期开发。
  3. 沟通时,各方应摒弃主观偏见,不能因为立场不同就互不信任。研发应直面PM的质疑,而PM也应理解技术难点。管理层要站在全局角度平衡各方诉求。
  4. 可以建立一套清晰的规范,说明不同类型需求的优先级原则、成本评估模型等,减少鸡肋需求的争议。并且可根据实际情况不断完善这套规范。
  5. 在可行范围内,应该允许小规模试错,因为很多收益和成本在实际开发前难以准确预测。通过最小可行产品快速验证idea,再决定下一步优化方向。

  软件开发过程中的抓大放小和极致细节两种思维模式并没有明显的对错之分,至于不同的人选择不同的思维模式,源自于不同角色对收益和成本的认知偏差。但我认为在软件开发的不同阶段中,有着适合的不同思维模式,所以还是需要有倾向性的。 比如在软件开发初期或者资源有限的情况下,可以更倾向于抓大放小。但在软件稳定期更应倾向于极致细节。 当然如果遵循投入产出比最大的原则,一切都是可以自然而然改变的。比如在软件发展的过程中,有些功能初期不重要,但后期可能会变的很重要。所以还需保持开放和灵活的心态,根据不断变化的实际情况调整开发策略和优先级。

相关文章:

软件开发中的抓大放小vs极致细节思维

最近在开发过程中,遇到了好多次 “这个需求点这次要不要做?” 的问题, 主要有两方阵营,比如以研发主导的 “这次先不做、等必要的时候再做” ,另外一方是以PM主导的 “这个不做需求不完整,可能影响用户体验…...

java文件上传以及使用阿里云OSS

JavaWeb 文件上传本地存储阿里云OSS配置文件 yml配置文件 文件上传 前端页面三要素: 表单项type“file” 表单提交方式post 表单的enctype属性multipart/form-data 本地存储 保证上传的文件不重复 //获取原始文件名String originalFilename image.getOriginalFi…...

相关性分析和作图

相关的类型 1. Pearson、Spearman和Kendall相关 Pearson 积差相关系数衡量了两个定量变量之间的线性相关程度。(连续) Spearman等级相关系数则衡量分级定序变量之间的相关程度。(分类) Kendall’s Tau 相关系数也是一种非参数的…...

AlphaFold的原理及解读

1、背景 蛋白质是生物体内一类重要的生物大分子,其结构复杂多样,蛋白质的结构对于理解其功能和参与的生物学过程具有重要意义。从生物学角度上看,蛋白质的结构可以分为四个层次:初级结构、二级结构、三级结构和四级结构。 初级结…...

【ChatGLM3-6B】Docker下快速部署

【ChatGLM2-6B】小白入门及Docker下部署 前提下载安装包网盘地址 开始安装加载镜像启动镜像进入容器启动模型交互页面访问页面地址 前提 安装好了docker安装好了NVIDIA显卡16G 下载安装包 网盘地址 ​ 这里因为网盘上传文件有大小限制,所以使用了分卷压缩的方式…...

两部手机数据传输后备忘录不见了怎么回事

想必很多人都遇到过,当两部手机进行备忘录数据传输后,突然发现备忘录不见了,这让人不禁着急上火,我也曾经遇到过这种事情导致很多重要的内容都丢失了。 一般出现这种情况可能是因为,两部手机使用的是不同的云服务&…...

【Unity入门】LayerMask小结

LayerMask常用的几种方法 LayerMask.GetMask 根据 层名称 获取其层遮罩值 遮罩值 2^层索引 假设 UserLayerA 和 UserLayerB 是第十层和第十一层。 这两个层会具有 User Layer 值 10 和 11。若要获取其层遮罩值, 可以将其名称传入 GetMask。参数可以是 其名称的列…...

mysql按年、季度、月,统计

以下是按年、按季度和按月统计SQL查询语句: 按年统计: SELECTds.checker,YEAR(ds.create_time) AS settleYear,SUM(ds.quantity) AS quantity,SUM(ds.approval_price) AS approvalPrice FROMdata_settle ds WHEREds.delete_flag 0AND ds.approval_sta…...

Python的换行和转义:深入理解代码排版与字符串处理

更多Python学习内容:ipengtao.com 大家好,我是涛哥,今天为大家分享 Python的换行和转义:深入理解代码排版与字符串处理,全文2700字,阅读大约8分钟。 在Python编程中,正确使用换行和转义字符是保…...

dart多线程双向通信的案例----【小学4年级课程】

下面是运行后的打印顺序 I/flutter (20170): 上班 I/flutter (20170): 这里是校长室:main I/flutter (20170): 这里是饭堂:fantang1 I/flutter (20170): 这里是收发室--检查小孩发回去给他妈妈的信息是:我是秘书的儿子,我来到在校长室了。校长今晚想吃羊…...

每日一练:简易计算器

1. 题目 设计实现一个简易的计算器,可以进行加减乘除的计算。可以考虑通过GUI和命令行输入等方式实现。 2. 设计思路 创建一个简单的用户界面,可以使用 Python 的 Tkinter模块。在界面上放置按钮,每个按钮代表一个数字、运算符或其他功能。…...

Jmeter和Testlink自动化测试框架研究与实施

摘 要 目前基于Jmeter的接口自动化测试框架,大多只实现脚本维护和自动调度,无法与Testlink进行互通,实现测试方案与自动化实施流程连接,本文基于Testlink、Jmeter、Jenkins实现:通过Testlink统一维护接口自动化测试用…...

MethodArgumentNotValidException 与 ConstraintViolationException

MethodArgumentNotValidException 和ConstraintViolationException 都是用于处理参数校验异常的异常类,但它们在不同的上下文中使用。 1. MethodArgumentNotValidException: - MethodArgumentNotValidException 是在 Spring MVC 或 Spring Boot 中处…...

【数学】旋转矩阵

参考链接 OpenGL from OpenGL.GL import * from OpenGL.GLUT import * from math import * import numpy as np def draw_axes():glClear(GL_COLOR_BUFFER_BIT)# 绘制坐标轴glColor3f(1.0, 1.0, 1.0) # 设置坐标轴颜色为白色glBegin(GL_LINES)glVertex2f(-1.0, 0.0) # x 轴g…...

Python与设计模式--中介者模式

23种计模式之 前言 (5)单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、(11)策略模式、责任链模式、命令模式、中介者模…...

后台管理系统开源项目

最近项目没有什么事做,就自己整理,修改了一些vue2,react的后台管理系统项目,方便以后有需要可以直接提取,当然也方便了大家 vue2技术栈 lyl-vueProjectAdmin: vue2后台管理系统 react技术栈 lyl-reactAdminProject:…...

电子印章管理系统:是什么、3个平台推荐

说到印章,相信看过近现代电视剧的人都见过,一般在订立合约时最常用到,双方在合约上加盖印鉴,即代表着合约的成立。 我小时候还见过我父亲的印章,只是随着时代的发展,印章因为不易携带,容易被盗…...

现货黄金区间交易的两个要点

在现货黄金市场中,我们常碰到横盘区间行情。有区间,就终究会出现突破,因为金价不可能缺乏方向而一直在区间内运行。那既然要突破,我们又应当如何应对和交易呢?下面我们就来讨论一下。 切忌在突破发生时马上跟随突破方向…...

安卓底部导航栏BottomNavigationView

目录 1. BottomNavigationView (1) 准备BottomNavigationView使用的菜单资源文件 (2) 准备颜色选择器 (3) BottomNavigationView控件设置 (4) 在Java代码中设置OnItemSelectedListener监听器 (5) 与Fragment配合 2. BottomTabBar 实现安卓底部导航栏,google为…...

rust每日一库 rand 生成随机数

文章目录 生成随机值生成随机数生成范围内随机数生成自定义类型随机值从一组字母数字字符创建随机密码从一组用户定义字符创建随机密码 总结 生成随机值 rust中官方并没有像以他语言一样,rust并没有官方并没有提供生成随机数的工具,所以我们要借助rand包…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线, n r n_r nr​ 根接收天线的 MIMO 系…...

深度学习习题2

1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下&#xf…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...

Android屏幕刷新率与FPS(Frames Per Second) 120hz

Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms 90Hz 屏幕:每秒刷新 90 次,…...