本文最初发布于 Sébastien Dubois博客,由 InfoQ 中文站翻译并分享。
我已经在当前的项目上工作了 20 个月,花费了 2000 个小时,并因此而错过做其它事情的机会“损失”了 20 万欧元(约合 139.4 万元人民币)。然而,这个项目还没有准备好,下面是它背后的故事。
作为一名已经工作了 10 多年的技术主管,我有着不错的薪水和一个很棒的团队,并且也能随心所欲地安排自己的工作时间,参与有趣或有挑战的项目。总的来说,我的工作没有太多可抱怨的。
但我受够了办公室政治的影响,并且厌倦把时间浪费在会议上。我真的很想辞职,做自己的老板,对周围的世界产生更大的影响。
于是在 2018 年初,我决定按照自己的心意尝试做别的事情。
我有一个朋友,他也愿意创造产品,于是我们开始一起头脑风暴。经过一段时间的商讨,我们最终产生了两个创业想法:
第一个想法是为学校创建数字化解决方案,帮助他们处理订餐、付款、考勤等问题。我们通过对自己孩子的观察后确信,确实存在需要解决的问题。比利时有一些竞争对手,但数量不多,而且我们国家还没有出现,另外我们还有一个很不一样的角度。
第二个想法是为餐厅创建一个数字平台,在上面他们可以发布 / 定制菜单,还有一个与客户建立联系的渠道 (例如,向他们发送促销信息),以提高忠诚度等等。
我们先针对学校的场景进行产品开发。由于我们两个人都是全栈工程师,在产品开发方面没多大问题。
我们也和一些学校进行了交流,遇到的人都非常热情,但他们担心自己无法获得资金来支付。此外,鉴于学校是公共机构之一,我们必须通过招标才能拿下项目。对于这一点,我也并不太担心,因为我曾在甲方待了很长时间。公开招标启动时,我们确信这值得一试,然而过了一段时间,我的朋友开始犹豫,并最终在没有知会我的情况下放弃了这个项目。我感到很失望。
好在之后,另一位朋友有兴趣加入我们,这也让我们团队产生了新的动力。我们决定放弃第一个创业想法,转向第二个。
这次我们走得更远,并且被一个创业孵化器接纳,帮助我们前进,甚至还准备了一份商业计划等等。虽然这个想法中途改变了几次,但最终还是进入到产品开发阶段。不幸的是,故事又重演了。
开发需要的时间比我的合作伙伴想象得要长,而潜在客户并没有立刻被说服,他很快就开始怀疑我们是否能真的卖出产品。有意无意地,他们的参与度与积极性几乎为零,而我仍在努力前进。
最后,我意识到他们不再参与其中,也就放弃了这些想法,我自己的动力也下降了。我再次感到失望。我之前预测一旦新冠病毒来袭,第二款产品就会大受欢迎,但与我们讨论的人当时并不感兴趣,他们害怕可追溯性,并且更希望能够避税。
2019 年 5 月,我通过前同事认识了一位正在寻找合作伙伴的商人。那个商人向我介绍了他们的项目,并把我介绍给第三位未来的联合创始人,他们已经在这个项目上进行了快一年的时间,目前正需要一个首席技术官。
他们的目标是创建一个 SaaS 产品 (B2B),帮助企业改进会议。这个想法听起来不是很吸引人,但我从经验中知道,如果处理不当,会议对于每个参会人来说都是浪费时间。因此,尝试挑战现状对我来说很有意义。
此外,我们团队的第三位联合创始人是一位精益教练,拥有一长串潜在客户,这使该项目更有吸引力。虽然没有从事 IT 工作,但她仍然设法创建了自己的方法和工具,并将其介绍给客户,取得了巨大的成功,所以这不仅仅是一个想法,而是有一个真正需要解决的问题,而人们愿意为解决方案买单。不用说,我很快就加入了他们,开始新的商业冒险。
在最初的几个月里,我深入研究了现有的代码库,通过技术堆栈进行了差距分析,并为项目构建了一个清晰的功能、技术和安全路线图。这个项目采用了 CouchDB(一个开源的面向文档的数据库管理系统),是因为最初的想法是尽早支持离线优先,以获得强大的差异化特性。我决定继续采用 CouchDB。
不过,我很快意识到这个项目几乎需要从头开始重新构建。因为现有的代码库存在太多问题,感觉更像是概念的实验品。我们分阶段改造,避免放弃一切。事后看来,这是一个错误的决定。
在 2019 年 5 月至 7 月,我们审查并完成了用户故事,创建了故事地图,设计了路线图,并明确了 MVP(最简化可实行产品)的范围。我创建了一个 wiki,将代码迁移到 monorepo(单一代码库),创建 / 清理了 backlog(待办事项),等等。而在 7 月到 9 月,我做了不同的工作:构建系统、Docker/docker-compose、持续集成、身份认证、国际化等。
这种全职参与项目的感觉真的很好,我可以真正地专注,按照想要的方式工作。我负责发布自动化,创建生产基础设施 (切换到 Kubernetes,尝试了 AWS,最终决定使用 DigitalOcean),实现了 HTTPS 支持、基本搜索、面包屑导航、注销、创建测试数据集、CLI 等等。
我们还带着产品预告片去了法国。我希望能够更快地推进 SaaS 项目,最好在 2019 年年底的时候可以投放到市场上。不幸的是,这个项目的进展甚微,我们在 12 月才开始制作会议屏幕 (重要且最复杂的屏幕)。
那一刻,我开始怀疑我们的方法 / 效率,我尽了最大的努力,但一切都感觉如此缓慢。与此同时,我阅读了关于其他人花费 1-3 个月发布他们产品的推文……我想知道我们做错了什么?我找不到答案。
在 2019 年底,我已经在这个项目上花费了大约 1000 个小时,这意味着,由于机会成本,我已经损失了大约 10 万欧元(约 70 万元人民币)。尽管如此,我还是决定让脑海里的小声音安静下来,集中精力向前走……我相信一切都是值得的。
因为在 backlog 中仍有很多东西需要处理 (重要功能、错误处理、重要的安全问题等),所以,我们把产品投放的最后期限推迟到 2020 年 6 月。
从 1 月到 6 月,我们在 SaaS 项目上几乎没有取得什么功能上的进展,一切都显得缓慢而艰难。我开始怀疑自己的技能和做事的方式。
我越来越“积极”地缩小范围,专注于要点,放弃或推迟一些非必要的功能,如离线优先 (已经花费了我们整整一个月的努力) 和移动支持。尽管如此,代码质量还是需要保证的。
我们意识到产品的 UI/UX(用户界面和用户体验)非常糟糕,特别是会议屏幕。我们决定聘请一名 UI/UX 设计师,工作 5 天费用 3000 欧元(约合 2.1 万元人民币)。但整合新的设计迫使我们重新设计系统的不同部分,例如,用 Tailwind 换掉 Angular Material、创建自己的主题、重构数据模型等等。
2020 年 6 月,我们还是没能完成会议屏幕,并且还有太多事情要做。所以我们又一次推迟计划到 2020 年 9 月。
在过去的一年中,由于工作切换,我们损失了大量的时间,我认为这是扼杀工作效率的最大原因。就我而言,每个月的周一、周五和两个周三都在做 SaaS 项目,一周中不得不在不同的任务之间切换,这一点都不容易,尤其是在士气方面。
除此之外,我的联合创始人(与我一起开发产品)需要大量的支持,在开始这个项目之前,他已经停止编程好几年了,所以对他来说比较困难。为了帮助他前进,每天我不得不多次停下手头的工作。不过我的联合创始人也有自己的优势,他是最具商业营销经验的人,拥有一定的人脉网络。
尽管如此,我仍然需要解决每一个技术问题,排除一切故障,处理补丁管理、漏洞修复、安全、文档、待办事项管理、规划等,这些庞杂的事务并不能帮助我们在市场上赢得时间。
此外,NoSQL 数据库让我们损失了大量的时间。很明显,由于离线优先的理念,坚持使用它是一个错误,而且有其它解决方案可以实现,我们将离线功能推迟到更晚的版本。并且我们的数据模型是重关系型的,没有理由再留着它,除了减慢速度,还给所有的操作带来了复杂性。
尽管这样,我们还是决定继续用它,考虑到切回经典的关系型数据库管理系统(RDBMS,Relational Database Management System)所需要的工作太多了,会把上线计划推更远。
我真的不知道哪个更糟:是浪费更多时间重新设计得更好,希望最终节省时间,还是冒着继续缓慢的风险在功能开发上奋力向前……我们选择了后者,但我不知道这是不是最优的。
从那以后,我们非常努力地添加授权,为不同的概念定义状态机(因为会议有一个对整个开发而言非常重要的生命周期),处理验证,以及应用程序中的各种功能,如富文本编辑、pdf 导出等,但我们仍然没有实现 MVP,虽然已经把它裁剪到最基本的要求了。
与此同时,我公司的银行账户就像雪花一样在阳光下融化。几个月过去了,虽然我们在某些方面取得了不错的进展,但速度慢得让人受不了。
2020 年 10 月左右,我们开始寻找融资方案。我们想获得一笔贷款,其中 50% 由欧洲投资基金支持,此外也许还可以试试从我们的国家或地区获得资金。我们会见了银行,准备了该地区的融资方案等等,但我们还没有获得资助。
更不幸的是,由于新冠来袭,我们曾经看好的客户(医院)显然没有时间来集成我们的解决方案,这意味着即使我们为他们准备好了,他们也没有好准备。所以,我们必须寻找其它的目标,并重新评估产品的范围,这促使我们设想“下一个”版本,还要包括能说服其他客户购买我们的解决方案,但以我们目前的速度和半工作的状态,这个版本将推到 2021 年底。
鉴于进展和市场的不确定性,我们开始考虑用其它的方式来引导,比如先从服务模式开始,然后再切换到 SaaS,这样可以换得一些时间,好让我们继续前进,但这点现在还处于头脑风暴阶段,一切还很模糊。
到了 2021 年初,我们又投入了一千多小时,至此我已经“损失”了大约 20 万欧元,因为我仍在这个项目上,而不是做其它事情….. 还有一个短期内还没有准备好上市的产品。
我现在已经花了 2 千个小时在这个项目上,感觉是一个很大的数字,但想到取得的成果是如此之少时,我几乎感到羞愧。也许这是正常的,也许不是,我真的尽了最大的努力,有时我觉得自己什么都不知道,也不擅长正在做的事情。我工作了很长时间,晚上和周末都在努力地让事情向前发展,但仍然太慢。
此时,我公司的银行账户明显处于红色区域,不超过 6 个月,我的压力值已经突破底线(即使我仍然保持微笑,看起来平静)。我继续半工半薪,今年这样可能会很长一段时间,我很想摆脱一切,能将 100% 的时间和精力投入到这个项目,但是现状不能。路漫漫其修远兮,疑虑重重。
也许保留 NoSQL 数据库的决定是错误的,也许工作切换才是真正折磨我们的原因,也许我还不够好,也许我们没有聚集在正确的事情上,也许我过于关注代码质量了,也许我一年前就该退出了,也许我们需要额外的开发人员,也许……
尽管这样,我内心深处还是想继续前行。首先,我仍然相信我们的团队,相信这个产品确实有意义,它可以真正帮助团队和组织更有效地工作。第二,我仍然精力充沛,有很强的韧性,不愿放弃。最后,也可能是因为我已经投入了太多的时间和精力,觉得如果现在放弃的话,一切都将付诸东流。
带着我所有的怀疑,以及损失的那些钱,庞大的工作量,还有那么多不确定的因素,我觉得进退两难,结束意味着输掉游戏,也可能让我错过一些重要的事情。而继续又可能意味着陷入沉没成本谬论,最终损失更多。我很难分辨,也没人知道,这两种情况都是可能发生的。
对不起,这篇文章实际上没有结论,也没有任何直接的问题。这就是我的故事。
让我感到惊奇的是,在 2020 年,我也花了很多时间写博客,抓住机会分享我在开发 SaaS 产品时学到的东西,月度经常性收入(MRR,Monthly recurring revenue)达到了 100 美元左右。虽然这没什么好吹嘘的,但却是我这一年的亮点。
也许这就是促使我开始写新书的原因,也许这是来自我内心的声音,它在说:“停下来!让我们试试别的吧!”或者只是因为我喜欢分享所知,帮助他人。
现在是凌晨 2 点,周一。今天,我将在 SaaS 启动项目上工作,这是我要做的,因为我还没有下定决心是否放弃。
关于作者:
Sébastien Dubois,作家、创始人和首席技术官。写过关于软件开发和信息技术、个人知识管理、个人组织能力和生产力的书籍和文章,同时也会制作一些可爱的数字产品。
原文链接:
https://dsebastien.net/blog/2021-01-04-20-months-in-2k-hours-spent-and-200k-lost-a-story-about-resilience-and-the-sunk-cost-fallacy
点击下方图片即可阅读
2022年Java生态现状报告:甲骨文人气不再,亚马逊正在崛起
你也「在看」吗?👇