不要解决你没有的问题,你实际上是在制造问题

与其浪费时间在你不存在的问题上,不如专注于当下以及你现有代码不可避免的后果。

重要的是要质疑你正在解决的问题是构建过程中产生的后果,还是一个假设性问题。

假设性问题就像海妖的歌声,是毒苹果。它们带来的问题复杂多变,让你有机会采用新的闪亮技术来解决,但它们只是分散注意力的存在。

专注于道路,而非风景。

你的新应用程序可能正是改变世界、让世界变得更好的关键。但如果没有人看到它,那一切都毫无意义。代码的价值只有在运行时才能体现。当我们编写代码时,我们是在指导计算机如何运行。所以去做吧。编写代码并运行它。

当然,它可能是一个混乱的单体应用。部署管道可能需要改进。它可能需要最新的JavaScript框架或在云端运行。每个决策都伴随隐含的权衡,选择能让代码发布的方案,并预期情况会发生变化。元素周期表

用户可能想要一把锤子,而你却花大量时间制作电钻。唯一了解软件如何被使用的方式,就是让人们实际使用它。

专注于”可能发生的事”会让你忽视”正在发生的事”和”已经发生的事”。

问题已经够多了。

如果你没有用户,这就是个问题。

如果你有用户,他们想要更多,这也是个问题。

如果你写了代码,由于其存在本身,它将永远:

  • 需要维护
  • 存在漏洞或故障
  • 成为攻击载体
  • 需要有人理解它并进行任何更改(参见你之前的问题)。

这些问题必须始终解决。它们是你引入世界中的代码行所带来的后果,所以要对它们负责,否则没人会负责。

随着问题出现及时修复漏洞。添加功能以满足用户对新事物的渴望。专注于你所做工作的后果,而非潜在可能性。在扩展到1000倍用户时,同步解决扩展到1000倍用户的问题。

规模是一个根本不同的问题。

如果你被要求烤一炉面包,你不会从选择哪种半挂卡车来运送面粉开始。烤一炉面包是一个发现和学习的挑战。

什么样子的面包?使用哪种食谱?需要哪些原料?

尽管问题空间较小,但你仍有更多空间进行适应和实验。充分利用这一阶段。此时你需要平衡的条件最少。利用这段时期,你可以明智地犯错并从中学习。在仍拥有失败自由的阶段,提升产品与技能。

当你将烘焙面包的逻辑扩展到规模化时,你开始提出更多问题。

与哪些门店合作?如何吸引更多烘焙师加入?如何确保跨州边界的质量与新鲜度?

这些问题归根结底是如何在保持现有资源的同时,确保规模化过程中的效率。

选择合作伙伴需要具备足够的影响力和谈判能力。招募烘焙师意味着销售的面包数量已超过或即将超过实际烘焙量。确保跨距离和时间的新鲜度要求面包必须在远离烘焙坊的地方销售。

当问题发生变化时,环境也已改变。

随着更多人使用你的产品,需要管理的事项会增加。事情会变得缓慢。每次新变化都必须确保不会破坏已有的内容。新问题会变得庞大而复杂。

其中一些可能是最初假设的问题,一些可能不是。如果你试图提前解决它,你可能会忽略一个关键组件。

然而一旦问题真正出现,围绕问题的需求和背景会变得更加清晰。瓶颈在存在时更容易被发现。用户行为在使用你的软件时会变得显而易见。

解决问题将有更多资源可用。如果你面临销量过大的问题,你将拥有更多社会和经济资本来招聘人才协助解决问题。

需要注意的是,解决某些问题(如规模问题)本身就涉及其他不同类型的问题。招聘人才是一个独立的、非技术性问题。这本是一个你未曾考虑的假设性问题(如果你确实考虑过,你还会在最初阶段开发这个产品吗)。这不是一个可以借助闪亮的软件工具解决的问题。

随着问题浮现,逐一解决。

只关注当下会忽略未来。

当然,这里有一些微妙之处。如果你只专注于当下,你将永远无法为未来做好准备。考虑未来的变化,并现在就开始构建。这是一个微妙的平衡。

拥抱行动,但要明白事情会发生变化。相应地进行设计。做出有意且易于逆转的决策。留出空间,以便在出现问题时进行调整。设计能够在需要扩展时发出警报的系统。

本文文字及图片出自 Don't solve problems you don't have. You're literally creating problems.

你也许感兴趣的:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注