当你用 AI 做的应用长大、撑破了第一版:重构还是重写

你上线了点东西。用户很喜欢。现在有了十个用户,可他们的需求塞不进你当初做出来的那个形状。这里教你怎么决定:是重构现有应用,还是承认它只是个原型、把它正经地重新做一遍。

你上线了点东西。用户很喜欢。现在有了十个用户,他们想要的功能塞不进最初的那个形状。你站在一个岔路口:是给应用打补丁去适配新的用法,还是承认第一版只是个原型、把它正经地做出来。这个问题害死的小项目比任何别的问题都多,因为它没有技术答案 —— 只有一个生意上的答案。

你意识到应用成功了的那一刻

大多数用 AI 做的应用,一开始是一个东西,后来变成了另一个东西。你给自己的教练业务做了一个客户登记表;现在客户想看过往的预约、想自己改约。你做了一个线索评分工具;现在你的销售团队想把摘要导出到他们的 CRM 里。你做了一个归档系统;现在人们想在里面协作。

每一个请求都合情合理。每一个都把应用从它被做出来时的样子上稍稍拽开一点。而到了某个点 —— 半年后,或者两个月后,有时是两周后 —— 你感到了那股阻力。你加的每样东西都在跟地基较劲。新功能动不动就要”哦,我们得先把那一块重新组织一下”。应用变慢了。改东西要花更久了。

那种感觉,就是你该想一想:这是不是还是同一个应用,还是说你已经把它撑破了。

重构能买到什么、又要付出什么

重构意味着保留同一个应用,但把它清理一下,好让你能在上面盖更多东西。你让 AI 构建器重新组织代码、拆开一个过于复杂的工作流,或者重新设计一个已经变成功能堆放场的界面。它要花几个小时。它不增加新功能。它只是让地基更牢固。

重构起作用的时候,简直像魔法。你本来感觉自己在跟应用较劲;突然之间,不较劲了。你在一周里加了三个新功能,搁以前得花三周。

但重构只在问题出在你现有东西的形状上时才管用。如果你做了一个登记表,而用户想要一个更快的登记表,那把慢的那部分重构一下,一个下午的事。如果他们想要一个既更快又能存储历史记录的登记表,那它仍然是一个应用,重构也许能帮上忙。可如果他们想要预约历史、日历集成、短信提醒和开发票,那你做的就不再是一个更好的登记表了 —— 你是在做一个教练业务的后台。那是一个不同的产品。

重写能买到什么、又要付出什么

重写意味着:你弄明白了这个应用真正应该是什么样,于是你打算带着这份认知从头把它做出来。你不会把第一版扔掉 —— 你的用户还在靠它过日子。但你从零开始做一个新的应用,由旧的那个教会你的东西来指引,然后等它准备好了,再把用户迁移过去。

重写让人感觉很浪费。你做出来一个东西,现在又要再做一遍。这是心理上的代价。实际的代价是时间:在新版本准备好迁移用户之前,你会在它上面花两到四个月。你再也没有第一版当拐杖了 —— 你是在没有安全网的情况下往前推。

但重写能给你买到一样别的东西都给不了的:自由。新应用不再被旧的那个的形状束缚。如果原来的是一个简单的表单、而新的应该是一个完整的后台,那你从一开始就为此而设计。如果性能要紧,那你就为它而设计。如果安全、集成或工作流要紧,那它们就不是事后改装的 —— 它们是地基的一部分。

那些重做之后成功了的应用,往往是因为团队对问题的理解已经离原来的代码偏得太远,再去打补丁就像穿一件不太合身的衣服。重写,意味着这一次是为他们自己而做。

三个问题,帮你在两者之间做选择

问题一:核心形状还对吗?

你的核心形状,就是那一两个定义了这个应用的主工作流。对一个教练登记表来说,它是”客户填写登记,教练审阅,教练排约”。如果你在加的是不同的工作流 —— 开发票、日历管理、客户消息 —— 那你不是在扩展核心,你是在往上拴侧功能。这是一个信号,说明你在做一个不同的产品,也就意味着要重写。

如果你在加的是同一个核心的各种变体 —— “个人登记、团队登记、带自定义字段的登记” —— 那它还是同一个应用。重构、然后扩展它。

问题二:如果今天重构,过多少个月阻力会再次袭来?

诚实点。如果阻力消失半年,那重构就是对的选择。如果它两个月后又会作痛,因为问题不在代码的形状、而在地基本身,那重写就帮你省下了”打两遍补丁”那种虚假的省钱。问你的 AI 构建器:“如果我们把这块清理一下,过多久我们又得再来一次?“如果答案是”大概用不了多久”,那就该重做了。

问题三:你的用户实际上在依赖什么?

如果你 v1 上有三个活跃用户、又在考虑重做,那你一两天就能把他们迁过去。如果你有五十个生产级依赖于当前应用的用户,那重写就意味着你得让两个版本同时正常运转好几个月,那本身就是另一种痛苦。

通常管用的那条路

大多数重做成功了的创始人,都是并行着做的:他们让原来的应用继续跑着,用富余的精力去做新的那个。等新的那个和旧的功能持平了,他们花一周时间迁移数据和用户,然后就完事了。

通常不管用的那条路:重构、重构、再重构,直到重构了三次,你才意识到架构还是错的,而现在你在”旧”版本上投入得太深,深到没法承认它、没法重新开始了。

决定的恰当时机

下次你感到那股阻力时,问自己:“我是在让这个应用把它本该做的事做得更好?还是在要求它去成为它从来没被设计去成为的东西?” 如果是前者,重构。如果是后者,那从一开始就把它本该是的样子做出来,没什么好羞愧的。大多数成功的应用,跑的都是核心的第 2 版,而不是第 1 版。