Pipedrive如何在每天部署50+次的情况下支持质量发布?

2020 年 11 月 08 日

Pipedrive如何在每天部署50+次的情况下支持质量发布?

“我把每一天都看作是比昨天高出一个档次的机会——无论是在服务质量、交付、速度还是业务的其它任何方面。”

— Daniel Snyder

介绍 — 速度 Vs. 质量


客户总是在寻找有效的解决方案,来满足他们已经确定地需求,并为他们节省资金。在企业致力于生产高效、节省成本的东西时,他们也希望自己的产品被认为是高质量的——Pipedrive 也不例外。当你开发一个产品,不仅提供一流的功能,还经得起时间的考验,然后你就拥有了一款客户满意且自己感到自豪的产品。


然而,我们不应该忽视另外一个指标的价值(它也会影响质量)——交付速度。关注交付速度是为了确保竞争优势。平均上,Pipedrive 每周向生产环境进行大约 500 次部署,拥有超过 250 名开发人员,没有专门的测试部门。


问题是,速度是以质量为代价的。此外,保持平衡也需要一些努力。我们十年来是如何保持速度和质量的呢?在深入讨论这个问题之前,我们先来讨论下我们在 Pipedrive 遵循的流程。

Pipedrive 的“幕后”流程


为了弥补不同团队同步工作之间的沟通差距,我们在软件开发过程中遵循 DevOps 原则。这额外促进了实现更快的交付和反馈。


为了在不妨碍团队发布流程的同时采用 DevOps 流程,我们几乎不需要专门的测试专家。在我们以开发人员为中心的环境中,开发人员负责测试和部署他们的变更。我们通过依赖专注于测试自动化的持续测试(Continuous Testing)来弥补差距。


我们没有提供一个安全网来捕获失败,而是帮助团队适应失败。为此,我们引入了几个专业团队,例如 DevOps、SRE、QA 分析师、支持工程师、基础设施工程师、敏捷/个人教练等,他们支持所有的开发小组:围绕特定产品领域的产品开发单元。


例如,站点可靠性工程(Site Reliability Engineering,SRE)团队专注于与产品和开发团队协作来创建可伸缩的架构,同时提高我们服务的性能、稳定性和可靠性。


既然你们对于 Pipedrive 的运作流程已经有了比较好的理解,我们将进一步讨论我们是如何保证快速交付和内在品质的。

我们如何保持交付速度

一个完全自动化的发布流程


平均上,我们每周自动测试和执行多达 500 次部署(你可以在“Fueling the Rocket for 500 deploys per week”这一文章中了解更多关于我们如何实现这一点的信息)。

功能标记/切换


在我们的持续交付系统,我们希望将新功能作为我们日常发布的一部分。如果功能还需要一些时间来完成,代码在这些日常发布期间被一个功能标记禁用。这使得我们可以增量地将代码推送到生产环境,每次发布都非常小且易于管理。

任务框架


我们采用了我们自己的 Pipedrive 敏捷框架,开发部门专注于产品领域,与工程小组一起协作。使用这些小组的一个好处是,他们专注于特定时间的某一特定功能,最终提供更快的结果。(你可以在“Scaling Pipedrive Engineering — From Teams to Tribes”这一文章中了解更多关于这个框架的信息。)

我们如何保持软件质量


在 DevOps 中保证质量仍然是一个令人生畏的难题,你需要投入更多精力来平衡质量。


下面是一些可行的方法:

可控的发布


为了逐步推进并控制新功能的持续交付,我们使用了(上文提到的)功能标记。我们采用了分阶段的方法,这样只有一部分用户可以访问这个功能。如果我们的支持票和监控显示最初的发布是成功的,我们会逐步增加到 100%的用户都有这个功能。通过这种可控的方法,我们确保以最小的风险向客户引入新功能。


测试自动化


我们依赖专注于测试自动化的持续测试。测试自动化使我们能够快速高效地进行测试,并且参与的员工更少。测试自动化发生在一个 CI/CD 流程中,向团队提供快速的反馈,这反回来又支持了频繁发布。


可操作的数据


我们使用与客户满意度直接相关的可靠指标。我们还收集客户反馈来了解更多关于客户体验的信息,并跟踪客户 NPS 的变化,将其作为客户满意度当前状态和潜在流失风险的一个指标。


除了测量 Pipedrive 如何被使用之外,我们还测量我们的项目运行效率、任务/启动板运行方式以及 bugs 的已创建 vs.已解决的数量,等等——必要时采取行动。



Grafana 的 DevOps 指标仪表板


最后,我们还跟踪质量相关的指标。目前,我们主要的质量指标如下:


  • 产品稳定性——向客户表明产品整体的总体稳定性。*这个数据受事件数和持续时间影响。

  • 严重事件——数量、持续时间和受这些事件影响的功能

  • 生产环境引入的bugs——这些bugs的总数以及这些bugs打破他们的SLA的数量

  • 支持工程中的新报告案例——客户报告的关于他们所遇到的问题的案例。


重要的是,对于我们收集到的指标,趋势是可见的和可观测的——为我们指明了特定领域发展的方向,这使得数据驱动的软件质量决策成为可能。这些指标在 Tableau 收集,然后每周共享到一个专用频道。



在 Tableau 中我们的质量关键指标的主面板


所有这些指标都是在组织中获得认可并为质量问题带来可信度的关键部分。

利益相关者一致


我们广泛使用可操作的数据。例如,每周向利益相关者(例如工程经理)提供工程运营指标。这提高了可见性并在整个组织实现了数据驱动的质量决策。

QA 分析师


我们采用 QA 分析师的角色来支持产品组织和各种工作小组来确保应用程序在最重要的领域得到足够的测试,识别自动测试的机会,并通过在需要时组织 bug 脚本会话来支持手动测试需求,等等。他们的重点是全组织的质量相关倡议、度量可视化、分析和任务规划。

QA 大使


还有一个专门的轮换角色,把更多的注意力集中在日常开发过程中的软件质量上。这个角色专注于提高人们对质量的认识和兴趣,推动质量相关的倡议,并帮助在各个工作小组内做出更好的质量相关的决策。

对延期零容忍


QA 分析师和大使为客户辩护,帮助避免拖延质量问题。有时候,由于上市时间的压力而超出你的控制范围,但是只要有可能,他们都会鼓励团队立即修复问题,以免问题一直累积。

内部测试


对于一些重要的领域,我们的员工可能被要求使用我们制作的软件的预发布版本来发现问题并提供反馈。


“完成”的定义


在我们的发布/预着陆检查清单中,我们有一套定义“完成”的标准。我们创建了这种检查清单以及任务/项目文档,提醒我们在发布期间应该做什么,来满足一定的技术成熟度。



预着陆/发布清单摘录


为了从模板中创建一个合适的检查清单,我们将[从模板宏创建]添加到一个创建子任务的任务页面。

倡导质量的明确政策和协议


为了达到和维持所需的流程和软件质量,需要遵循特定的政策和指南。


这种协议的一个例子是,生产缺陷管理流程。它的目的是识别影响生产环境的 bugs 并对其进行优先级排序,使它们与 ETA 保持一致,以确保这些 bugs 被及时处理,从而最小化对业务的影响。


重要的是要记住,即使是不严重的问题也会对客户的质量感知产生复杂的负面影响并降低产品的可用性。


结论


那么怎样才能在速度和质量之间取得平衡呢?没有简单的答案或神奇的方案,但你可以从我们正在努力创建的东西和我们尚未完善的东西中获得一些灵感:


在生产中测试


在生产中测试是实现速度/质量平衡的方法之一。通过提前发布软件并采用允许用户测试的实践,一旦软件投入运行,开发部门就可以缓解风险。决策可以由实际用户与生产软件的交互数据来驱动。


DevOps


另一个直接的方案是采用 DevOps 和 SRE,而且通过减少上市时间并带来更多透明度和稳定性,它帮助我们以更好的方式与公司合作


质量文化


质量文化非常重要!根据《哈佛商业评论》(Harvard Business Review),拥有强烈的质量文化的公司所遇到的错误比没有质量文化的公司少一半。这会转变成真正的商业价值:提高你的质量文化能节省一大笔钱,并带来更高的用户满意度。


对问题的信心


综上所述,一个人需要良好的常识。如果你已经验证了问题并证明它对客户非常重要,那么你就不应该走任何捷径——而是应该尽可能以最佳质量实现解决方案。


下一步行动


不仅如此,我们还将引入新的 mini-live 或基于区域的 canary 部署,这些将被用来在新的部署被传播到更广的客户群之前对这些部署进行验证。我们还开始着手创建质量和测试相关的培训。接下来还有很多事情,但这会在以后的另一篇文章中讨论。


作者介绍


Valeriia Iuzhakova是 Pipedrive 的一名首席 QA 分析师。


原文链接


How Pipedrive Supports Quality Releases while Deploying 50+ Times Per Day


2020 年 11 月 08 日 23:05950

评论

发布
暂无评论
发现更多内容

架构师训练营第 1 期 第 9 周作业

李循律(祥龙)

极客大学架构师训练营

软件测试系统学习流程和常见面试题

测试人生路

软件测试

从基础设施到云原生应用,全方位解读阿里云原生新锐开源项目

阿里巴巴云原生

阿里云 云原生 开源项目

第九周 性能优化(三)总结

钟杰

极客大学架构师训练营

披星戴月地辛苦割胶或成历史,海南胶园迎来这一“神器”!

华为云开发者社区

云计算 大数据 IoT

一个隐藏在方法集和方法调用中且易被忽略的小细节

新世界杂货铺

golang 后端

字节跳动内部授课课件:附图讲解MySQL底层索引结构算法实现

小Q

Java MySQL 学习 编程 面试

云原生趋势下的迁移与容灾思考

阿里巴巴云原生

云原生 迁移 容灾

区块链加持,鉴定溯源双保险,科技赋能茅台老酒成零售数字化标杆

CECBC区块链专委会

区块链 大数据 防伪溯源

LeetCode069-x的平方根-easy

书旅

go 数据结构 算法

0到1产品需求整理分析模型参考

燕陈华

产品设计 产品需求

Serverless 架构就不要服务器了?

华为云开发者社区

云计算 Serverless 架构

排序与二分

落曦

解读下一代网络:算力网络正从理想照进现实

华为云开发者社区

AI 5G 网络 云技术

上线操作规范——基础版本

程序员架构进阶

团队管理 开发流程 发布流程 规范

Java程序员说:世界上有三个伟大的发明【火、轮子、kafka】

Java架构师迁哥

iOS AOP 方案的对比与思考

GrowingIO技术专栏

ios aop

数字货币步伐加快,苏州将于双十二推出数字人民币红包测试

CECBC区块链专委会

数字人民币

字节面试数据结构与算法:B+树的删除和插入,不够详细你打我

小Q

Java MySQL 学习 面试 算法

开发霸总:我要让所有人知道,这个扫码组件,被你承包了

蚂蚁集团移动开发平台 mPaaS

支付宝 uniapp mPaaS

Minikube-运行在笔记本上的Kubernetes集群

网管

学习 Kubernetes k8s minikube k8s入门

除了类 Excel, SpreadJS 表格控件还能为系统开发带来什么价值?

Geek_Willie

数字货币将使货币政策实施更精准有效

CECBC区块链专委会

数字货币

一次浪费时间的面试

escray

面经 大龄程序员 面试经历 101次面试

详解企业管理系统工作流配置

Marilyn

敏捷开发 工作流 软件架构

为什么你的“开发速度”和“产品性能”,都比不过竞品?丨开发者必读

Geek_Willie

从浑浑噩噩到拿到腾讯T9 offer,看看我是怎么做到的

linux亦有归途

MySQL Linux C/C++ 经验分享 技术分享

迁移到 Atlassian Data Center 并没有您想象的那么可怕

Atlassian速递

负载均衡 高可用 Atlassian Jira

华为云MVP付健权:从机械工程师到AI开发者的华丽转身

华为云开发者社区

AI 转型 工程师

阿里云原生中间件首次实现自研、开源、商用“三位一体”,技术飞轮效应显现

阿里巴巴云原生

阿里云 云原生 中间件

“人上人”大专学历,通过系统的六个学习步骤,艰难4面终砍offer,“跳进”字节跳动

Java架构追梦

Java 架构 字节跳动 面试 微服务

Pipedrive如何在每天部署50+次的情况下支持质量发布?-InfoQ