复杂性也是一个缺陷


上个月,我参加了DevOps Days特拉维夫会议。我把人们说的有趣的东西做了一些笔记--就像很多人在会议期间做的那样--然后我把笔记本收起来--就像大多数人在会议结束后通常做的那样。

然而,昨天我在翻阅我的笔记本(我想我是想从我的无休止的待办事项清单中检查我还有哪些事情要做),我偶然发现了我的会议笔记。在所有的涂鸦和图画中,有一句话引起了我的注意,这是我写过的,后来忘记了,但当我再次看到它时,它设法吸引了我的注意力。

“复杂性也是一个bug.”

复杂性正在增加,并将继续增加

在我写的句子下面是演讲者在他的演讲中所说的话。

他是来自硅谷的创始人/程序员/极客/CEO,他解释了从他的观点来看,软件和应用程序中的复杂性是如何增加的,并且会随着时间继续增加。

他的观点是,作为开发公司,我们必须选择由谁来处理这种复杂性。他从DevOps的角度来看这个问题,因此他说对于谁能承担这个复杂性有三种选择:开发,IT或最终用户。

简单地说,应用程序需要做更多的事情:与更多的应用程序对话,以便完成一些事情,更快地完成这些事情,并且在更多样化的环境中完成这些事情。我们并没有真的少做任何事情(除非你把花在睡觉和放松上的时间算少了)。

在这种情况下,有人需要为做得更多而“付出惩罚”,而这种惩罚可以由我上面提到的三个团队中的任何一个来处理。

通过创建更复杂的算法和更聪明的代码来处理所有的复杂性,它可以作为开发过程的一部分来处理。

它的一部分可以传递给it,it需要部署和配置系统,以便它能够处理一些增加的复杂性。

最后,前两个团队中任何一个团队没有处理的所有东西最终都将传递给最终用户,最终用户将需要处理更复杂的安装和配置以及更不友好的应用程序。

最后,他解释的是复杂性是一个zero-sum game作为我们开发项目的一部分,我们需要决定谁来处理这个问题。

将复杂性视为产品中的Bug

复杂性不是一个特征。它也不是像负载级别或应用程序响应时间那样的客观属性。尽管如此,它的重要性并不低于我们产品的任何其他属性,例如一个好的GUI或一个好的UX。实际上,复杂性通常是通过特性和UX解决方案的组合来处理的。

话虽如此,我们需要将过度的复杂性作为我们正在测试的产品中的一个bug来处理,但这有时可能比您想象的还要棘手。

复杂度取决于用户

试着想想两个不同的用户:例如,你的爸爸和你自己。我父亲是个很棒的外科医生,但他对iPhone应用程序却很不在行。这意味着一些对我来说微不足道的事情,他可能不可能弄清楚。

另一方面,如果你将我与我们在Practest中的一些开发人员相比较,那么我就变成了一个无法直接完成大部分配置的人。在第二种情况下,对他们来说可能微不足道的事情对我来说却是完全复杂的。

复杂性是一种权衡

我想我们都在那些项目中遇到过,产品负责人或产品经理,甚至最终用户过来说:“伙计们,我们需要发布这个!是时候做出妥协了……“

妥协只是用于bug和缺失特性的另一个术语。这些情况下,当项目已经延迟,我们需要交付一些东西,即使它不是完美的。在这些情况下,首先要“妥协”的是复杂性。

这是当我们同意我们可以发布一个关于如何手动配置系统的文档,而不是拥有智能的自我配置,或者安装会问到许多本可以直接从系统中提取的问题。

这些都不是关键的事情,但取决于用户是谁,这可能是他或她安装系统的一个阻止者。在最好的情况下,这将只是一个细微差别,他们宁愿不处理。

在开发特性之后,很难处理复杂性

想象一下,你订购了一辆为你量身定做的汽车。你谈到了颜色,形状,内饰,轮子,镜子等等。

然后,当他们向你展示成品车时,你会意识到你想让这辆车在英国行驶,在那里他们骑在路的右边,你想让它使用柴油发动机来省钱,你想要一辆自动驾驶的车,而他们展示给你的这辆车是用棍子工作的。

哎呀!

就像一旦汽车完成后进行这些更改将会非常昂贵,而且肯定会耽误你开车的时间一样,一旦系统已经完成并且接近发布,试图降低系统的复杂性也是如此。

的确,通过敏捷和迭代,这些问题应该会减少,但它们不会被消除。很多时候,问题在产品真正到达最终用户之前不会被发现,因此解决复杂性问题或添加新功能来处理这些问题变得更加昂贵,最终可能会产生额外的营销影响和成本。

复杂性是一个需要认真对待的问题

正如您现在所了解的,复杂性不仅存在,而且将成为一个更大的问题,因为我们的产品需要做更多的工作,并与其他产品和解决方案进行沟通,以实现其目标。

复杂性也是一些东西,如果我们不作为产品设计和开发的一部分来处理,就会传递给我们的最终用户来处理--或者他们可能会选择不使用我们的解决方案,因为他们不想或者无法处理我们赋予他们的复杂性。

最后,复杂性在流程早期处理比后期处理更容易,更快,更便宜。

最重要的是,鉴于您的用户会将复杂性视为您产品中的缺陷,最好您开始将其视为需要报告并最终由您的团队处理的bug。