每一个软件都不是完美的,因为软件是由那些珍惜时间的人或团队编写创造的。

作者 | Steven Popovich

译者 | 明明如月,责编 | 郭芮

出品 | CSDN(ID:CSDNnews)

以下为译文:

你曾经放弃过一个功能吗?

或者你有没有经历过尝试做一些新的东西,但是后来发现工作量太大,然后放弃转而做了其他的事情呢?

或者说,你是否曾经尝试修复一个 bug,但是发现它只影响少数用户并且难以复现,而忽略它呢?

你怎么可能让你的代码中留下一个已知的错误?为什么要故意发布不完整的代码?

那么,完成这个功能需要花多少时间呢?修复这个 bug 对你的公司来说值多少钱呢?

每一个软件都不是完美的,因为软件是由那些珍惜时间的人或团队编写创造的

我的一位经理曾经给我讲过一个添加一个手势动作的功能的故事。很多用户不断地要求提供这个功能,最终我们尝试实现它。

我们把它交给了一个初级开发人员,一两天后,他不知道怎么做。然后我们把它交给了另一个开发者,让他们一起干。但是,他们仍然不知道如何去做。

这种情况又发生了三次。我们把它交给了五个开发人员,干了几周最终还是“流产”了——我们在这上面浪费了大量的时间。

假设每个开发人员花了 6 个小时在这上面。5 x 6= 30 小时。假设开发人员的平均时薪是每小时 43 美元,43 x 30 = $1290。那最终,他们花了一千多美元试图实现最终没有成功投入生产的功能。

也许你几乎开发完了所有的 UI 功能,但是设计师想搞点特色。假设你被要求实现一个应用程序内的 web 浏览器。iOS上 Swift 的开箱即用解决方案看起来是这样的:

IOSCreator.com 教程中的一张示例图

注意顶部和底部周围的按钮,这些都是免费的,可以通过 URL 和几行代码就可以创建整个视图。

然而,如果设计师希望调整按钮的位置,或者减少一些按钮,或者可以为按钮设置不同的颜色。突然之间,几行代码就变成了一个为期两周的项目,在这个项目中,你需要创建一个自定义视图,为按钮创建所有你自己的逻辑,并为整个屏幕设计样式——你可以在脑子里计算这笔费用。

我们最近遇到了一个 bug,当一些用户的应用程序在应用程序中执行某个操作时,该 bug 导致程序崩溃。我们的应用程序监控工具显示:只有不到 100 个用户 (我们有数百万用户) 看到了崩溃。堆栈跟踪的级别都非常低,且非常混乱和冗长。我们不确定是什么导致了系统崩溃,我们只知道这和用户设备上的数据库有关,而我们无法复现这个问题,但我们相信卸载和重新安装应用程序很可能会修复这个漏洞。

你害怕了吗?大多数的 bug 在可复现时都很容易修复。当缺陷影响的用户比例较大时,它们的优先级就会快速上升。这个 bug 越不容易复现那么影响的用户比例就越小。修复这个 bug 的成本是无法计算的,但是修复它的价值却最小。

软件的成本效益是一个复杂的方程式。

如果那个定制的网页浏览器对你的产品经理来说是值得的呢?或者这个手势的价值超过了1000美元呢?一个现有的手势功能能够给用户带来的价值是什么?对于用户来说,一个漂亮的、可以自定义的网络设置有什么价值呢?

也许你工作的公司不会让任何用户的应用程序崩溃,你根本不会遇到上述 bug。也许你在飞机上工作或者为医疗设备编写软件,你的软件不会崩溃。那么,修复漏洞的价值就取决于它对整个公司的价值(希望这个漏洞是可以修复的)。

这就是产品经理存在的原因。但开发人员也必须参与其中,我们就是那些做功能评估的人,也是那些有时不得不说“这就是做不到”的人。

我们还必须说,“做这个需求比你想象的时间要长”。设计师和产品工程师在设计功能的时候都会考虑功能的大小。他们要求改变,并且知道成本或者需要多少时间。但他们不是开发人员,软件的变更带来的工作量变化很难估计!

以 web 浏览器为例:设计师可能想要改变按钮的颜色。他以前就被要求改过按钮的颜色,和这次改动非常相似,所以他认为这次改起来也会很快。但你知道事实并非如此。当你接到要更改按钮的任务时,作为开发人员,你的工作就是反馈这个改动将花费更多的时间。

大多数时候,完美的东西是不值得的

如果你来问我,我永远不会花时间去做一个自定义的 web 功能;我可能会在找第三个开发者开发手势功能的时候就停止;我甚至不会把崩溃归档到待办中。因为这么做投入产出比太低, 但如果你的软件能为你的用户提供价值,就没问题。

所以说,你的软件不一定要完美

原文:https://codeburst.io/your-app-doesnt-have-to-be-perfect-63d7bf13fec7

译者:明明如月,知名互联网公司 Java 高级开发工程师,CSDN 博客专家。

本文为CSDN翻译文章,转载请注明出处。

【END】

更多精彩推荐

拿下 Gartner 容器产品第一,阿里云打赢云原生关键一战!

腾讯面试官这样问我二叉树,我刚好都会 | 原力计划

☞斩获GitHub 2000+ Star,阿里云开源的 Alink 机器学习平台如何跑赢双11数据“博弈”?| AI 技术生态论

☞微软为一人收购一公司?破解索尼程序、写黑客小说,看他彪悍的程序人生!

机器学习项目模板:ML项目的6个基本步骤

☞IBM、微软、苹果、谷歌、三星……这些区块链中的科技巨头原来已经做了这么多事!

资深程序员总结:分析Linux进程的6个方法,我全都告诉你

今日福利:评论区留言入选,可获得价值299元的「2020 AI开发者万人大会」在线直播门票一张。  快来动动手指,写下你想说的话吧。

点击阅读原文,精彩继续!

你点的每个“在看”,我都认真当成了喜欢

你根本不需要去追求“完美”的软件!相关推荐

  1. selinux会阻碍挂载嘛_为什么追求完美可能会阻碍您成为新手Web开发人员

    selinux会阻碍挂载嘛 by Rick West 由里克·韦斯特(Rick West) 为什么追求完美可能会阻碍您成为新手Web开发人员 (Why striving for perfection ...

  2. 追求卓越追求完美规范学习_追求新的黄金比例

    追求卓越追求完美规范学习 The golden ratio is originally a mathematical term. But art, architecture, and design a ...

  3. 自我思辨的力量-追求完美的内心驱动

    这些年很多朋友通过邮件等方式与我交流,希望了解到一些学习和成长的方法.我认为对于每一个人在不同的阶段成长方法是不同的,而成长这种事情与每个人阅历和性格有很大的关系,不太好一概而论,我抛一个在我认知范围 ...

  4. 世上不可能有真正的完美,但应该有一个追求完美的心态

    世上不可能有真正的完美,但应该有一个追求完美的心态,并将其作为工作习惯. 目前,很多企业虽然有远大的目标,但在具体实施时,由于缺乏对完美的执着追求,事事以为"差不多"便可,结果是: ...

  5. Done is better than perfect——不要过分追求完美,即刻开始就是最好的开始

    "Done is better than perfect"的意思是"比完美更重要的是完成". 习惯于给自己订立非常高的标准,追求完美,最好的结果是心生挫败感,最 ...

  6. 辍学的名人_我辍学去追求成为网络开发人员和设计师的梦想

    辍学的名人 by Carlos Sz 由Carlos Sz 我辍学去追求成为网络开发人员和设计师的梦想 (I dropped out of college to pursue my dreams of ...

  7. 网名接龙--之追求完美

    上接: 网名接龙之--引路人      正想了解什么是网名接龙,想知道为什么搞这玩意,却被无故地委托重任,受宠若惊!虽然让我写文章是挺头痛的,但从另外一个角度想,既可以提高文笔水平,又可以向大家讨论技 ...

  8. 一个成功的男人如何去追求身边的女人

    真正的爱情,只有在平等的条件下产生. 去追一个对你没感觉的女人,只会让她很烦,如果她碰巧很漂亮,有很多像你一样或者比你优秀的男人去追,那你一定不会有机会;即便上天给你了一个千载难逢的机会,并且还让你抓 ...

  9. 让我们一起奔跑,去追求卓越而不是平庸一生!

    作者按:这是我2017年6月涛思数据刚成立时写的文章,已经两年多.今天重发这篇文章以自勉,提醒自己,提醒团队,不忘初心,而且希望各位朋友与众多的开发者们做涛思数据成长的见证人.继续奔跑吧,伙伴们! 亲 ...

最新文章

  1. shell中的数值判断
  2. 通信系统中对眼图的理解(二)
  3. 软件工程实践2017第二次作业
  4. php判断有没有分页,php分页怎么判断已经到了最后一页?
  5. lettuce webdriver 自动化测试---玩转BDD
  6. How to check if one event is cancel event - #Exit#
  7. SAP UI5 fullScreenPageRoutes in Component.js
  8. Flutter for Web 详细预研
  9. EasyUI可编辑列
  10. rust能捏人不_吃鸡:捏脸系统上线后,玩家们都嗨了
  11. 移动测试基础 android 中 dumpsys 命令使用
  12. 44. 扑克牌的顺子(C++版本)
  13. linux读取.data文件,Android获取文件夹路径 /data/data/
  14. H264视频解码器C++工程说明
  15. 比特精灵是计算机病毒吗,[病毒防治]靠,我居然也中木马?
  16. linux中脚本都是.sh吗,Linux跑脚本用sh和./有什么区别?
  17. 软件测试-黑盒测试方法(二)---正交实验法、场景图、错误推测法
  18. 用php的定界符EOT需要注意的地方
  19. NTL密码算法开源库——大整数ZZ类(一)
  20. php 搜索引擎 分词_PHP使用elasticsearch搜索安装及分词方法

热门文章

  1. linux下项目开发加载动态库:ldconfig与 /etc/ld.so.conf
  2. property练习
  3. TableViewCell,TableView,UITableViewCell
  4. ASP.NET通过OLE DB操作Excel
  5. Kernel panic - not syncing:Attempted to kill...
  6. [位运算|状态压缩] leetcode 78 子集
  7. totolink 虚拟服务器,TOTOLINK无线中继设置教程(图文)
  8. 矩池云上TensorBoard/TensorBoardX配置说明
  9. mysql 计算时区差_在MySQL中计算时区的偏移量
  10. 【图像处理】空间滤波、中值滤波(Spatial Filtering and Median Filtering)