写点什么

过度设计会扼杀你的产品

  • 2022-02-22
  • 本文字数:3476 字

    阅读完需:约 11 分钟

过度设计会扼杀你的产品

本文不只针对产品经理。创始人、投资者,或者任何其他在任何数字产品或服务方面有足够关系的人都可以利用本文的观点。

 

我相信这一点,因为我们将讨论创建产品时最普遍的问题之一:过度设计产品。依我看,过度设计要比缺乏良好的开发实践扼杀更多的产品

 

在讨论详细情况之前,让我来介绍一下我的背景。当上产品经理之前,我是个工程师。实际上,我受过计算机科学的正规训练。尽管在我的职业生涯中,我总是更接近业务,而不是自己编写代码,但我创建、扩展并管理了工程和产品团队,而且规模相当。

 

所以,我并不是从外表来谈论过度设计的问题。对于自己造成的这一切,我感到内疚,并且承受了这一切。由于这个原因,我知道了解它的重要性,知道它的代价,以及如何防止它。

什么是过度设计?


如果我们按照维基百科的严格定义来看,过度设计指的是以超过必要的更复杂方式设计产品的事实:

 

过度设计(或过度工程化,或性能过剩)指的是以过于复杂的方式设计产品或提供问题的解决方案的行为,而在这种情况下,可以证明存在一种更简单的解决方案,其效率和效果与原始设计相同。

 

就软件而言,我喜欢 Paweł Głogowski 的这个定义:

 

解决你所没有的问题的代码或设计。

 

如今,你会想,谁会设计或编程来解决一个他/她所没有的问题呢?这似乎很荒谬,是吧?嗯,请坐稳椅子,因为在经历了二十年的职业生涯之后,我可以向你保证,过度设计并非例外:这是常态。

过度设计的原因


谁也不是出于恶意这么做的。很多时候,过度设计发生的原因是我们试图预测未来,对未知的事物做好准备。

 

在编写一个功能时,很容易想到,只要我们投入更多的时间,就能“以防万一”,使其经得住未来的考验。

 

而现实是,十有八九,这个“以防万一”永远也不会到来。但是,在这个过程中,我们浪费了宝贵的时间,增加了项目的复杂性,这一点我们将贯穿项目的整个生命周期。


一般问题


过度设计的另一个原因往往是缺乏经验。一般而言,你的资历越深,就越不容易过度设计,因为你已经经历过大量的人为复杂性的情况。

 

关于工程师经验的学习曲线通常遵循与此非常相似的模式:

 

  1. 你从一个简单的方式开始编程。

  2. 你找到了像面向对象这样的范例,并与潮流相结合。

  3. 你阅读了有关设计模式的文章,并在各种情况下寻找实现它们的机会。

  4. 经过数年不必要的复杂性之后,你又回到了编写简单的代码。


代码复杂性与经验


界定宽松的需求也会加剧这一问题。假如一个工程师没有一个明确界定的问题,他就会倾向于过度设计来避免不确定性。

 

无聊同样也会导致过度设计。假如一个工程师没有激动人心的挑战要面对,他很可能只是尝试了一些新事物,最终使问题复杂化。

过度设计的后果


在文章一开始,我就提到过度设计将扼杀初创公司,我并不是在开玩笑。对于任何系统,它有两种特别的反常影响。

 

一方面,这会增加开发成本。假如我们的工程师不选择最简单的解决方案来解决一个问题,我们的时间和金钱成本将会增加,让我们无法更快地完成迭代。请观看 Lisa Vigar 的 MTP Hamburg 演讲《语音产品的迭代》(Iterating Your Voice Product)。

 

另一方面,这也会增加维护成本。简单的代码更易于编程、测试和修改。随着复杂度的增加,复杂性会以指数级增长,影响迭代速度。

 

因此,我重申了自己的论点,过度设计将扼杀产品。远不止缺乏良好的工程实践。之所以如此,这是因为要从良好的实践中获益,你需要有产品与市场的契合度,而过度设计会使你首先无法得到它。

过度设计的例子


第一个想到的是基于微服务的架构。在几年前,它们像浪潮一样涌来,它们应该比它们所集成的项目还要多。

 

我把它们作为过度设计的一个例子,因为它们在 99% 的情况下都是没有必要的,特别是对于那些必须找到市场契合点的初创公司来说,更直接地使用诸如“雄伟的”单体架构模式会带来很多好处。

 

假如你成功地找到了市场契合点,结果发现,由于规模问题,你最终需要切换到微服务,哦,天呐,这是个好问题。

 

过早的优化往往是另一个过度设计的典型例子。一个常见的情况是,当你还没有用户时,就准备在一个过于复杂的基础设施设置中吸收大量流量的系统。多数情况下,你只需要在单一服务器上运行单体应用,就可以验证你的业务模式。

 

过早优化的一个最糟糕的例子就是,我们花费了大量的时间来设计一个系统,以避免将来重复自己的工作,而放弃已完成的部分工作。


如果你以前因为破产而从来没有看到过它的工作,那么你的设计或实现有多么完美,都无关紧要了。即使是这个星球上最糟糕的代码,帮助你验证一个假设,总好过因为害怕不重复自己的工作而停滞不前。

 

和上面提到的一样,软件重写是一个明显的过度设计的例子。通常情况下,工程师并不喜欢在遗留的代码库上工作。他们的自然倾向是一切从头做开始。但是,就像 20 多年前 Joel Spolski 在《你永远不应该做的事》(Things you should never do) 中写道,重写很少能达到目的,甚至会夺走你的生意。

 

显然,这是显而易见的,但是你的客户并不关心你的系统在内部有多好。你的客户关心的是,你是否帮助他解决了问题。没有给予他们价值而投入的每一分钟都是浪费的一分钟。

如何避免过度设计


在我看来,避免过度设计的最好方法是让你的工程师成为真正的产品工程师

 

为了实现这一目标,我们可以让他们参与日常业务,在每项举措之后解释为什么,并将其与对组织及其愿景重要的指标联系起来。

 

观看 MTP 小组讨论,以进一步了解定义重要指标的重要性。

 

我们需要让他们和用户更紧密地联系在一起,邀请他们与我们的用户进行访谈和发现会议。你希望你的团队能够与你的用户的问题产生紧密的共鸣,从而使他们能够迅速地放弃那些不能最有效解决问题的工程措施。

 

假如你只是把工程团队看作是一个生产链资源,它唯一的任务就是从积压的工作中实现用户描述,那么就不要指望他们能有动力避免复杂性。他们需要了解每一个决策背后的原因。

 

与此相关,正确定义问题来减少模糊性。工程师需要知道原因,但是他们也需要知道预期的是什么。你越能缩小问题的范围,他们保护自己不受过度设计解决方案影响的理由就越少。定义一个系统的期望的好方法是通过使用 SLI 和 SLO 的服务目标。


在任何公司里,工程师都是最有创造性的人。当你的团队相信你的标准时,他们的日常想法或主动性就会显现出来,这可能表明他们是在考虑将来的“假设”场景。如果你有这样的直觉,问问自己:这对解决当前用户的问题有什么帮助?要是我们现在不干呢?他们的回答会帮助你辨别这是否是一种过度设计的情况。

 

最后,更多的是面向创始人,优先聘用已经在产品公司有一定经验的高级工程师。寻找“战争创伤”的面试。询问他们最痛苦的经历以及他们是如何应对的。坚持聘用那些把用户和简单性放在简单的技术解决方案之前的人。

避免过度设计的心智模式

YAGNI


在业界中,过度设计的问题很普遍,工程师们自己就用了一个术语来指代添加代码“以防万一”的情况:YAGNI,就是“你不会需要它”(You are not going to need it)的首字母缩写。

 

YAGNI 试图阻止你添加任何在解决你所面临的问题上并非绝对必要的内容,因为事实是,最有可能的是,“你不会需要它”。

KISS


KISS 一词,也就是“保持简单直白”(Keep it simple stupid)的首字母缩写,是指更加易于对简单系统进行修复、开发和维护。所以,简单性应该成为任何设计的目标之一,避免任何不必要的复杂性。

更糟就是更好


“更糟就是更好”,我们要强调的是,拥有更少的选择比拥有更多的选择更可取。之所以这样,是因为它可以简化我们产品的使用,使其在更广阔的市场范围内具有吸引力。

 

换句话说,它鼓励我们保持产品的最低限度的基本功能,避免增加“脂肪”,以免增加产品的复杂性。

总结


总结一下,过度设计有可能摧毁你的初创公司,它可能:

 

  • 增加不必要的复杂性。

  • 增加开发和维护成本。

  • 降低你的迭代速度。

  • 使你无法适应市场。

 

遗憾的是,过度设计并非例外;它是常态。出于这个原因,了解其中所包含的内容非常重要,并且努力避免这种情况的发生,首先要让你的工程师参与进来,解决客户的实际问题。

 

在没有解决客户实际问题的开发中,我们投入的每一分钟都是一种浪费。不要掉进““以防万一”的陷阱。


墓地里充斥了设计精巧的初创公司和产品,可以扩展到数以百万计的用户,而这些用户从来没有得到过一丁点儿的关注。别成为他们中的一员。

 

作者介绍:

 

Simón Muñoz,一位西班牙富有激情的产品经理,拥有创业背景和软件工程教育背景,并曾在多家技术公司工作 20 多年,积累了丰富的管理经验。现在在 VoiceMod 工作,开始执行一项为每个人提供 Sonic 身份的任务。

 

原文链接:

 

https://www.mindtheproduct.com/overengineering-can-kill-your-product/

2022-02-22 16:388345

评论 4 条评论

发布
用户头像
这是分论点“过度设计原因:我们试图预测未来”的论据、

在编写一个功能时,很容易想到,只要我们投入更多的时间,就能“以防万一”,使其经得住未来的考验。

2022-03-11 13:47
回复
用户头像
作者的论点是如果我们去尝试解决一个“未来的问题”,这会浪费时间并增加项目的复杂性

而现实是,十有八九,这个“以防万一”永远也不会到来。但是,在这个过程中,我们浪费了宝贵的时间,增加了项目的复杂性,这一点我们将贯穿项目的整个生命周期。

2022-03-11 13:45
回复
用户头像
我们想要银弹!

我们试图预测未来

2022-03-11 13:42
回复
用户头像
翻译可以,能不能翻译一些新的文章,这个文章和这个文章的翻译,我都已经看过了
2022-02-28 09:48
回复
没有更多了
发现更多内容

Pencils Protocol Season 3 现已开启,多重收益一览

股市老人

Pencils Protocl全新品牌升级,如何构建 LRT 赛道新范式?

股市老人

蓝易云 - git报错:Failed to connect to 127.0.0.1 port 1080

百度搜索:蓝易云

git 服务器 云服务器 高防服务器 免备案服务器

蓝易云 - 通过IPsec网络客户端无法访问服务器https

百度搜索:蓝易云

https 服务器 IPsec 高防服务器 免备案服务器

蓝易云 - Pytorch基础:Tensor的reshape方法

百度搜索:蓝易云

服务器 云服务器 PyTorch 高防服务器 免备案服务器

蓝易云 - Git多账号管理通过ssh公钥的方式,git,gitlab,gitee

百度搜索:蓝易云

git gitlab 服务器 云服务器 高防服务器

信通院《智能化数据管理工具能力要求》标准发布,Aloudata 受邀参编!

Aloudata

DataOps 数据管理

Python Web Service开发及优化

我再BUG界嘎嘎乱杀

Python nginx flask web服务

Moonchain 随柏林市长访问东京,并与三菱和富士通等建立合作预期

股市老人

全新品牌升级的 Pencils Protocl,构建 LRT 赛道新范式

西柚子

阿里云数据库 RDS SQL Server版实战【性能优化实践、优点探析】

申公豹

阿里云

KubeEdge v1.17.0发布!数据处理能力与易用性全面提升

华为云开发者联盟

Kubernetes 容器 华为云 华为云开发者联盟 企业号2024年5月PK榜

用数据,简单点!奇点云2024 StartDT Day数智科技大会,直播见

先锋IT

Crabc在交通领域中的实践与应用

Crabc低代码平台

低代码 数字化

音视频常见问题(六):视频黑边或放大

ZEGO即构

直播 视频编解码 音视频开发 音视频引擎

阿里云 EMR Serverless Spark 版开启免费公测

阿里云大数据AI技术

大数据 数据处理 EMR

Python实现大麦网抢票的四大关键技术点解析

我再BUG界嘎嘎乱杀

Python 编程 后端 软件开发 抢票

Pencils Protocol Season 3 现已开启,一鱼多吃最大化收益

股市老人

一文读懂Pencils Protocol Season 3:多重收益实现一鱼多吃

西柚子

用python优雅实现:序列A依照序列B排序

我再BUG界嘎嘎乱杀

Python 编程 后端 软件开发

2024-05-22:用go语言,你有一个包含 n 个整数的数组 nums。 每个数组的代价是指该数组中的第一个元素的值。 你的目标是将这个数组划分为三个连续且互不重叠的子数组。 然后,计算这三个子数

福大大架构师每日一题

福大大架构师每日一题

智谱AI、OpenAI、谷歌等16家顶级AI公司签署前沿人工智能安全承诺

技术研究院

全新品牌升级的 Pencils Protocl,如何构建 LRT 赛道新范式?

股市老人

阿里云PAI发布DeepRec Extension,打造稳定高效的分布式训练,并宣布开源!

阿里云大数据AI技术

人工智能 阿里云 开源 deeprec

拼多多API指南:拼多多商品详情数据接口丨拼多多API实时数据接口

tbapi

拼多多API接口 拼多多商品详情数据接口 拼多多商品数据接口

拼多多API实时数据接口:关键词搜索拼多多商品列表数据接口丨拼多多商品列表数据接口

tbapi

拼多多 拼多多商品列表数据接口

过度设计会扼杀你的产品_文化 & 方法_Simón Muñoz_InfoQ精选文章