Clear Eyes, Full Heart: Beating 的 Series A Crunch

通过 达摩什·沙(Dharmesh Shah) 上 2013年4月9日

的 following is a 来宾 post by Alan Wells, co-founder & 产品 设计er at 甘油. [披露:我是公司的天使投资人。 -Dharmesh]

据广泛报道 今年将有至少1,000家孤儿创业公司 -去年筹集了种子资金且将无法筹集资金的公司。 The 科技媒体的流行观点 是这1000家孤儿公司中的大多数将因缺乏资金而死亡。作为创始人,很难不让这种影响力影响您的想法-谈论失败,快速招聘和通宵成功的故事,人们很容易相信,您唯一的选择就是寻求软着陆或关闭并尝试再有其他的东西。与坚持下去相比,走开无疑是更简单的途径(虽然它可能会让你成为朋克)。

但是我相信,在那1000家孤儿创业公司中,有伟大的公司-仍然可以在宇宙中扎根的公司,如果创始人坚持下去的公司可以突破。本·霍洛维茨(Ben Horowitz)说,所有伟大的CEO都有一个共同点: 他们不放弃,以及去年在Startup School上反复播放的主题。几乎 每个说话的创始人 经历了持续18到24个月的苦痛期,事情才真正开始对他们的公司产生影响。挂在那里

也许巧合的是,悲伤的谷底通常比种子轮平均大小后的跑道略长,但我开始相信伟大的公司通常是这些艰难环境的产物。不幸的是,人们不愿意谈论公司的不对劲,关于创始人为成功驾驭这些困境所做的工作也没有太多讨论。

我是一家初创公司的创始人,该公司最近决定加倍努力,力求战胜A系列紧缩, 专注于道路而不是墙壁,我想分享一些我正在学习的东西,以便我们找到前进的方向。

承认你的现实

创始人是乐观的人,所以我们很容易相信,如果我们仅将这一件事添加到我们的产品中,达到一项关键指标,或者签署一项合伙协议,投资者就会敲着我们的门乞求给我们钱。但是,如果您知道事情进展不顺利,或者已经无法进行下一轮融资,那么您的初创企业最需要的就是一个清醒的创始人,他可以实际评估情况并确定前进的方向。

诚实地评估我们业务中曾经存在的和不存在的事情,这是我们决定继续前进的重要时刻。在创始人的脑海中,一分钟看起来很美好,而下一分钟看起来很糟糕,因此,获得外部视野对于检查您的直觉和情绪非常有价值。与顾问和现有投资者会面也帮助我们获得了第三方对市场趋势和所面临问题的看法。

了解为什么你没钱

作为初创公司的创始人,您需要在四个维度的问题空间中工作:团队,产品,市场和时机。希望和梦想通常足以在种子期筹集资金,但根据我的经验,下一轮您不仅需要这些:您需要说服投资者,您是在正确的市场上为正确的市场构建正确产品的正确团队。正确的时机。

如果您已经筹款了三个月,但还没有得到检查,那么在这些领域中的一个或多个领域可能出了问题。了解问题所在对于弄清楚您的前进道路至关重要,而通过的投资者可以成为了解缺失部分的最佳来源。

直到最近,我还不太了解同时实现所有这些功能的复杂性,尤其是当您遇到了试图与各种投资论点和顶级公司的历史偏见相匹配的额外复杂性时。正如本·霍洛维茨(Ben Horowitz)所说:这不是跳棋;这是国际象棋。”获得有用的信息并不总是那么容易-大多数投资者似乎对冒犯创始人感到担忧,并且宁愿选择“没有足够的吸引力”这样的高级陈述,也不愿对他们在业务中看到的漏洞进行坦率的反馈。

我要感谢一些坦率并以此方式对我们有所帮助的人-Ashu Garg(基金会首都),Thomas Korte(天使基金会)和James Currier都是为我们提供了真正有见地,关键的反馈的人。

的 Founding Team Gut Check

从企业投资者的角度来看,有了一些诚实的数据点,您便拥有了您和您的联合创始人进行有关业务状况的直觉检查对话所需的信息。您可能会发现自己的产品,市场,团队或时机与投资者认为是本能的东西相冲突,因此您需要确定如何应对这种不匹配。

在我们的案例中,问题似乎主要集中在市场上-我们的目标是非常小的企业,这是一个分散的市场,在这个市场上没有历史先例可以在风险投资人获得10倍回报所需的时间表内建立大赢家。我们很清楚为这个市场服务的历史挑战,但是我们相信 由于许多新趋势,未来3-5年将在这个领域出现大赢家。很少有投资者同意我们的观点。

我们专注于小型企业 公司成立的原则之一,我们深信服务于这一市场的潜力。当我们推出Glyder并开始看到Glyder时,我们对服务于这一市场的信念越来越强。 使用者对产品的正面回应。基于这种信念,我们决定宁愿继续专注于这个市场,也不愿转向另一个目标市场,即使这意味着我们短期内无法获得资金。

与我们的团队就公司面临的挑战进行坦诚的坦诚交谈,这是衡量每个人对业务承诺的绝佳机会。没有更多的资本来建立我们的业务将很困难,但是当每个人都表达了继续前进的新愿望时,这使我对CEO感到兴奋,因为他对如何做到这一点感到兴奋。

向前进& Changing Tactics

保罗·格雷厄姆(Paul Graham)喜欢告诉创始人“成功的最可靠途径就是成为企业界的蟑螂。”这种类比对于孤立的初创公司特别有效,因为没有额外的资金,您就必须尽快变得有弹性,足智多谋和自给自足。这是我们在继续发展业务时所做的一些更改。

激励现有投资者保持参与和兴奋 

在我们开始尝试进行新一轮融资之前,我们给了现有投资者以相对优惠的条件向公司投入更多资金的机会。新票据的上限低于我们之前筹集的上限-尽管我们的业务往前走得很远,但融资环境也发生了变化,我们希望做出决定,以便使我们的新增资本变得容易现有投资者。

我们还回过头来,为所有将资金投入较高上限并改为较低上限的投资者修改了文件。这是不寻常的,不是法律要求的,这意味着我们正在放弃额外的稀释。

为什么我们会自愿增加稀释度?我们的投资者群体包括朋友&家族,天使和500 Startups的优秀团队。我们与大多数公司的关系早在这家公司成立之前就已开始,我们希望它们可以延续到未来。这些关系促使我们继续开展业务-他们以辛苦赚来的钱来信任我们,尽管他们都知道押宝于我们创业公司的风险,但我们想向他们展示结果。如果要做出我们更改上限的决定,稀释成本非常值得我们在投资者之间产生的商誉。这也表明了我们承诺即使在事情不按计划进行时也要诚信行事。

重新评估产品路线图

正如我们听到潜在投资者在试图筹集更多资金时所持的怀疑态度一样,优先考虑的产品是我们要改变的第一件事。我们不再奢侈地专注于通过获利实现的用户增长,因此我们的整个产品路线图都转移到了关注收入上。我们的应用程序曾经免费提供(以最大程度地增加注册人数),现在是付费下载。我们无法为不愿为自己的产品付费的用户提供支持。

降低燃烧速度 

除了将产品优先级转移到收入上,我们还大大降低了燃烧率,从而可以更快地实现盈利。这意味着放开几个团队成员-这是整个过程中最艰难的决定-并要求其余团队成员减薪(我们通过增加股权来减轻打击)。产品和消耗率的变化使我们能够在资金用尽之前实现正现金流。

准备战斗

除了业务上的战术变化外,过去三个月中我们所经历的过程在精神上和情感上也为我们的团队做好了前进的准备。我们知道我们是谁,我们正在努力,知道并且非常满意我们所采取的逆势立场,并且我们相信长期的机会值得我们付出的短期牺牲。正如他们所说 星期五夜灯清澈的眼睛,饱满的心,不能输。”


我认为 陈德安说的没错,“总是有另一招。”如果您是一家初创公司的创始人,并且紧盯着A系列紧缩措施,并且可以找到继续前进的意愿,那么您的工作就是找到下一步行动,并付诸实践。我希望看到更多关于公司如何坚持并克服悲伤的讨论。如果您正处于此过程中,并且需要有人反弹,请给我留言: @alanwells.
主题: 来宾 战略 资金
继续阅读

如何在不失去理智的情况下生存彻底的重写

通过 达摩什·沙(Dharmesh Shah) 上 2013年4月8日

又名: 拧死你,Joel Spolsky,我们正在从头开始重写它!

这是Dan Milstein(@丹米尔),的共同创始人 小屋8实验室.

披露:Joel Spolsky是朋友,我是他公司的投资者, 堆叠交换 (这给了不起的力量 堆栈溢出)-达摩什

所以,您知道Joel Spolsky的文章 你不应该做的事情,第一部分?他在其中紧急建议,无论如何,请上帝听我说,不要从头开始重写您的产品?并且列出了公司尝试这样做时发生的一系列重大失败?

首先,他是 完全正确。开发人员往往会低估这种重写所涉及的工作量(更多内容见下文),而高估了所产生的价值(以下内容也有更多之处)。

但是有时候,在某些罕见的情况下,您有理由重写产品的主要部分(您会注意到我已经转变为说您只是重写一部分而不是整个产品。请这样做如果您确实致力于从头开始重写整个内容,那么我不知道该怎么说。

如果您正在考虑进行重大改写,或者发现自己是该项目进行中的技术负责人,或者只是苦苦挣扎于该项目的战,中,则希望它有一天会结束...希望这篇文章是为了你。跳转重写

您好,我叫Dan,我做了一些改写

几年前,我加入了一家快速成长的创业公司 HubSpot,最后我在这里工作了好一阵子(顺便说一句,这真是很棒的经历-你们所有人都应该 约夫·夏皮拉(Yoav Shapira) 作为老板)。在该公司的第一年,我是一个小型团队的技术负责人之一,该团队完全从头开始重写了Marketing Analytics系统(HubSpot产品的关键功能之一)。我们重写了后端(从在SQLServer中存储原始命中数据到使用Hadoop处理命中并在MySQL中存储聚合报告);我们重写了前端(从C#/ ASP.Net迁移到Java / Tomcat);我们深入研究了十几个依赖于每个命中存储的应用程序,并找到了一种使它们与现在可用的数据一起工作的方法。 (注意:HubSpot现在主要由MySQL / Hadoop / HBase驱动。查看HubSpot 开发博客)。

花了很长时间。比我们预期的要长得多。

但是,它为HubSpot创造了大量价值。最终,非常重要的人们对该项目感到非常高兴。打包完成后,众所周知的“ Analytics 2.0”从某种意义上从“永远拖延的那个项目”发展到“那次真正成功的重大改写”。

的n, after the Analytics Rewrite wrapped up, in my role as 5个为什么协助者,我领导了验尸工作,进行了一次雄心勃勃的改写,进展并不顺利。我称它为“不快乐重写”。

从这一切中,得出了一些相当明确的教训。

首先,我将谈论为什么这些项目如此棘手。然后,我将讲一些来之不易的关于如何生存的课程。

为这个项目做好准备,永无止境

关于启动大型重写,首先要了解的绝对关键的事情是,它花费的时间将比您预期的要长。即使当您尝试折让通常的开发人员乐观时。原因如下:

  • 迁移数据令人难以置信

我假设您现有的系统中有很多有价值的数据(如果没有,恭喜,但我从来没有遇到过这种情况)。您认为,我们将建立一个新的数据库结构(或将其全部移至某个NoSQL存储区,或诸如此类),我们不知道,编写一些脚本来复制数据,这没有问题。

问题1:数据中以令人惊讶的方式编码出无数奇怪的废话。例如。 “如果我们应该使用自动生成的配置,则use_conf字段为1 ...但是仅当spec_version字段大于3时才使用。哦,几个月后,出现了这个错误,use_conf留为空白。几乎始终可以安全地假定它为空白时为1。除了购买Express产品的客户,我们应将其视为2“。您必须迁移所有数据,对其中的数据进行校验和,然后将其显示给用户,然后弄清楚为什么它不是他们期望的。您最终需要仔细研究提交历史,与已经离开公司很久的开发人员进行电子邮件交流,以及一行又一行的神秘旧代码。 (为编写本文做准备,当我向开发人员提到此问题时, 每一次 他们切断了我的咨询,热切地解释了他们在这方面所经历的一些特定的,糟糕的经历-真的很糟糕)

问题2:但是,等等,情况变得更糟:因为您有很多数据,所以通常需要  全部迁移。因此,当您很难找出转换数据时遇到的上述每个怪异的,困扰性的问题时,您最终要等待几天才能看到您的修复程序是否有效。然后找到下一个问题,然后重新开始。看着我的朋友斯蒂芬(一个典型的聪明的年轻工程师),他在《不快乐的重写》中担任技术负责人,每周工作80个小时中的70个小时,照看缓慢的数据进出口,这让我留下了生动而痛苦的回忆。因为它一遍又一遍地失败了。我真的无法传达这需要多长时间。

  • 缩小范围很难做到

对于未开发(非重写)项目,总会有(总是),随着您越来越接近发射,范围会大大缩小。您开始,期望做A,B,C&D,但是当您启动时,您会执行A的一部分。但是,通常,人们会很兴奋。 (而且,至关重要的是,他们忘记了自己曾经认为所有其他想象的功能都是绝对必要的)

重写后,将失败。如果您告诉他们,人们真的很不高兴:嘿,我们重写了产品中您最喜欢的部分,现在的代码更简洁了,但是我们删除了一半的功能。

您最终将花费这几个月的糟糕时间来实现所有这些您甚至没有意识到的奇怪情况。有人告诉您没有人再使用这些功能,而回填支持则是您在最后一分钟发现一些重要人员或客户所做的事情。还有,还有...

  • 的re turn out to be these other system that use "your" data

您总是会想:哦,是的,有这四个屏幕,我知道如何在新系统中为这些屏幕提供服务。但是事实证明,有六个cron作业直接从“您的”数据库读取数据。对于新客户,有一个初始化步骤,其中一些东西存储在该数据库中,然后再读回去。然后其他屏幕进行旁听以获取您的数据计数。等等,基本上,您尝试短暂地关闭旧系统,并且桌面上会出现一堆错误报告,这些错误报告是由很早以前离开公司但仍依赖客户的人编写的功能。这需要永远彻底解决。

好吧,我现在很害怕,我该怎么办?

您必须完全拥有业务价值。

首先,在开始之前,您必须定义此重写的业务价值。我的意思是,您应该始终了解所做工作的总体价值(请参阅: 兰德测试)。但是,在进行重写时,通常是技术负责人或一般的开发人员在推动重写-然后,了解价值绝对至关重要。因为您将发现意外的问题,并且必须做出让步,而整个过程将永远拖下去。而且,如果最后,签支票的重要人物没有看到太多价值,那对您来说就不是快乐的一天。

一件事:如果主要业务价值是“可能会变相的”新版本,那么开发人员将非常容易地非常小心。我并不是说这不是什么有价值的东西,但是,如果这只是您的唯一或主要价值……您将尝试在六个月内向您的CEO解释为什么在开发中什么都没做完最后半年。

解决“开发人员的哭声会减少”的关键在于,特别是要确定当前糟糕的系统阻碍了您的工作。例如。您无法通过安全审核吗?网站是否会以客户注意到的方式正常翻倒?是否有一些性感的新功能因系统太难使用而无法添加?识别出此类特定问题都意味着您正在谈论某件事  可观察的 业务的其余部分,并且当事情发生时,您就可以做出明智的权衡(就这样)。

例如,对于我们的大型Analytics(分析)重写,所涉及的开发人员 丹·邓恩,(我们团队中的(非常出色的)产品负责人),并列出了我们希望实现的业务可见的胜利列表。按优先级高低排序,这些是:

  • 将每个匹配的存储成本降低了一个数量级

  • 创建旧系统无法实现的新报告

  • 更快地处理所有报告

  • 提供近实时(而不是每天缓存)的报告

您应该知道:第一个隐约可见,非常大。 HubSpot的发展非常迅速,将所有命中数据存储为SQLServer中的单个行会产生各种额外费用。 Windows ops专家一直在不断尝试使新的SQLServer群集提前建立(这既危险又复杂,最终涉及到了代码库的其余大部分)。告诉销售人员不要向流量非常高的潜在客户销售产品,因为如果他们安装了我们的跟踪代码,它可能会破坏那些关键数据库(并且这种限制使销售过程陷入磨擦)。等等

解决“ SQLServer不再命中”的问题是一种很难的重写方式-只有在旧系统的每条痕迹消失后,您才能获得值。其他的,在列表的下面,当单个报表移到上方时,您会看到一些价值。这是要理解的关键区别。如果可能的话,您要确保自己不 只要 解决这种难题-在途中找到一些胜利。

对于“不开心的改写”,biz的价值并不十分清楚。因此,就像在这种情况下经常发生的那样,每个人都认为,在新系统的明亮,闪亮的世界中,所有他们自己的宠物都将得到解决。新系统会更快!它将更好地扩展!前端将是美丽,聪明和新颖的!它将使我们的顾客躺在床上喝咖啡,并向他们阅读文件。

当开发人员解决所有出现的意外问题,并不得不推迟发布日期时,他们逐渐意识到,看到实际结果时,每个人都会感到多么失望(因为所有令人敬畏的,梦-以求的东西被扔到舷外,试图把那该死的东西拿出来。这是一个令人,脚的地方,因为人们正在追赶你来完成早该完成的事情,所以这是一个令人app脚的地方,同样地,因为你知道那东西是一团糟,也同样让人感到压力。

好的,那么如何避免陷入这个地狱呢?

在增量主义祭坛上敬拜

在我的职业生涯中,我非常重视找出如何将大变化分解为小的,安全的,可创造价值的部分。这是一种元设计-设计逐步安全的更改过程。

肯特·贝克(Kent Beck)称之为 演替,并将其描述为:

“设计变更通常最有效地实施为一系列安全步骤。继承是一种艺术,即进行单个概念上的变更,将其分解为安全的步骤,然后为这些步骤找到顺序,以优化安全性,反馈和效率。”

我喜欢他称呼它为“艺术”,对我来说感觉很不错。这不是偶然发生的。您必须有意识地工作,与团队讨论替代方案,让某种产品所有者或经理参与进来,以确保您为客户提供的早期价值至关重要。这是一种创造性的行为。

现在,让我用愤怒的旧约先知声音说:当心错误的渐进主义!

错误的增量主义将一个大的变化分解为一系列的小步骤,但是这些步骤中没有一个能够自己产生任何价值。例如。您首先编写一个新的后端(但不要将其挂接到任何东西),然后编写一个新的前端(但不要启动它,因为后端还没有旧数据),然后迁移所有旧数据。只有完成所有这些步骤,您才可以拥有任何有价值的东西。

幸运的是,有一个非常简单的测试来确定您是否会误以为虚假的增量主义:如果每次增量之后,重要人物都要求您的团队立即放弃该项目,那么企业会看到一些价值吗?那是黄金标准。

回到我正在运行的示例:我们现有的分析系统支持数千名客户,并提供了大约六份重要报告。我们做出了以下早期决定:a)在编写新报告之前重写所有现有报告,并且b)完全重写每个报告,将其推送到生产环境,迁移该报告的任何现有数据,并切换所有客户。然后再转到下一个报告。

这是如何完全拯救我们的:3个月的重写(我们估计需要3-5个月),我们完全转换了一份报告。因为我们一直专注于整个生产过程,并专注于迁移所有旧数据,所以我们不得不面对整个流程将变得多么复杂。我们坐下来,做出了一个新的估算:完成所有工作并完全脱离SQLServer,大约需要8个月的时间。

此时,Dan Dunn是一位真正优秀的产品专家,因为他不惧怕艰难的权衡取舍,他说:“我想改变我们的工作重点,我想现在就建立Sexy New Reports,而不是等待直到我们完全脱离SQLServer。”我们说:“即使整个重写花费的时间更长,而我们今年不会退出SQLServer,我们是否必须构建一个我们希望避免建立的新集群?”他说:是。我们说:“那好吧。”

您想为其他更大的团队提供这种选择。经济上的权衡,他们可以在何时看到的选项之间进行选择。您确实真的不想说:我们还没有任何东西,我们不确定什么时候才能这样做,您唯一的选择是继续等待,或者取消该项目并亲吻您的沉没成本。

旁注:Dan做出了100%正确的选择(请参阅:优秀)。 Sexy New Reports受到了巨大的打击。尽快将它们淘汰会给企业带来巨大的经济影响。很好,因为该项目拖了一年的时间才可以最终终止SQLServer并完全淘汰旧系统。

对于您的产品开发人员来说,我们早期产生的一个有趣的价值只是对项目需要多长时间的更好理解。我相信这就是贝克所说的“反馈”。对企业而言,这是真正的价值。如果我们没有完全推送单个报告,那么我们可能会在3-4个月的时间内,在部分构建的新系统中拥有一堆数据(对于所有报告),而对整个报告的理解则更糟。削减一份报告的挑战。您可以看到反馈给我们带来的价值-它使Dan做出了更好的经济选择。我将发布我的每个博客帖子一次,建议您阅读Donald Reinertsen的文章  产品开发流程原理 了解有关减少不确定性如何为企业创造价值的更多信息。

对于不满意的重写,他们没有为这种增量交付制定出周密的计划。当它们完成时,某些完全很棒的事情将会发生。但是他们继续不做完,又不做完,然后发现更多的方式使他们正在构建的各个部分无法很好地融合在一起。在后Mortem中,有人将其总结为:“我们以某种方式将其变成了Waterfall项目,但毫无意义。”

但是,我必须一次全部切掉,因为数据总是在变化

人们对增量主义求助的原因之一是,他们意识到,要使其发挥作用,将会有一段较长的时期,其中对一条数据的每次更新都必须同时进入两个系统(旧的和新的)。这将是工程师的一大难题。人们会想到(甚至大声地说):“我们做不到,它将在项目上增加一个月的时间来插入双重写入层。这会使我们放慢速度。”

我要说的是:始终插入该双重写入层。 总是。这是一笔很小的费用,通常是一定的固定费用,可为您购买不可思议的保险金额。和上面一样,它使您可以逐步从一个系统切换到另一个系统。如果发现数据迁移方式存在重大问题(您将一遍又一遍),它使您可以随时退出。这意味着您的数据迁移可能需要一周的时间,这不是问题,因为您不必冻结对  在这段时间内的系统。而且,作为奖励,它浮出了许多“其他”系统直接将其写入旧数据库的怪异情况。

同样,我将引用肯特·贝克(Kent Beck)的话,介绍他们如何在Facebook上做到这一点:

“我们经常将大量数据从一个数据存储迁移到另一个数据存储,以提高性能或可靠性。这些迁移是继承的一个例子,因为没有安全的方法可以挥动魔杖并立即迁移数据。用途是:

将获取和变异的数据转换为DataType,即隐藏数据存储位置的抽象。

修改DataType以开始将数据写入新存储以及旧存储。

批量迁移现有数据。

修改DataType以从两个存储中读取,检查是否提取了相同的数据并记录任何差异。

当结果足够接近时,请从新存储返回数据并消除旧存储。

从理论上讲,您可以一步一步来完成此操作,但是它永远都行不通。我们的系统中隐藏了太多耦合。其中一个步骤会出问题,导致数据丢失或损坏的潜在灾难性情况。”

放弃项目应该总是摆在桌面上

如果3个月的改写在经济上是合理的,而13个月的改写是巨大的损失,那么您将意识到自己实际上要面对这两个中的哪一个,从而会产生很多价值。不幸的是,您坚持的时间越长,人们越难避免沉没成本的谬误。解决方案:如果您不确定需要多长时间,请对工作进行排序以立即减少不确定性,并给人们一些“完成的”东西,让他们走开。一个月后,您仍然可以说:我们决定只重写前端。或者:我们现在将只插入一个API层。或者,甚至:事实证明这不是一个好主意,我们正在走开。六个月之内,即使没有尽头,这也很难做到(即使从经济角度来看,这仍然是正确的选择)。

一些特定策略

收缩射线FTW

这是一个好主意,由Etsy的CTO Kellan Elliot-McCrea提供。他描述如下:

“我们称之为一种模式 收缩射线。它是旧系统仍然存在的图表。其中大多数以cron作业的形式运行,这些作业会重复代码库以获取密钥签名。有时,使用来自对组件的电线监控。有时会有排行榜。零时总是有一个聚会。一个大聚会。

可以很好地了解进度和范围,尤其是在项目进行过程中,并且可以很好地记录这些时间。 '''

我刚刚开始使用Shrink Ray进行重写,现在我要解决,我会说:这非常棒。它不仅为您带来上述胜利,而且还迫使您及早讨论 什么 您正在收缩,并且业务中谁在乎。如果您制作正确的图表,那么重要人物将看到它向下移动将会很兴奋。这是疯狂的宝贵。

Engineer 的 Living Hell Out Of Your Migration Scripts

将数据从旧系统迁移到新系统的代码是一次性脚本的集合,这很容易想到。您可以很快地编写它们,不要对它们进行太仔细的注释,不要编写单元测试,等等。所有这些通常都是对您仅运行一次的代码的有效折衷。

但是,如上所示,您将要一遍又一遍地进行迁移以使其正确。另外,您正在转换,求和并复制数据,因此,您确实非常希望某些单元测试能够找到您可以尽早发现的任何错误(因为“数据”是第一个近似值,“一堆不透明的数字对您没有任何意义,但是如果他们错了,哪个人会非常生气”。而且这件事将会发生,在那里有人会不小心碰到ctrl-c,并在第34小时杀死了您36个小时的迁移。因此,花费额外的时间使整个过程成为强幂等的,将会一次又一次地得到回报(通过强幂等) ,我的意思是,例如,您可以在部分运行失败后重新启动,它将执行大部分现有工作)。

基本上,将您的迁移代码视为头等公民。从长远来看,它将为您节省大量时间。

如果您的数据看起来并不奇怪,那么您看起来就很难了

最好的办法是,让您自己思考建立数据信心的问题,这是一项真正而激动人心的工程挑战。让您最好的开发人员之一来攻击旧数据和新数据,编写工具进行全部分析,发现有趣的不变式和校验和。

迁移和校验和的一个很好的经验法则:直到您在数据库中发现了六个奇怪的不一致之处  数据,您还没有完成。对于Google Analytics(分析)重写,我们在内部Wiki上创建了一个名为“ Data Infelicities”的页面。它必须非常非常长。

伟大的渐进主义带来强大的力量

我想通过总结一下来总结一下-如果您学会用这种凶猛的渐进式学科来进行重写,则可以毫无困难地解决棘手的难题。这是为您提供业务的强大能力。您可以逐步重写整个公司所依赖的那种令人难以置信的可怕系统。您可以将大量数据移动到新的数据存储中。您可以选择凌乱,半功能的开源项目,并逐步围绕它们开发新产品。

感觉真好。

---

你拿什么 是否愿意分享从史诗改写中学到的任何经验教训?

主题: 来宾 技术
继续阅读

为你推荐

的 best place to find me is 上 the HubSpot网络.

按主题列出

看到所有

主题帖子

看到所有

社区

让我们连接

而且,你可以找到我 Google+, 推特领英.

最近的帖子

与GrowthBot聊天

它是一个机器人,可以帮助您进行市场营销和发展。您可以研究竞争对手,改善SEO等等。 http:/GrowthBot.org