如果你想发布一个副项目,那就先忘掉最佳实践

2025-05-27

如果你想发布一个副项目,那就先忘掉最佳实践

两年前,我在 Toptal 担任软件工程师的最后一周,当时我领导着一个 12 人的团队。从那时起,我就全职投入到我的项目开发中。那是我十年多职业生涯中最高效、最令人满意的几年。虽然我离打造一家可持续发展企业的目标还很远,但我在产品开发、文案、市场营销和销售方面学到了很多东西。在本文中,我分享了自己作为一名开发者在十几个项目中积累的经验教训。如果你和我一样,渴望创造新事物并追求独立,那么这篇文章就是为你而写的。

学习最佳实践

我作为职业开发者的最初几年过得非常艰难。在独立游戏开发者失败了几年之后,我成为了一名自由职业者,负责各种网页项目。我是一个你绝对不想在团队里看到的开发者。我长时间地投入到低预算的项目上,预算不切实际,这让我和我的客户都对最终结果感到失望。bug、错过截止日期、功能不符合预期,我都见识过。我虽然没有看到过积极的例子,但我确信项目开发一定有更好的方法。

在又一个项目失败后,我为自己打开了Ruby的世界,感觉就像一个全新的领域。Ruby社区极大地影响了我对开发、项目管理和商业的看法。我阅读了《Getting Real》以及所有能找到的关于商业和项目管理的书籍。我认真学习并尝试了所有已知的、旨在提高代码质量和生产力的方法。SOLID、TDD、BDD、GTD、SCRUM,等等。又过了几年,我才成为一名团队里令人向往的开发人员。

那段时间我一直在做一些业余项目。我启动了几十个各种各样的项目,从待办事项列表、工单追踪器到社交网络。它们占据了我所有的空闲时间,但我从未完成过任何一个。起初,我对某个想法感到兴奋,想出一套全新的、炫酷的技术,然后运用我历经艰辛学到的最佳实践来开发它。然后,我就会陷入困境,失去兴趣,或者突然冒出一个新的、更好的想法。当我辞掉工作,开始用自己的钱投资项目时,我很快意识到自己做错了什么。

尽你所能

团队合作中至关重要的做法,在单独工作时可能会有害。矛盾的是,要想做到最好,就必须做到最坏!

当有十几个人共同开发一个代码库时,必须确保系统设计良好、代码易读且测试覆盖率高。拉取请求只有在满足团队标准的情况下才应该被审核和合并。“我稍后再重构”这种说法在团队中行不通,因为工作量太大,而且下一个接触你代码的人很可能不是你。

当你独自工作时,遵循最佳实践会减慢你的速度。当你是唯一的代码所有者时,你可以推迟编写测试,直到遇到一个无论如何都不能出错的关键部分。即使到了那时,只需进行几个端到端测试就足够了。这并不意味着我完全避免测试。如果代码很容易通过单元测试编写,或者手动测试太难,我就会进行测试。

在代码设计中,没有什么比糟糕的抽象选择更糟糕的了。当我开发我的产品时,我更喜欢复制粘贴代码两遍、三遍甚至更多遍,直到我找到一个通用的模式,并且前提是我必须经常修改它。如果你永远不会修改代码,那么即使代码中有3个重复的部分也没关系。毕竟,重构的最终目的是让它易于修改。我认为这种认识仍然适用于团队,但你必须系统地进行重构,并在待办事项中保留一个工单,或在评论中记录。

过度关注性能是我经常犯的另一个错误。我们经常看到各种推文和文章,强调小代码包、快速响应时间或低内存占用的重要性。开发人员经常会因为公司工作马虎而批评他们,你可能会认为,如果不提供一流的体验,你的小企业就无法生存。但如果你的项目从未交付,真相就不那么重要了。人们不会仅仅因为你的产品加载时间不到一秒就购买它,但如果它解决了他们的问题,他们愿意等待5秒甚至更长时间。如果用户创建了大量内容,而你的页面性能不佳,那将是一个很大的问题,因为这意味着有人真的使用它。

如果你的产品从未发布或没有用户,那么无论你的代码写得多么好,测试覆盖率多么高,或者开发速度多么快,都毫无意义。而且,你的第一批客户往往是早期采用者,他们希望拥有成为第一个使用产品的优势,而过于精致的产品可能会让他们觉得为时已晚。

坚持使用你已经了解的技术

在整个职业生涯中,我都在追求更优秀的编程语言、最新的框架以及最高效的基础设施管理方法。我启动的每个业余项目都至少尝试了一项新技术,但由于大部分时间都在钻研和学习新概念,我从未真正投入到实际项目中。毫无疑问,这对我的职业生涯大有裨益,因为我学到的东西比普通工程师多得多。这让我成为了一名真正的全栈开发人员,能够胜任从基础设施到前端的所有工作。它也帮助我满足了对新技术的热情,同时又不会因为在生产代码中进行实验而损害我的雇主。

当我开始我的独立开发者之旅时,我更倾向于直接上手,而不是学习,所以我决定坚持使用我最了解的技术栈——JavaScript,无论是后端还是前端。尽管我有能力自己管理基础设施,但我还是选择了 Firebase 平台,它提供了从静态网站托管、服务器到托管数据库的一切功能。它并非最理想、最高效、最优雅,但凭借我之前的经验,它帮助我快速启动并专注于产品。

说到底,我学到的大多数技术都没用上。而且有很多优秀的创始人,他们之前没有任何编程经验,却通过实践自学编程,赚的钱比我多,速度也快得多。这让我怀疑这一切是否值得。

如果您的唯一目标是学习新东西,您可以忽略我的建议,但如果您想要交付,请避免在必要时使用新技术。

保持精益

多年来,我一直都在以质量为先的公司工作。部署半成品产品是不可接受的,因为从核心功能到细节,各个层面都无法提供符合标准的体验。如果用户输入姓名,就必须有相应的设置。如果有列表,就必须有分页功能。等等。

在规模较小的时候,即使是像名称设置或密码恢复这样的标准功能,也可能会占用原本可以用于更重要事情的时间。当我在设计我的第一个大项目“ Ask User” ——一个网站小部件时,我注意到自己在首次发布时不必要的细节上花费了太多时间。我开始削减功能,直到只剩下能够解决主要问题的功能。在开发过程中,我决定更进一步,跳过了最初看起来绝对必要的功能,比如删除已创建网站的功能。我原本计划在发布后再添加这个功能,但令我惊讶的是,用户并不在意。他们想要的是完全不同的功能,而这些功能我最初根本没想到。

然后,我花了数周时间编写计费系统,却发现人们并不准备为我解决的问题付费。对于下一个项目Telepost,我决定让用户通过 PayPal 付款,结果成功了。后来,我添加了一个“激活专业版”按钮,它除了显示“我们很快会与您联系”的消息外,什么也不做,并向我发送一封包含用户详细信息的电子邮件(使用 Zapier)。然后,我会与每位感兴趣的客户单独交谈。在交谈中,我能够推销我的产品,并听取他们关于为何不愿付款的反对意见。这不仅节省了我的时间,也帮助我根据用户的需求调整项目。

尽快获取反馈并据此改进产品,这必须是你的首要任务,因此,要优化产品以加快发货速度。尽可能地削减功能,然后再削减更多。

后记

感谢您阅读我的文章。希望它对您有所帮助。我试图概述我作为一名开发人员学到的最重要的经验教训,但还有很多内容需要讲解!如果您喜欢,请告诉我。我计划发布更多关于这个主题的文章,包括更多面向业务的文章,如果您有兴趣先阅读,请在 Twitter 上关注我

封面照片由Unsplash 上的chuttersnap友情提供

文章来源:https://dev.to/kossnocorp/if-you-want-to-ship-a-side-project-start-with-unlearning-the-best-practices-5b1l
PREV
终极 React 阅读清单:2024 年必读的 15 篇文章
NEXT
在前端保护 API 密钥的最快方法(几分钟内)