CODING 在前两天的 Kubecon 2019 大会上发布了 CODING 2.0。这背后是 CODING 对研发管理和研发团队组建的思考。从 CODING 成立以来,我们一直在探索“让开发更简单”的方式。把“让开发更简单”这个大愿景进行拆分,具体到可量化的产品目标上去,实际上是希望通过工具的形式,可以减轻开发过程中的重复劳动,提高软件交付的速度与质量。

云端开发的初心

最开始做 CODING 的时候,脑海中的蓝图是开发者在这里讨论需求、布置任务、写代码,改代码,演示代码,完成相关任务,整套的开发操作都在这里。

所以当时的产品结构是:轻量级的任务管理 - 讨论 - 代码版本管理 - 演示平台
在这套产品体系下,产品经理会把任务指派给设计师,设计师完成设计后,产品经理验收后再把任务指派给研发人员,研发人员推送代码后,可以在演示平台做演示给产品经理验收。这是一套非常适合小团队的工作模型,流程简单,反应快速,CODING 自己团队也在使用,并且支撑了 CODING 产品前期的快速起步,快速上线,快速响应反馈的开发节奏。

企业在成长过程中碰到的实际问题

很快,随着 CODING 业务的发展,CODING 的产品线越来越多,团队也越来越大,当团队到达 100 人的时候(其中 60% 都是研发),我们发现团队开始"管不动"了,最终的上线质量非常依赖部门 Leader 的管理能力和开发者的自我修养。为了保证产品达到预期,我们制定了大量流程和规范,但这让我们的进度越变越慢了。我们一度非常苦恼,创业公司的优势在于极高的效率与极快的产品迭代,但如果我们在发展的过程中丢失了这样的优势,将会很轻易的被别人超过。

所幸我们并不是第一个碰到这个问题的人。《人月神话》中有个很著名的观点:

Adding manpower to a late software project makes it later.
-- Fred Brooks, (1975)

如果希望用增加人力的方式解决软件的进度问题,只会让进度变得更慢。”因为:

沟通成本= n(n-1)/2 n=团队人数

举例而言 10 个人的团队将有 45 个沟通管道,当人数到达 50 人时,这个数字将上升为 1225 个。随着人数的增多,团队内的沟通成本将指数级上升。了解到问题出现的原因,也就知道了解决方案:“我们需要更多更小的团队”——通过将团队分成若干个内部闭环的小团队来降低沟通成本。于是我们有了一个稍微敏捷一点的组织架构:

这个工作方式敏捷的很不彻底,问题在于运维。考虑到线上稳定性及系统的耦合程度,无法将运维拆到各个团队中去,各个产品线虽然有独立的产品经理、设计师和开发者,但需要运维协助上线测试环境,再由测试进行 testing 和 staging 两个环境进行测试验收。大量的时间被无用的等待浪费掉了。

同时,由于工作目的的不同,开发与运维的矛盾也日益加深,都觉得对方基础的工作没有完成。
团队陷入了困境。

我们需要 DevOps

困境中酝酿着机会,我们在与用户的交流中发现这也是大多数团队的共同苦恼:团队如何组织才能最大化的进行软件产出?各个角色之间天然的目标不同,使得”又快又好的上线“变得困难重重。

DevOps 的理念就是希望能打破这种屏障,让研发(Development)和运维(Operations)一体化,让团队从业务需求出发,向着同一个目标前进。DevOps 不只是通过工具辅助开发完成运维的部分工作,更是一种软件研发管理的思想、方法论,所追求的是一种没有隔阂的理想的研发协作状态。

实践 DevOps 的首要任务是需要对 DevOps 的目标和精神达成共识,并以此指导工作。据此,我们制定了从新的产品线开始逐步拆分微服务、优化白名单验收机制等改进措施,并制定了明确的时间表。长期来看,希望在更好的保证软件质量的同时,开发更少的依赖运维工作。

之后,团队开始尝试放大工具带来的效能提升。虽然之前也使用了不少工具,比如用 Jenkins 在本地构建持续集成,自建 Docker Registry 做构建物管理,使用 Excel 进行测试管理等。但相对零散,培训成本高,同时需要有人力进行选型搭建和维护,哪怕只放半个开发半个运维,一年也是小几十万的投入。

我们迫切的需要一套工具,上手即用,辅助我们提升研发团队的产出效能,而不是花费人力时间在进行基础设施的搭建上,但市面上完全没有这样的产品,我们的用户也存在类似的苦恼,只能用好几种开源产品进行搭建。

那 CODING 为什么不做一套这样的系统,让有同样困难的 DevOps 转型企业可以快速完成工具建设?“让开发更简单”作为 CODING 一直以来的使命和愿景,督促 CODING 团队为开发者提供更优质的工具与服务。加之 CODING 的核心业务——代码托管是 DevOps 工具的基础与支点,故从 2018 年年初起,CODING 就将产品目标调整至为企业提供一整套的研发管理工具。在一年多的努力下,目前 CODING 已经全面开放持续集成功能及制品库的 SaaS 版本的服务,支持所有主流语言以及多种目标环境。

DevOps 开发工具链:代码即应用

我们认为,在不远的将来,随着工具的成熟,我们将进入“代码即应用”(Code as a Product)的时代,开发者无需进行繁杂的其他工作,仅需完成代码编写,应用就自动运行,企业因此降低了运维成本,提升了软件研发部门的效率。

"代码即应用”对工具的要求分三个阶段:

  1. 持续集成阶段:通过持续集成工具,运行设置好的执行命令,避免重复劳动。
  2. 自动化部署阶段:构建的创建过程本身变得简单,无需学习额外的运维开发知识即可创建应用的发布方式。
  3. Serverless 阶段:真正做到发布无感知,代码写下即发布。

CODING 2.0 上线了持续集成及制品库的功能,标志着 CODING 正式进入持续集成阶段。用户仅需推送代码或合并请求,即可出发持续集成进行构建、单元测试、安全扫描等工作,并生成制品存储在制品库。提升软件交付的质量与速度,同时减少因为构建过程中引入“人”而带来的不确定性。

除工具外,CODING 还为企业提供研发流程实施的指导培训、敏捷训练等额外服务。目前已有几十家企业将 CODING 的 DevOps 工具应用到内部生产中,大大提升了团队 DevOps 转型的效率。

还有点想说的

中国软件行业发展时间短,发展速度快,人才储备时间短,地位也比较尴尬,哪怕是软件服务起家的互联网公司,随着公司的壮大,业务部门的地位也逐渐高于软件研发部门。除了在少量领域,中国企业在这一过程中,研发部门的内驱力往往被消磨殆尽。加之软件行业人力成本不断增加,作为支持和成本部门,管理者也容易将软件研发部门视为成本部门,思路往往是“能否降低成本”。

但如今,瞬息万变的市场环境对软件研发部门提出了很高的挑战,这是困难但也是机会。一支高效的研发团队,不光可以减少系统间的摩擦和浪费,让研发部门快速响应市场需求,还可以持续交付高标准的产品,让产品验证进入正循环,引领整个团队的价值实现。

但组建一支这样的团队,需要的远不止是工具,更重要的是团队领导者的经验,知识,和变化的决心。许多有先锋精神的团队走在改革的前面,CODING 在协助他们转型的过程中,也看到了他们因为改革所碰到的困难、权衡和进步之后团队爆发出的生产力。

我们希望可以看到更多的中国软件企业了解 DevOps 的精神,并应用到自己的团队管理中去,向中国和世界交付一流的软件产品。这个过程很难,但真的很值得。

点击使用 CODING 2.0
体验 DevOps 全工具链敏捷研发

CODING 2.0:为什么我们需要 DevOps的更多相关文章

  1. CODING 2.0 服务升级:一站式服务体系助力企业研发上云

    近日,CODING 在 KubeCon 2019 上海站上正式推出了 DevOps 的一站式解决方案: CODING 2.0,除了进行 产品 及 产品理念 的升级,还对用户服务进行了整体升级,主要涵盖 ...

  2. CODING 2.0 企业级持续交付解决方案

    "The key to DevOps transformation is that there is no end-state-we must continuously evolve.&qu ...

  3. 打通 DevOps 任督二脉 ,CODING 2.0 制品库全新上线

    CODING 在近期的 KubeCon 2019 大会上发布了 CODING 2.0,同时发布了最新功能--制品库.CODING 不断完善 DevOps 工具链,旨在持续提升研发组织软件交付的速度与质 ...

  4. 一图了解 CODING 2.0:企业级持续交付解决方案

    近日,CODING 在 KubeCon 2019 上海站上正式推出了 DevOps 的一站式解决方案:CODING 2.0. CODING 2.0 进行了产品.产品理念.功能.首页的升级,对用户服务进 ...

  5. 拥抱自动化,CODING 2.0 持续集成全新上线

    在文章开始前,做一个小调查,在您的软件项目中集成一行新代码平均需要花多长时间? 15 分钟 一小时 半天 一天及以上 注意这里的集成是指将源码放在一起,并验证源码可以作为一个一致.运行可靠的软件的过程 ...

  6. CODING 2.0:如何通过设计给品牌创造价值?

    升级背景 伴随着 CODING 理念的全面升级,CODING 正构建起覆盖构想到交付的全覆盖工具链,用户注册即可实践敏捷开发与 DevOps,提升软件交付质量与速度. 一直以来,CODING 作为软件 ...

  7. 如何0到1构建DevOps?

    从0到1构建DevOps,首先得弄清楚这个DevOps的受众群体,它的用途到底是什么,解决什么问题,比如Android Studio是为了解决Android应用的开发,3UCS xPlus是为了解决应 ...

  8. 十分钟 CODING DevOps 全链路体验

    近期 CODING 团队在 2019 KubeCon 大会上发布 DevOps 一站式解决方案:CODING 2.0.此次 CODING 全新上线了持续集成与制品库模块,通过自动化与标准化的方式来帮助 ...

  9. CODING DevOps 助力中化信息打造新一代研效平台,驱动“线上中化”新未来

    中化信息技术有限公司,简称"中化信息",是世界 500 强企业中国中化控股有限责任公司(简称"中国中化")的全资直属公司,依托于中国中化的信息化建设实践,建立起 ...

随机推荐

  1. Seata AT 模式启动源码分析

    从上一篇文章「分布式事务中间件Seata的设计原理」讲了下 Seata AT 模式的一些设计原理,从中也知道了 AT 模式的三个角色(RM.TM.TC),接下来我会更新 Seata 源码分析系列文章. ...

  2. 为什么说 Java 中只有值传递?

    对于初学者来说,要想把这个问题回答正确,是比较难的.在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的是,我也没有在网上找到哪篇文章可以把这个事情讲解的通俗易懂. ...

  3. oracle逻辑存储结构

    oracle数据库管理系统有三个重要的概念:实例.数据库.数据库服务器.oracle数据库的存储结构可以分为逻辑存储结构和物理存储结构.逻辑存储结构用于描绘Oracle内部组织和管理数据的方式,而物理 ...

  4. ES6——async函数

    目录 1.async 函数是 Generator 函数的语法糖. 2.async函数对 Generator 函数的改进,体现在以下四点. 3.基本用法 一个获取股票报价的函数 指定多少毫秒后输出一个值 ...

  5. Java修炼——四种方式解析XML_JDOM

    四种方式解析XML:DOM     JDOM    DOM4J    SAX JDOM使用前需要上传jar包. 先写一个XML栗子: <?xml version="1.0" ...

  6. 洛谷 题解 P1615 【西游记公司】

    我的程序只有1行... return scanf("%d:%d:%d\n%d:%d:%d\n%d", &a, &b, &c, &x, &y, ...

  7. [知也无涯]GAN对人脸算法的影响

    红绣被,两两间鸳鸯.不是鸟中偏爱尔,为缘交颈睡南塘.全胜薄情郎. 看到一篇GAN对人脸图像算法的影响,决心学习一个. 人脸检测 这也是我最关注的模块.文章推荐了极小面部区域人脸识别Finding ti ...

  8. Python爬虫根据关键词爬取知网论文摘要并保存到数据库中【入门必学】

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:崩坏的芝麻 由于实验室需要一些语料做研究,语料要求是知网上的论文摘要 ...

  9. 这些C++常用内置函数你会几个??

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:Regina520  新手注意:如果你C++学的不好,可以去拿我的C+ ...

  10. 使用iCamera 测试AR0331 300w高分辨率摄像头小结

    使用iCamera 测试AR0331 300w高分辨率摄像头小结 先看下sensor特性 分辨率最高可达:2048*1536=300w像素 1080p帧率最高可达60fps 本次使用usb2,帧率14 ...