3 分•作者: natyoung•5 个月前
过去十五年里,我一直在接触那些声称自己做了“CI/CD”(实际上根本不存在这种东西,CI 和 CD 是两种不同的实践)和“敏捷”的工程团队,但最终却每年都通过发布仪式和表演来发布产品。我厌倦了看到很多“黑暗敏捷”模式,所以我构建了一个项目管理工具来避免它们,并且这个工具的存在就是为了对抗那些鼓励这些模式的工具。 首先被抛弃的是故事点。即使是故事点的发明者 Ron Jeffries 也对它们的使用感到后悔。Mainline 将故事大小硬编码为 1,并跟踪每个故事是否超出了团队从开始到发布的正常时间分布。几周后,团队就能真正掌握他们的节奏,这有数据支撑,而不是靠扑克牌式的规划表演。无需估算会议,只需完成工作即可。 未发布的工作被可视化并作为库存进行跟踪。现在有一整个行业都在销售托管的特性标志平台,但它们与最初的技术理念不同。长期存在的、面向业务的标志会造成浪费,因为未管理库存会超出其使用寿命。最糟糕的情况是,它们会变成一个巨大的配置表面,而“技术债务”这个术语并不能充分捕捉到这种现象。Mainline 通过三个阶段跟踪分支抽象、暗启动、特性标志和进行中的旧故事:进行中、老化和陈旧。 待办事项列表被替换为故事地图。工作以用户旅程的形式呈现,如果它不在地图上(或没有关联的用户角色),那么它就不存在。这使得其他人更难将技术任务或随机工作倾倒给团队,以达到“拥有待办事项列表”的目的。 高绩效团队使用的协作模式是一流的。结对编程、配对编程和独立工作都是可见和可跟踪的,这使得去部门化清晰可见,并促进了共同所有权。 我抵制添加 AI 功能。这可能只需要一个周末就能完成,但也会破坏整个项目的意义。更详细的论述请参见 mainline.dev/docs/ai。 我最初使用事件溯源和 CQRS 来构建这个项目,因为我希望应用程序围绕一个不可变的事件日志构建。但最终这产生了太多的样板代码,以至于无法更改任何简单的事情。所以我改用了 RDBMS 和事务来实现不可变的事件日志。 在观察了数十个微服务团队彻底失败,无法安全地发布任何东西之后,我听取了自己的建议,从一个无聊的单体应用和 RDBMS 开始。这个技术栈本身就是故意无聊的:Ruby 搭配 Roda 和 Sequel,Puma 搭配 YJIT,通过 Kamal 部署到 Hetzner。 对于那些希望在 CI 方面做得更好的团队,我构建了一个与 GitHub 的集成(即将推出 GitLab),它会读取代码库的状态并跟踪分支(如果使用了任何分支)的打开时间。它只是在代码库上显示一个红/绿点作为提醒。 现场演示位于 mainline.dev/demo。无需注册,只读,因为它是一个共享团队。 我很感兴趣听取关于我还能如何帮助团队在 CI 和 CD 方面做得更好的反馈,以及您对那些使用其他工具来实施泰勒主义方法的非实践者的寄生管理层的任何不满。此外,还有任何我没有想到(或考虑删除)的功能。