独立开发的利与弊:一位开源作者的实战复盘

我创建并维护着一款名为Luxury Yacht的桌面应用,用于管理 Kubernetes 集群。它就像 Headlamp、Lens 和 k9s 一样——就是那种类型的应用。Luxury Yacht 是一个独立项目,而要将它发展到如今的水平,着实经历了一番挑战。 接下来,我想和大家聊聊在过去六个月里,我在这一过程中所学到的一些经验与感悟。

但首先,为什么? 既然像 Headlamp、Lens 和 k9s 这样的应用已经存在,那我们为什么要自己动手做呢?我一直没有找到一款真正契合我的应用。我找到的最接近自己需求的,是Infra——我非常喜欢它,但它却早已被废弃多年。于是,我决定自己动手打造一款全新的应用。在开发的过程中,这款应用逐渐变得足够优秀,以至于我开始觉得,或许其他人也会喜欢使用它,于是便将其开源发布了。

维护 Luxury Yacht 几乎是一项全职工作,而且我是在业余时间无偿完成的。 它几乎占据了我大部分的夜晚和周末时光。 我可没抱怨!没有人强迫我去做这件事,我乐在其中。 我正在为自己创造一些真正实用的东西,并且有幸与他人分享这些成果。 此刻,我在GitHub 仓库 上已经收获了超过 350 个 Star,这种感觉真的很好。

优点 作为一款应用的唯一维护者,你拥有极大的自由度。这正是我最看重的一点。

• 我可以得到自己想要的完整应用,而且它的运行方式完全符合我的预期。 这种体验令人无比满足,如果你还没用过,不妨亲自试一试。 人工智能为许多人打开了这样的大门。稍后我会再详细说明这一点。

• 我可以一次性提交大量变更。我甚至可以创建那些大得离谱的 PR,而这些 PR 根本不会轻易交给别人去处理。

• 不用向任何人负责,只对自己的工作负责,这种自由感让人倍感轻松。 所有的产品决策都由我自己做出:如果我想要某个功能,就把它实现; 我不必为了赶上发布日期而削减或延迟功能,也不必与产品团队协商,以迎合那些我并不认同的方向。

• 我可以按照自己的节奏发布版本。有时候一天内可能发布几次,而如果我正着手处理一项特别庞大或复杂的任务,发布间隔可能会长达几周。

• 我不需要进行站会、冲刺、点数或燃尽图。当你独自一人时,那些本该妨碍你真正投入工作的流程和仪式,统统都不复存在。

• 我可以随心所欲地选择如何授权并发布我的应用。以我为例,我决定把应用完全免费开放给所有人。之所以这么做的原因有以下几点:

1. 我喜欢自由开源软件的理念,也乐于回馈那些曾为我付出诸多努力的社区。

2. 我在撰写 Luxury Yacht 时,大量运用了大型语言模型。如果有人要使用基于他人辛勤劳动训练而成的代码, 收取费用似乎不太合适。也许这种想法有些天真。

3. 我实在不想从事软件行业。我热爱创造应用,而不是经营一家企业。 了解这些关于自己的事情,有助于你享受当下的工作,避免因过度劳累而疲惫不堪。 也许我因此错失了一些收益,但我并不在意。 我更希望的是,能让自己感到快乐。

“优点”一栏中的另一类内容,是学习的机会。 你从项目中能学到什么,取决于你正在构建什么、如何构建它,以及你从何处起步。 至于我在开发 Luxury Yacht 过程中具体学到了哪些东西,我就不一一细说了——因为这些经验对我来说独一无二。 不过可以肯定的是,你会学到很多东西,因为这会迫使你去面对许多在日常工作中未必需要面对的问题。

缺点 然而,这种自由的背后,也伴随着责任。你必须对一切负责。单枪匹马地完成这一切,需要极强的自律性。如果你缺乏这种自律性,我并不建议你尝试这样做。

• 得益于人工智能,编写软件变得轻而易举,但写出优秀的软件,依然充满挑战。 即使你让大型语言模型来完成大部分代码编写工作,也要花不少功夫来防止代码变得杂乱无章。 目前的大型语言模型在上下文窗口范围内,难以应对大型应用的复杂性; 你必须时刻监控它们,及时引导它们,以免偏离轨道,生成垃圾代码。

• 我没有可以互相交流想法的人,除了那些使用这款应用的朋友。 我无法确定自己的设计选择是否正确,也无法判断自己的实现方案是否合理,更不知道自己在代码中是否犯下了初学者常犯的错误。 不过,我拥有丰富的平台/基础设施工程师的经验,而且我使用 Kubernetes 的时间,几乎和它诞生的时间一样长。我对这样一款应用有着相当清晰的期待,也希望自己所期望的, 也能成为其他人的共同追求。

• 不过……我其实并不真正了解自己的用户究竟想要什么。 Luxury Yacht 没有提供任何形式的遥测数据。虽然我很乐意这么说,但这意味着我完全不知道到底有多少人正在使用这款应用, 也不知道他们是如何使用它的。我也无法得知,哪些功能对其他人来说最为重要。

• 这可能会耗费大量的时间。正如我之前提到的,我大部分的下班后时间都花在了这项工作上——当然, 这是出于我的自愿。我并不受制于任何人,但我希望确保自己倾注心血、以我的名字命名的这个作品, 能够达到我所能达到的最佳水准。

• 你就是客户支持团队。每一个打开的错误报告和功能请求都会被分配给你。 每一个贡献者提交的 PR 都归你审核。你的应用越受欢迎,需要处理的工作也就越多。 而一旦陷入自己成功的陷阱,这种风险也是真实存在的。

找到平衡 你可能已经注意到,大多数的优点和缺点其实是一体两面。你可以尽情去做那些有趣又充实的事情,但你也必须承担那些并非那么令人愉悦的事情。希望享受的那些“可以”多于必须的那些。也许在真正尝试之前你并不会意识到这一点,但希望这篇帖子能帮助你更好地理解这一点。

对我而言,平衡恰到好处。我现在过得很开心。 能够打造出一款自己乐于使用的优质软件,让我倍感满足。 看到它被他人使用,更是让我倍感欣慰。 更酷的是,当我查看那些给仓库点赞的用户所在地时,发现他们来自世界各地。

讲个小故事吧。去年四月,我参加了在阿姆斯特丹举办的 KubeCon 大会。在一位朋友的建议下,我定制了一些 Luxury Yacht 的贴纸,并随身带到了大会上。

我把这些贴纸放在了公司展位上。

大会第二天,一位参会者路过我们的展位,看到了这些贴纸,然后说:“嘿,我用的就是这个! ”我回答道:“真的吗?是我做的!”随后,我们聊了一会儿,讨论了他为什么喜欢我的应用, 而不是他曾经尝试过的其他应用。这位朋友从德国远道而来参加大会,而我惊讶于, 一件由我亲手打造的产品,竟然能得到如此遥远地方的人们的喜爱。

正是这些点滴,让这份努力变得值得。

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论