不要解决你没有的问题,你实际上是在制造问题
与其浪费时间在你不存在的问题上,不如专注于当下以及你现有代码不可避免的后果。
重要的是要质疑你正在解决的问题是构建过程中产生的后果,还是一个假设性问题。
假设性问题就像海妖的歌声,是毒苹果。它们带来的问题复杂多变,让你有机会采用新的闪亮技术来解决,但它们只是分散注意力的存在。
专注于道路,而非风景。
你的新应用程序可能正是改变世界、让世界变得更好的关键。但如果没有人看到它,那一切都毫无意义。代码的价值只有在运行时才能体现。当我们编写代码时,我们是在指导计算机如何运行。所以去做吧。编写代码并运行它。
当然,它可能是一个混乱的单体应用。部署管道可能需要改进。它可能需要最新的JavaScript框架或在云端运行。每个决策都伴随隐含的权衡,选择能让代码发布的方案,并预期情况会发生变化。
用户可能想要一把锤子,而你却花大量时间制作电钻。唯一了解软件如何被使用的方式,就是让人们实际使用它。
专注于”可能发生的事”会让你忽视”正在发生的事”和”已经发生的事”。
问题已经够多了。
如果你没有用户,这就是个问题。
如果你有用户,他们想要更多,这也是个问题。
如果你写了代码,由于其存在本身,它将永远:
- 需要维护
- 存在漏洞或故障
- 成为攻击载体
- 需要有人理解它并进行任何更改(参见你之前的问题)。
这些问题必须始终解决。它们是你引入世界中的代码行所带来的后果,所以要对它们负责,否则没人会负责。
随着问题出现及时修复漏洞。添加功能以满足用户对新事物的渴望。专注于你所做工作的后果,而非潜在可能性。在扩展到1000倍用户时,同步解决扩展到1000倍用户的问题。
规模是一个根本不同的问题。
如果你被要求烤一炉面包,你不会从选择哪种半挂卡车来运送面粉开始。烤一炉面包是一个发现和学习的挑战。
什么样子的面包?使用哪种食谱?需要哪些原料?
尽管问题空间较小,但你仍有更多空间进行适应和实验。充分利用这一阶段。此时你需要平衡的条件最少。利用这段时期,你可以明智地犯错并从中学习。在仍拥有失败自由的阶段,提升产品与技能。
当你将烘焙面包的逻辑扩展到规模化时,你开始提出更多问题。
与哪些门店合作?如何吸引更多烘焙师加入?如何确保跨州边界的质量与新鲜度?
这些问题归根结底是如何在保持现有资源的同时,确保规模化过程中的效率。
选择合作伙伴需要具备足够的影响力和谈判能力。招募烘焙师意味着销售的面包数量已超过或即将超过实际烘焙量。确保跨距离和时间的新鲜度要求面包必须在远离烘焙坊的地方销售。
当问题发生变化时,环境也已改变。
随着更多人使用你的产品,需要管理的事项会增加。事情会变得缓慢。每次新变化都必须确保不会破坏已有的内容。新问题会变得庞大而复杂。
其中一些可能是最初假设的问题,一些可能不是。如果你试图提前解决它,你可能会忽略一个关键组件。
然而一旦问题真正出现,围绕问题的需求和背景会变得更加清晰。瓶颈在存在时更容易被发现。用户行为在使用你的软件时会变得显而易见。
解决问题将有更多资源可用。如果你面临销量过大的问题,你将拥有更多社会和经济资本来招聘人才协助解决问题。
需要注意的是,解决某些问题(如规模问题)本身就涉及其他不同类型的问题。招聘人才是一个独立的、非技术性问题。这本是一个你未曾考虑的假设性问题(如果你确实考虑过,你还会在最初阶段开发这个产品吗)。这不是一个可以借助闪亮的软件工具解决的问题。
随着问题浮现,逐一解决。
只关注当下会忽略未来。
当然,这里有一些微妙之处。如果你只专注于当下,你将永远无法为未来做好准备。考虑未来的变化,并现在就开始构建。这是一个微妙的平衡。
拥抱行动,但要明白事情会发生变化。相应地进行设计。做出有意且易于逆转的决策。留出空间,以便在出现问题时进行调整。设计能够在需要扩展时发出警报的系统。
本文文字及图片出自 Don't solve problems you don't have. You're literally creating problems.
你也许感兴趣的:
- 我的编程技术退步了
- 【程序员搞笑图片】程序员的最爱
- 【外评】80% 的开发人员不开心
- 【外评】如何判断自己已成为高级程序员
- 【外评】如何成为最优秀的程序员
- 【外评】程序员大神每天什么都是时候工作?
- 【译文】在 Meta 工作 12 年:回顾我参与的所有项目
- 【译文】每个开发人员都需要问自己的一个问题
- 【译文】程序员工作很累,但 70% 的程序员在周末休息时以写代码为乐
- 【译文】我是一个糟糕的程序员
你对本文的反应是: