简单是一个优势,但遗憾的是复杂性卖得更好(2022)
Simplicity is an advantage but sadly complexity sells better (2022)

原始链接: https://eugeneyan.com/writing/simplicity/

Edsger Dijkstra 的名言“简单性是一种伟大的美德,但它需要努力工作才能实现它,并需要接受教育才能欣赏它。更糟糕的是:复杂性卖得更好”凸显了对复杂思想和系统的偏见。 这种偏好源于两个主要原因 - 复杂性意味着巨大的努力并表明掌握。 具有众多组件和复杂交互的复杂系统意味着在开发和创建方面的大量投资,这表明设计师对不同方面的熟练程度和控制能力。 此外,这些精心设计的结构对潜在的创造者提出了挑战,因此由于所涉及的假定难度水平,它们在质量方面被视为优越。 此外,复杂性通过创造新颖性和独特性的感觉来促进创新。 创新模型、框架和发明引起了钦佩和认可,因为它们突破了界限并引入了以前未探索过的新概念。 相反,仅仅修改现有系统的看似微不足道的改进可能会因其明显的简单性而被忽视。 结果,出现了复杂性偏见——尽管面临挑战,但仍偏爱复杂的想法和创作。 然而,坚持简单性有几个优点:直接性、易于实施和可靠性。 简单系统由基本原理和基本要素组成。 它们固有的简单性有助于快速理解、减少维护工作、最大限度地减少错误并促进有效的资源分配。 此外,极简主义设计往往更容易学习和应用,从而可以覆盖更广泛的范围并提高可访问性。 总之,在解决复杂问题的同时拥抱简单性可以产生经过深思熟虑、高效且有效的解决方案。 因此,追求简单并抵制过度复杂化的诱惑仍然至关重要。

本文讨论了识别和解决适当问题而不是制造不必要的复杂性的重要性。 作者分享了一些团队做出不必要的复杂决策以及随之而来的负面后果的个人经历。 他们提到了一些例子,团队选择使用复杂的技术来实现琐碎的目的,或者为简单的问题寻求复杂的解决方案。 作者认为,由于大公司的市场主导地位以及网络效应和平台锁定的力量,它们常常忽视基本的良好实践。 然而,颠覆现有行业的初创企业的存在证明了市场在短期内的低效率。 作者强调,员工,尤其是工程岗位的员工,应该主动明确问题,评估成本和收益,并提出有效的解决方案。 高级工程师是工程、产品和业务领导者之间协作的催化剂。 复杂性有其优点和缺点。 虽然有些人认为这是一种挑战,但另一些人则因为他们知识的独特性而从中找到乐趣。 作者强调了一位教授的例子,他通过专注于经济学中的随机微分方程而获得认可,这使得该学科对其他人来说具有挑战性。 尽管提到了复杂性,但作者认为简单性至关重要。 为了说明这一点,他们描述了特斯拉先进用户界面的个人经历,以及当关键部件变速杆损坏时遇到的挫败感,揭示了看似复杂的技术的不切实际本质。
相关文章

原文

We sometimes hear of a paper submission being rejected because the method was too simple, or a promotion being denied because the work artifacts lacked complexity. I think this can be partly explained by Dijkstra’s quote:

“Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better.” — Edsger Dijkstra

Why does complexity sell better?

Complexity signals effort. Papers with difficult ideas and technical details suggest blood, sweat, and tears. Systems with more components and features hint at more effort than systems with less. Because complex artifacts are viewed as requiring more effort, they’re also deemed as more challenging to create and thus more worthy. And because of the perceived effort involved, they’re often judged to be higher quality.

Complexity signals mastery. A complex system with many moving parts suggests that the designer has proficiency over each part and the ability to integrate them. Inaccessible papers peppered with jargon and proofs demonstrate expertise on the subject. (This is also why we quiz interview candidates on algorithms and data structures that are rarely used at work.) If laymen have a hard time understanding the complex idea or system, its creator must be an expert, right?

Complexity signals innovation. Papers that invent entirely new model architectures are recognized as more novel relative to papers that adapt existing networks. Systems with components built from scratch are considered more inventive than systems that reuse existing parts. Work that just builds on or reuses existing work isn’t that innovative.

“The idea is too simple, almost like a trick. It only changes one thing and everything else is the same as prior work.” — Reviewer 2

Complexity signals more features. Systems with components that can be mixed and matched suggest flexibility to cover all the bases. For example, supporting both SQL and NoSQL data stores, or enabling both batch and streaming pipelines. Because complex systems have more lego blocks relative to simple systems, they’re considered more adaptable and better able to respond to change.

All in all, the above leads to complexity bias where we give undue credit to and favour complex ideas and systems over simpler ones.

Why is simplicity an advantage?

Simple ideas and features are easier to understand and use. This makes them more likely to gain adoption and create impact. They’re also easier to communicate and get feedback on. In contrast, complex systems are harder to explain and manage, making it difficult for users to figure out what to do and how to do it. Because there are too many knobs, mistakes are more frequent. Because there are too many steps, inefficiency occurs.

Simple systems are easier to build and scale. Systems that require less rather than more components are easier to implement. Using standard, off-the-shelf technology also makes it easier to find qualified people who can implement and maintain it. And because simpler systems have less complexity, code, and intra-system interactions, they’re easier to understand and test. In contrast, needlessly complex systems require more time and resources to build, leading to inefficiency and waste.

When Instagram was acquired in 2012, it had a 13-person team serving tens of millions of users. It scaled and kept operational burden per engineer low by sticking to proven technologies instead of new, shiny ones. When other startups adopted trendy NoSQL data stores and struggled, Instagram kept it lean with battle-proven and easy-to-understand PostgreSQL and Redis.

Simple systems have lower operational costs. Deploying a system is not the finish line; it’s the starting line. The bulk of the effort comes after the system is in production, likely by someone other than the original team that built it. By keeping systems simple, we lower their maintenance cost and increase their longevity.

Simple systems have fewer moving parts that can break, making them more reliable and easier to fix. It’s also easier to upgrade or swap out individual components because there are fewer interactions within the system. In contrast, complex systems are more fragile and costly to maintain because there are so many components that need to be grokked by a limited team. Having more interdependent parts also makes troubleshooting harder.

“The more simple any thing is, the less liable it is to be disordered, and the easier repaired when disordered.” — Thomas Paine, Common Sense, 1776

Specific to machine learning, simple techniques don’t necessarily perform worse than more sophisticated ones. A non-exhaustive list of examples include:

The simple dot product outperforms deep learning methods for recommendations.

The humble dot product outperforms deep learning methods for recommendations (source)

What’s wrong with rewarding complexity?

It incentivizes people to make things unnecessarily complicated. Using simple methods or building simple systems may appear easier and is thus valued less. As a result, people game the system to get more rewards and the simplest solution is no longer the most obvious one. Complexity begets more complexity, eventually making it impossible to work.

It also encourages the “not invented here” mindset where people prefer to build from scratch and shun reusing existing components even though it saves time and effort. This wastes time and resources and often leads to poorer outcomes.

Unfortunately, most promotion processes overemphasize complexity in work artifacts.

Ditto for machine learning paper submissions.

(If your idea didn’t get the credit it deserves, take comfort in the fact that breakthroughs such as Kalman Filters, PageRank, SVM, LSTM, Word2Vec, Dropout, etc got rejected too. We’re generally bad at assessing how useful or impactful an innovation will be. 🤷)

How should we think about complexity instead?

The objective should be to solve complex problems with as simple a solution as possible. Instead of focusing on the complexity of the solution, we should focus on the complexity of the problem. A simple solution demonstrates deep insight into the problem and the ability to avoid more convoluted and costly solutions. Often, the best solution is the simple one.

“Everything should be made as simple as possible, but not simpler” — Albert Einstein

Instead of having a complex, catch-all solution, consider multiple focused solutions. A one-size-fits-all solution is usually less flexible and reusable than expected. And because it serves multiple use cases and stakeholders, it tends to be “tightly coupled” and require more coordination during planning and migrations. In contrast, it’s easier to operate—and unavoidably, deprecate—single-purpose systems.

Is the juice worth the squeeze?

One way to overcome the complexity bias is Occam’s razor. It states that the simplest solution or explanation is usually the right one. Thus, let’s not be too quick to dismiss simple ideas or add unnecessary complexity to justify their worth.

Alternatively, ask yourself: Given the cost of complexity, is the juice worth the squeeze?

Thanks to Yang Xinyi and Swyx for reading drafts of this.

If you found this useful, please cite this write-up as:

Yan, Ziyou. (Aug 2022). Simplicity is An Advantage but Sadly Complexity Sells Better. eugeneyan.com. https://eugeneyan.com/writing/simplicity/.

or

@article{yan2022simplicity,
  title   = {Simplicity is An Advantage but Sadly Complexity Sells Better},
  author  = {Yan, Ziyou},
  journal = {eugeneyan.com},
  year    = {2022},
  month   = {Aug},
  url     = {https://eugeneyan.com/writing/simplicity/}
}

Share on:

Join 6,700+ readers getting updates on machine learning, RecSys, LLMs, and engineering.

联系我们 contact @ memedata.com