还是做对了
如果您选择一种杀死最多产品的想法,那么这就是为将来创建储备(未来打样)。
通常,该想法以一种模式体现出来。
我们需要{X} ,尽管使{Y}变得容易得多,但是随着{Z}的出现,第一个选择将简化我们的生活。
其中
{Z}是在遥远的将来可能发生的事件。
以下是一些示例:
- 基础架构需要Kubernetes和Docker ,尽管一台大型服务器要简单得多,但是当您必须扩展到11台服务器时 ,它将简化我们的生活。
- 数据处理需要分布式设计 ,尽管集中式解决方案要简单得多,但是当客户在SLA中要求99.999%的正常运行时间时 ,它将简化我们的生活。
- 我们需要招募开发团队并创建自己的软件 ,尽管Wordpress和Shopify要简单得多,但是当客户群增长100倍时 ,它将简化我们的生活。
- 我们需要使用基于类型继承的设计 ,尽管组成要简单得多 ,但是在增加代码库5年之后,这将简化我们的生活。
- 尽管需要直接向Postgres请求的Python脚本要简单得多,但是我们需要用C + +编写具有表示形式缓存的代码,但是随着数据量的大量增加,这将简化我们的生活。
我最近写了一篇有关
想象中问题的文章,人们认为这些
问题是出于无聊而不是永久的。 将来的库存通常属于此类。 我什至会说这是大多数小公司中最普遍的错误。
但是,这值得进一步讨论,因为为将来创建库存确实可以帮助产品,因此可以正确地做所有事情。 但是,大多数人会犯错误并损害工作。

成功比与之共存更难
不管听起来多么奇怪,我认为发生这种情况的主要原因之一是对名人的崇拜。
人们有一种奇怪的痴迷,想把自己放在更成功的人的鞋子上。 然后他们从这个位置开始制定计划,而不以自己的方式思考。
每个人都幻想着如何处理他没有的惊人能力。 好像他是该国的总统,亿万富翁,名人,演奏家或超人能力的超人。
开发人员的问题在于,他们太沉迷于这些幻想。 每个人都可以编写软件。 Facebook不仅能够创建支持数十亿用户的媒体平台,而且您正在浪费时间。 Facebook的魔力在于吸引这数十亿用户,而扩展系统很容易。
有两个方面:
- a)实现增长远比从技术上确保增长困难。
- b)最杰出和最著名的工程师致力于需要规模的产品。
如果考虑一下,第一点是显而易见的。 有多少软件公司在达到数十亿美元的收入或数百万个用户时失败了? 也许80%...如果您非常严格地定义“失败”。
但是,在曾经创建的所有软件公司中,也许只有0.05%达到了这一规模。
创建库存的问题在于,通常是为永不存在的方案创建库存的。 无论是增长到1000名员工,1000万用户,还是10个苛刻要求的大客户。
而且,放弃这样的计划很困难,因为它会干扰成功的想法。 防止人们幻想他们如何击败亚马逊,而是回到现实。 但实际上您有50个客户,其中一半是亲戚和朋友。
第二点只会使情况恶化。 自然,最好的程序员会在领先公司中获得最好的位置。 他们要么帮助创建了它们,要么为此付出了数百万美元的支持。
帕累托原理不利于我们,因为最好的程序员会写最多的书和最多的讲座。 我们不断地听到成千上万台机器上的分布式服务,这些机器处理PB的数据并争夺性能的每个百分比。 但是我们大多数人不必考虑Facebook或Google这样的大型或可靠系统的需求。
因此,如果对未来的幻想没有帮助,那么您不需要计划吗?
不,当然。 思考未来很重要。 它应该放在他身上,但要正确。

灵活性设计会产生瑕疵
考虑未来时,少即是好,但更好。
非常稀有的产品完全可以满足用户的需求,其余的则可以随时随地进行调整。
您几乎不可能提供服务
A,而90%的用户正是需要此服务。 通常,您提供服务
A ,而90%的用户需要服务
Z。 但是,
A是最接近
Z的替代方案,没有人提供
Z ...,因此一些客户决定忍受它。
很好 当客户决定接受您的产品时,您可以根据他们的确切需求进行更改。 从本质上讲,用户可以帮助您确定市场上的利基市场。 只要您能更好地填补这一利基,您就会开始成长。
这是一种富有成效的思维范式,因为它鼓励未来发展采用“少即是多”的方法。 未来的储备金并不意味着复杂性的增加,而是最大程度的简化。 能够适应。
您的代码库越简单,就越容易配置它以执行其他任务。
“我讨厌代码,并希望代码在我们的产品中尽可能小。” -杰克·狄德里希
完美的设计需要牺牲。 通常,它们与灵活性相关。
通常,不完美的软件可以解决世界问题,因为不完美的软件更加灵活。 顾名思义,不完善之处还有待改进。

乐观的设计,未来可能会让您感到惊讶
同样重要的是要记住,周围的世界不是一成不变的。
未来的问题需要通过未来的技术来解决。
许多人不仅不考虑未来的工具,而且通常使用十年前的工具。 他们强加了早已取消的限制。
让我解释一个具体的问题:分布式软件的设计。 开发此类软件的常见原因之一是因为单个服务器无法扩展到所需的规格。 尽管在某些情况下确实如此,但很难相信大多数项目的观点,尤其是几乎没有客户的创业公司。
我认为部分原因是,2018年的大多数开发人员仍在考虑2005年的服务器。 但是计算机每年都在改进,许多提供商都在出售廉价的专用服务器。
例如,这是一台便宜的大型服务器:
- 两个Xeon E5-2680v4(28个内核,56个线程,时钟速度从2.4 GHz到3.3 GHz)
- 512 GB DDR4-2400 RAM
- 2个1.2 TB的NVMe SSD(每个〜3 GB / s读取,〜1.5 GB / s写入)
我敢打赌,大多数
分布式软件所需的工作量都不是该业余服务器的一半。
这样的服务器每月的费用约为800至1300美元,具体取决于位置。 您可以花一打价钱聘请伦敦经验丰富的DevOps工程师。
更令人高兴的是,服务器将在两到三年内便宜一半。
计算机在不断改进,并且将线性地进行改进,直到2020年代末。 谁知道会出现什么发明。 到那时,我们甚至可以看到
开放的钢铁革命。
然而,尽管在2018年有必要在2019年为机器开发软件,但人们仍在继续开发用于硬件规格和价格的软件。
这不仅适用于服务器。 如果您想考虑未来,请考虑所有未来的外围设备。 我相信2016年为他们的设备提供语音界面的家伙在2018年会很高兴。
您在2018年应准备哪些外围设备? 魔鬼认识他。 但我知道她尚未流行。 当它变得流行时,它将帮助您在市场上占据垄断地位,因为您已经为它改装了软件。
它不仅涉及硬件,而且软件的进步也绝对令人赞叹。 随着WASM的出现,浏览器正在成为通用虚拟机。 两年后,您可以通过为单个平台WebAssembly编译高性能应用程序。
尽管如此,人们仍然为2012型号的家用计算机创建软件。 他们使用Babel,尽管99%以上的用户都启用了ES6浏览器。
新语言不断出现,其中一些非常好。 仅在最近8年中,Go,Rust,Scala和D出现了,从而完全改变了系统编程范例。 在接下来的两年中,在我看来,Julia将在科学计算领域进行同样的革命……而这些只是我个人所要处理的领域,而未来令人惊奇的事物的总数简直令人难以置信。
但是我离题了...
享受未来很容易。 但是没有人真正知道一年,两年或五年后会发生什么。 有一些预测,但是它们当然并不理想。
但是,如果您真的想为将来创造储备,那么首先要了解现在的情况。 此外,通过这种方式,您将可以基于真实数据做出更准确的保守预测。
具有2000年代初期精神的2020年储备软件将无法为您提供帮助。
所以不要停止思考未来
只是开始正确地计划。
设计时不仅要考虑您的产品,还要考虑整个周围的生态系统。
为灵活性而设计,而不是完美。 灵活性最终将有助于使软件适应未来。 它有助于迎接新的挑战,并且不能抵御虚构的事物。