解决它们有趣的事实并不意味着有人需要它们
“一群人在笔记本电脑和一张纸上集思广益,” Unspalsh的Stefan Stefanchik 摄导致劣质软件产生的因素有很多:工具的选择,团队沟通,开发人员对成功的不满,测试方法。 在我看来,所有这一切都具有根本原因:这些都是想象中的问题。
如此复杂或无法运行的软件并非如此。 它只是为其他目的设计的,而不是针对实际任务的。
假设您发布了播客,并且需要一个网站,您可以在其中出售相关产品,通过广告赚钱,最重要的是,发布播客,视频和博客。
这个小型Web应用程序的要求可能看起来像这样:
- 实时播客广播,快速下载至北美
- 99.99%的用户在前15分钟内没有出现故障,最好完全没有故障
- 与Google Adwords以及其他第三方广告系统的良好集成(如果您有时间的话)
- 动态链接到商店中的最新产品,并在可能的情况下根据查看的页面向用户提供建议。
- 与Facebook Live Player集成。 如果您可以轻松地在没有Facebook的情况下提供其他流媒体解决方案,那就更好了
您将这些规格提供给承包商团队,并与他们进行一些交谈。 一切似乎都在相同的波长上。 但是当他们在两个月内展示出原型时,您的脸上充满了鲜血。 您在一块垃圾上花费了1.5万美元-想要取回您的钱。
首次打开时,应用程序冻结。 您问如何选择标语的类型-并向您显示一个难看的,难以理解的UI。 商店中与商品链接的一半断开或没有图像,并且通过Facebook进行的实时广播出现滞后!
但是开发团队无法理解您的愤怒。 实际上,从他们的观点来看,他们设法完成了非常艰巨的工作。
他们全心投入到应用程序的创建中,它具有惊人的功能:
- 最先进的推荐系统
- 所有音频流的实时文本解密算法
- 全球首页加载速度超过200毫秒
- 除非您要依赖Facebook Live,否则流协议和客户端几乎是从零开始的
- 已经开发了一种服务,可以轻松集成超过20个广告交易平台
问题是,您要求具有多个附加功能的基本产品,但前提是它们的实施非常简单。 开发团队对此有不同的理解。 他们听到了一些激动人心的工作要做……以及许多无聊的基本功能,这些功能并没有引起足够的重视和严格的测试。
更糟糕的是,您没有直接与开发人员进行交流-您是通过损坏的电话通话的。 您与与一些中层经理举行会议的销售人员交谈。 他们为项目经理写了一些业务规范,然后由他们编写了技术规范,然后将其交给团队负责人或架构师,他和他的团队开始开发产品。 每个链接在此过程中都会引入失真。
想象中的问题通常比真正的问题更有趣。 智力过剩的人玩竞争性游戏,发明并解决数学问题,写书来回答有关人性的抽象问题-所有这些都是免费的,只是为了娱乐。 但是,一个普通的程序员可能会向您收取创建一个简单的Android应用程序的巨额费用。 这不是因为平庸的程序员比天才更难找到,而是因为前者很有趣,而后者却很无聊。
大多数程序员都希望同时获得报酬和乐趣。 当然,“有趣”的定义对于每个人都是不同的,但是对于许多工程师而言,它归结为解决可解决性领域中有趣且复杂的问题。
给一个聪明的人太多无聊的任务,这些任务无法自动化,最终将使他发疯。 然而,经过数十亿年的进化,人类的大脑在保持理性方面变得很有创造力。 就像儿童被剥夺或虐待的受害者在科幻小说中找到救赎一样,公司程序设计的受害者和自由职业者也在解决想象中的问题时寻求救助。

软件工程师可以为自己创建的想象中的问题的数量取决于他的想象力以及需要解决的实际问题的复杂性。
应该注意的是,这个问题并不是开发人员所独有的。 管理,销售,人事,支持,法律甚至会计部门-都有自己独特的方式来解决想象中的问题。 当他们出席会议只是形式上的手续或根本不需要参加会议时,有些人会尝试进入决策过程。 其他人则高估了与其角色相关的次要问题,或者雇用了过多的员工以证明其重要性。
当问题过于愚蠢时,聪明的人会找到纠正这种情况的方法。
但是,想象中的问题不仅来自无聊的开发人员。 它们也是由长期的通讯链造成的。
当我开始以自由职业者的身份寻找客户时,我无法自行决定建立沟通渠道。 因此,我不得不处理带有数百个字母的长邮件线程,其中讨论了内部MVP的次要细节。 人们在一周中更改了项目中的所有要求。 我有一些客户问过这样的问题:“它将与ICO兼容吗?” 或“我可以在这里添加一些AI吗?”
当然,大多数客户都有足够的经验,但是即使他们经常也缺乏制定或构建某些要求的知识。 这很正常,因为我作为“计算机技术员”的工作之一是根据人们的具体情况帮助人们了解他们在做什么和不需要什么。 但是,要确定您和客户之间何时有多个垫圈要困难得多。
需求变更是因为有人误解了意图,或者试图应对上述无聊
大多数公司都喜欢成立一个销售人员来骚扰潜在客户,进行交易并大致描述该产品。 还有一些
具有高级沟通技巧的专家可以与客户讨论更详细的规格和要求:这通常是同一位销售人员,但职位不同。 并且有一个内部公司系统,不同级别的管理以及技术团队中的某些层次结构。
当客户的需求清单经过很多人时,即使这些人有最好的意图,在此过程中也不可避免地会损失一些东西。 有时会发生这种情况,因为原始要求没有意义或需要更改。 也许卖方对客户说:“仅用39,999,我们就会从上方在区块链上进行交易。” 他同意了,但其他所有人都必须猜测在区块链上做什么意味着什么。
多数情况下,需求变更是因为有人误解了意图,或者是试图应对前述的无聊,试图使他们的工作或团队的工作更有趣和令人印象深刻。
在所有这些背后,最初的要求丢失了-需要解决的实际问题。 它们被想象中的问题和虚空所取代,并且您有很多人准备好并愿意用他们的想象中的问题来填充这些虚空,因为他们需要解决的真正问题很无聊,而填补这些虚空会使他们感到满意。
过于复杂和自然选择
通常,出现虚构问题的原因比较黑暗:此类问题有助于团队或公司发展,甚至可以成为其工作不可或缺的一部分。
“被淘汰,选择和鼓励寻找复杂解决方案的人们没有动力引入简化解决方案。”
-纳西姆·尼古拉斯·塔勒布(Nassim Nicholas Taleb)
您是否听说过这三位程序员找到了真正简单的安全网络银行解决方案? 他们使用功能设计方法和安全的语言从零开始开发了完美无缺的银行软件,然后开始将大型银行转移到其惊人的基础架构中。
您可能没有听说过它们,因为它们不存在。 但是有
成千上万的开发人员组成的团队
无法学习简单的概念,例如“回滚到旧版本” ,并且他们一直在忙于创建银行软件。
存储和传输号码不是特别困难的问题。 索引Internet的全部内容并在一秒钟内以自然语言显示查询的相应结果是另一回事。
但是只有少数聪明的人设法解决了这个问题。
网上银行的长期问题是,银行生态系统在其自己的货币拨款体系中确实出色。 它的领导人是粘在社会上的
腐败水 ,但组织领导人仅反映整个系统的状态。
我并不是说大多数普通的银行员工都是恶毒有害的人格。 一点也不。 通常,这些人都是友好的人,他们为家人的食物,住房和教育赚钱。 但是他们的主要动机不是修复银行软件,而是节省工作。 对于某些人来说,现代经济中的失业是一个严重的问题,而在银行业中,粗心大意或过分主动的举动是出现在纪律委员会面前的简便方法。
因此,银行系统保持不变-不是因为它们有效,而是因为惯性。 这种惯性表现为解决假想问题的形式,以避免解决实际问题,正如已经指出的那样,解决这一问题威胁到其他人的工作。 解决这些实际问题可能导致解雇,或者在某些特别令人不愉快的“机构”(例如高盛)的情况下,导致几封信破坏前雇员的生活,并以
奇怪的自杀告终。
“如果一个人的薪水取决于他不了解的东西,就很难使他了解某事!”
-阿普顿·辛克莱尔
普通公司忽略了这样一个事实,即高层管理人员90%的时间都花在“与客户见面”上,包括去热带岛屿旅行和数百万美元的“开销”预算。 反过来,高层管理人员对队伍中的腐败视而不见。
当中层管理人员鼓励他们对华尔街风格的幻想时,高级管理人员对这些购买偏心办公室,雇用三名秘书和十几名实习生的经理的行为视而不见。
由于普通管理人员不会抱怨自己独裁的幻想和对权力的渴望,因此中级管理人员对以下事实视而不见:他们不花钱在PowerPoint的演示文稿上,“改进我们的敏捷方法论”。
由于团队领导者并不关心他们的老板甚至都不知道如何使用Excel并每周上班两次,因此当团队领导者和架构师谈论“通过JRPC的系统与使用Hibernate和Java的微服务之间的下一代交互”时,普通管理人员对此视而不见。当这些该死的MySQL查询执行超过一天时,“春天”。
由于开发人员似乎没有注意到他们的团队负责人除了图表以外没有编写任何其他代码,因此团队负责人没有抱怨他们的开发人员,他们没有解释上述要求,而是使用新的JavaScript框架在一年中第十次重新创建UI。
这是解决想象中的问题的恶性循环:从不了解偷窃另外3000万人不会给他父母的爱的CEO,到不了解Angular-Material-Bootstrap 19.13.5上新的“提交”按钮不会改变的受训者密码以纯文本格式存储(并用于检查Cookie)。
但是每个人都必须继续解决想象中的问题,因为如果他们停止这样做,他们将开始专注于实际问题-并且他们将了解整个系统已损坏。 他们可以理解,在办公室的角落里,Debra十年来一直在关注服务器群集的正常运行时间图,尽管五年前该公司已迁移到AWS。 他们可以理解,他们的99%的任务只需要保存他人的工作即可。 我敢说,对于大多数人来说,这种意识是很难接受的。 因此,大多数人都找到一种适应的方法。