在许多情况下,可能会导致创建不良软件的催化剂:使用的工具,团队中的沟通质量,开发人员的个人素质,方法论等。 其中有一件事情几乎是其他所有人的根源:想象中的问题。
大多数复杂或zagabovannoy软件都没有计划为复杂,甚至zagabovannoy更是如此。 它的创建只是为了执行那些不是基于原始计划的任务。
播客故事
想象一下,您正在录制一个流行的播客,并且在某个时候您正在考虑创建自己的网站-知道了,有关播客的信息,以前的问题记录,文章以及一些广告。 实际上,您可以与一些外部发行商分享多少利润?
因此,您决定雇用将为您创建此网站的人员。 您为他们写了绝对清晰的要求:
- 在北美快速加载网站
- 支持下载播客的过去发行版和当前的实时流媒体
- 对于99.99%的用户,广播在开始的15分钟内不会下降或停止。 永远不可取,但即使如此。
- 与Google Adwords集成(将来可能与类似物集成)
- 与Facebook广播集成,因为您在那里花费广播。 如果您可以创建一个替代解决方案,使您可以更方便地进行流传输-甚至更好。
您将这些要求提供给开发人员,也许还需要与他们进行一些交流。 2个月过去了。 他们向您展示了一个演示,并且您被红色斑点覆盖。 很明显,您只是向深渊投入了15,000美元。 他们向您展示的内容在任何方面都是完全不能接受的,只是一堆垃圾。 您想还钱,但是火车已经走了。
看到一个演示站点会很生气。 在第一个开口处,一切都冻结了。 然后,它似乎起作用了,您问如何更改将在网站上显示的广告类型。 他们为您展示了一个扭曲的界面,完全靠自己掌握是不现实的。 Facebook流很慢。 一切都很糟糕。
但是开发团队不了解您为什么不高兴。 从他们的角度来看,他们完成了一项壮举,仅用了2个月就制作出了如此复杂的产品。 他们将所有才华投入到他的整个灵魂中。 自己判断他们添加了哪些精彩功能:
- 惊人的推荐系统
- 语音识别算法,可实时显示广播中的字幕!
- 该网站的主页在世界上任何地方加载200毫秒
- 广播协议和客户端是从头开始编写的,Facebook已通过插件添加。 您可以随时添加其他平台的插件!
- 可以与20个不同的广告平台集成
您已经知道了麻烦所在,对吗? 您要求一个非常特定的,高度专业化的产品,并需要几个附加功能。 开发团队对此有不同的看法。 对于他们来说,您所有“理想”,“便捷”和“未来”变成了一项激动人心的任务,以开发通用的,可扩展的,可扩展的和大量补充的产品,在实施过程中,您可以英勇地解决许多有趣的问题。 好吧,当然,没有什么事情可以像抛光和将产品的基本功能实现理想化那样分散精力-我们有足够的规模,现在没有时间更换它了!
另一个问题是您很可能没有直接与系统的直接开发人员进行通信。 您打了个坏电话:您与某位推销员交谈,推销员将任务移交给公司中层管理人员,在那儿写了业务规范,交给了项目经理,他写了技术规范,然后交给了团队负责人,然后由他们将其分为任务并分发给开发商。 嗯,每个开发人员都在理解的背景下理解并实现了他们的任务。
现实回避机制
想象中的问题比真正的问题更有趣。 非常聪明的人免费或几乎免费玩复杂的游戏,解决数学问题,写抽象主题的书。 同时,针对标准移动应用程序的中产阶级程序员将为您带来巨额费用。 这不是因为普通程序员比天才更难找到。 这是因为执行有趣的任务很容易而且很愉快,但不是例行的。
大多数程序员都希望从事有趣的任务,并为此赚钱。 这很难实现。 当然,您可以推测“有趣的问题”是什么,但是对于大多数开发人员来说,这是一个非常接近于理论上可解决的问题领域的边界。 很难实现但可以实现的东西。
给一个有理智的人很多例行的,非自动化的任务,迟早您会带他去做。 然而,人类大脑经过数百万年的进化,已经发展出许多不同的技巧来保持自身的适当状态。 由于暴力的受害者可以逃脱到幻想的世界中,因此,无辜地注定了多年的企业发展或随着时间的流逝,网络自由找到解决假想问题的方法。

发明问题的数量和复杂性取决于程序员的想象力水平及其实际任务的复杂性。 应当指出,这种方法本身并不是软件开发人员所独有的。 经理,销售人员,人力资源,支持,律师和会计师找到了自己独特的方式来创造和英勇地克服不存在的麻烦。 他们参与超出自己能力范围的决策,在他们的出席只是纯形式的会议上发言,等等。 他们还高估了问题的规模及其在解决问题中的作用(“从第一天起,我们的新《 Doggy Diary日记》应用程序应与GDPR兼容101%!我们不能等待客户抱怨!”)。 他们给员工充气以使他们看起来很重视团队工作,然后处理增长,规模和后勤问题(在大型团队中总会出现此类问题)。
许多开发人员都很聪明,但是他们的许多任务却很愚蠢。 这种矛盾迫使聪明的人思考其他尽管不是现实存在但有趣的任务。
损坏的电话架构
有时,想象中的问题并不是无聊的开发人员幻想的结果。 有时,这是“电话损坏”的结果。
有时我是自由职业者。 当我刚开始时,我无力挑选客户。 这意味着需要让每个人排成一列,并以各种颜色观察人类心理偏差的最多样化表现。 我已经看到了数百封关于完全不重要的原型细节的信件。 我看到人们每周都会对规范的每个段落进行绝对更改。 我的客户针对一些琐碎网站的项目询问是否有机会立即与他们一起进行ICO或将人工智能与他们联系在一起。
有相当明智的客户,但是他们缺乏知识(或词汇?),无法以可理解的方式表达他们的所有要求。 这本身不是问题。 软件开发人员的工作之一就是精确地收集需求和编写规范。 这是我们需要支付的费用,包括金钱,如果您可以正常访问客户并且有足够的时间,那么这项工作甚至可以或多或少地正常进行。 问题在于,有时这种访问不是,并且您之间存在多个中介。
大多数公司都喜欢在单独的职位中设有“销售人员”。 这些特别的人正在寻找潜在的客户,与他们讨论任务,截止日期和价格。 正是这些人可以找出最有用和提出最多问题的人。 但是这些不是编写此项目的人。 在销售人员和程序员之间,有2、3、4或更多层的中下层经理,架构师,分析师和团队负责人。 是的,可以是非常熟练的人。 但仍然-这些是附加层。 无论他们多么努力,通过他们的信息都会改变。 有人会丢弃(在他看来)不重要的东西,另一个人会澄清未指明的东西,但(在他看来)很明显,第三个将用正确的(他确定)术语代替愚蠢的措词-现在初始任务无法再被识别。 销售员可以向客户抛出一个短语,例如“但只要39,999,我们也可以在区块链上做到这一点”。 如果客户咬人,开发团队将不得不在下面两个层次上绞尽脑汁,但是如何在区块链上做到这一点。 但是它已经出售并付款了,我们会做的。
因此,最初的问题在投机和重新思考中迷失了。 新发明的问题(如果他们甚至还没有解决)之间存在漏洞,有些人想用自己的假想问题和出色的解决方案来填补它们。 因为它仍然是自由,而不是例行公事。
人为的复杂性和自然选择
通常会有更黑暗的一面。 发明想象中的问题和解决问题的方法可以成为公司发展的驱动力,并且在将来,也许它的主要业务是公司生存中最重要的部分,这是无法放弃的。
“选择解决复杂问题的人没有动力解决简单问题”-Taleb
您是否听说过前三名工程师突然发现网上银行通常很简单? 他们创建了简单的因此没有故障的软件,使用了正确的技术和编程语言,然后将所有主要库转移到了他们的平台上。
不,没听到吗? 这是因为事实并非如此。 但是发生的事情是,将来将会是-由成千上万为不同银行工作的程序员组成的独立团队,并且在大约半年的时间内能够使用整个团队来实现“回滚交易”这样的功能。 是的,这就是银行软件的编写方式。
当然,这不是因为很难将数字从一列移到另一列。 这并不困难。 在这里,为整个Internet编制索引,然后在一秒钟内显示相关的搜索结果-这很困难。 但是,车库里的几个人做到了。 为了使交易回滚,需要1000个人和六个月的时间。
这里的问题是,银行生态系统非常擅长完成其主要任务-支持银行生态系统。 车轮在旋转,报纸在沙沙作响,明天一切都会和昨天一样。 一切都有惯性。 而且,如果过去五年来我们一直在研究一个假想的问题,我们明天也将努力解决这个问题。
“如果一个人因不理解而得到薪水,就很难使他理解。”-Upton Sinclair
每个人都继续从事虚拟任务,因为如果他们停下来一会儿,看看真正的任务,很明显他们的整个系统都坏了。 突然间,事实证明,坐在那个角落的Vasya过去十年来一直在监视内部服务器场的状态,从此迁移到AWS的成功是在5年前。 突然之间,事实证明,玛莎的所有工作都是将达莎的报告发送给某人。 这种意识是非常困难的,人们在潜意识里试图避免可能偶然造成的情况。
我们将继续解决想象中的问题。