← 返回日报
略读 预计 2 分钟

The development pipeline is a production system

摘要

作者提出软件开发团队应把开发管道(构建工具、CI / CD、测试套件、QA 环境等)视为生产系统,因为一旦这些环节故障,团队无法交付软件,对内部而言就是生产事故,应优先修复。文中列举了从需求到交付的各个组件,并类比制造业的装配线停机管理,强调现有运维流程多聚焦客户服务而非内部开发工具。

荐读理由

正文将开发管道故障提升到生产事故级别,提供了可迁移的优先级判断框架:当构建或QA环境中断时,应像处理客户生产故障一样投入资源。这能帮助你在团队资源分配时避免忽视内部工具链的隐性停机成本。

原文

The development pipeline is a production system

Software developers learn early in their careers that nothing is more urgent than fixing a production outage. Drop everything! All hands on deck!

However, the same level of urgency is not often given to problems with our development tools, build systems, QA environments, and other parts of the software development pipeline. But for the development team, the development pipeline is a production system.

A software developer’s job is to deliver value for the company. Sometimes that means building new features, sometimes that means fixing critical bugs for the customers’ production systems. But none of this can happen when something is broken in the software development pipeline.

If the code can’t compile, the developers are unable to do their jobs, and the team isn’t producing software. For the development team, this is a production outage. Fixing this should be a top priority.

If the QA server is down, the testers are unable to do their jobs, and the team isn’t producing working software. For the QA team, this is a production outage. Fixing it should be a top priority.

A software assembly line, on fire

You will not be shocked to learn that I drew this myself.

In manufacturing, there are extensive processes and procedures on how to prevent and minimize downtime on the assembly line.1 And similar processes exist for IT service outages. But I’ve found that most of those focus on outages in the service provided to customers, not for the people responsible for building and supporting the services.

I recommend thinking about all the components that take you from “customer wants something” to “that something is delivered to customers”:

  • Issue reporting and change request systems, like GitHub Issues, Jira, etc

  • Tools developers use to directly build software, like IDEs, build tools (Gradle, Maven, etc), package repositories (npm, Maven Central, internal repositories, etc), local databases, containers, etc

  • CI/CD tools (Jenkins, GitHub Actions, etc).

  • A failing test suite (surely you don’t deploy to production if the tests are failing?)

  • QA server outage (surely you don’t deploy to production if QA hasn’t tested it?)

  • Literally any step in your process that prevents you from making changes and deploying them to production

A team with a broken development pipeline can’t produce software, and must treat this as a production outage.


1 Interestingly, they often call it the "production line". Is the usage of the term "production" in the software world related to its history in the manufacturing world? ↩

Lobsters · 1 赞 · 0 评 讨论 → 阅读原文 →

这条对你有帮助吗?