不得不在家办公后,技术人如何在线研发?
阿里妹导读:为响应国家号召,各“大厂”纷纷发出在家办公,延迟上班的通知,一时间“在线协同办公”成为热点。不同于大型集团公司,有足够财力和能力构建远程办公系统,中小企业既缺乏足够的预算又缺乏相应的经验。阿里云云效一直致力于成为数字企业的研发效能引擎,在这个特殊时期,我们希望可以将自己的经验和工具分享给中小企业,让他们在家也能安全高效地开发软件。因此我们特别邀请了阿里巴巴高级技术专家张燎原,详解“在线协同开发”的要诀。
在线研发协同的基础是高可见性及快速连接
为了应对互联网业务的复杂性和不确定性的特点,现代软件开发,逐步过渡到以客户导向,小团队(单兵)作战能力,快速链接生产要素,持续快速高质量地交付有效价值的方式。分工越来越细,整个软件生产的过程,就是分而治之地解决问题,然后持续地集成发布的过程。
这种软件开发方式,谁拥有更高的机动灵活响应能力,和更高的协同性,谁就能在竞争中抢占先机。
互联网技术让互联互通变得异常简单。通信技术的发展,对互联网应用起到了极大的促进作用。即时通信工具,也已经超越了聊天的功能,钉钉项目群、钉钉视频通话、钉钉视频会议,再到其平台演化出来各种OA应用,助力快速连接。
协同的基础之一就是连接,从人之间的连接,到人与物之间的连接,快速实现组织在线、沟通在线和协同在线。
生产工具的发展,显著提升了软件生产过程的可见性。研发过程的在线化,让软件工程的可见性到了前所未有的新高度。生产工具的进步,已经让生产过程没有任何秘密可言,隐性的工作逐渐显性化。而协同的基础,就是信息的共享,生产过程的可见性。为人们所熟知的Scrum开发框架中,将透明性(Transparency)列为三大支柱之首。
注:Scrum三大支柱分别是:透明(Transparency),检视(Inspection)和适应(Adaption)。
软件架构与部署方式的演进,有利于分工协同。根据康威定律:设计系统的架构受制于产生这些设计的组织的沟通结构。那么,反过来,系统设计的架构,也反作用于沟通结构及软件的集成方式。同时,在云开发、中间件、中台化策略的大环境下,业务层更多关注在业务创新上,分工变得越来越细。
部署架构的演进,也让系统中的局部,可以独立持续部署。小团队,或单兵的价值体现越来越大,而团队与团队之间,人与人之间的连接,也从传统树状的方式,逐渐往网状的方向演进。协同,就是在这样的网状环境里,能够清晰地识别出需要连接的生产要求,然后快速在线协同。
对于知识经济活动,高可见性,快速连接能力意味着灵活协作的可能,而在线化是这一切的基础,在线化让人们有机会在任何时候任何地方,快速集结、组织协作,让SOHO这样的远程办公方式成为可能。
在线化,是数字化协作的基础,为未来智能化的演进创造了可能的条件,这是现代化软件研发手段演进的趋势。
下面,我们将从“研发协同”, “代码协同”及“发布协同”三个方面,阐述如何在线协同,身处不同地域,不同时区的你我他,能够快速连接起来,真正进入到数字化研发时代。
在线项目协同
需求协作,从拉通和可视化端到端的价值流动开始
可见,是协作的基础。通过电子看板,以需求为流动单元,端到端可视化价值流,以流动效率为核心组织需求交付。可视化端到端价值流必须做到:价值驱动,即每一个流动单元体现的都是体现用户价值的业务需求;前后拉通,即可视化的目标是“端到端”的价值流,始于用户问题的提出,终于用户问题的解决。
我们可以通过以下三个标准来检验可视化的效果,即:
是否能反映端到端的交付过程
是否能即时体现影响价值流动的瓶颈和问题
是否能依据可视化的信息进行协作和做决定
同时,打通从项目协作到软件发布的全链路,代码提交和发布信息同样可以即时反映到需求卡片上,集中及时的工作状态同步,减少沟通基本靠吼的套路,使得项目管理的目标更关注在价值交付和问题解决上。
管理价值流动,构建价值反馈闭环,让交付更可控
软件交付的关键,是客户价值的流动,而组织壁垒、沟通延迟、协作阻塞是主要障碍。基于端到端可视化的价值流看板,产品需求排期,还是团队每日站会的任务指派,围绕需求看板,来组织日常的项目协作。自右往左检视需求的交付状态,从测试工程师、开发工程师到产品经理,跨职能协同。同时,需求的任何风险及问题,高亮显性地展示在看板上,以钉钉等即时通信工具,快速反馈到责任人,做到即时发现、即时响应,就问题快速链接集结。
形成从需求规划、需求排期、每日站会,再到需求复盘的完整价值反馈闭环。从整体交付节奏上,形成月规划、周排期、日站会的节奏。而这一切,完全可以通过在线化的电子看板进行。
限制在线品数量,加速业务需求交付
影响需求(价值)流动效率的关键是批量和并行,通过限制在制品数量(我们称之为束水攻沙),加速需求交付。同时,数字化协作,有利于研发过程中,效能数据的沉淀,建立效能改进的基线和愿景目标,以客户响应周期和质量提升为目标,驱动问题的发现和解决,建立持续改进的基础。
在线代码协同
代码协作是代码集体所有制(Collective Code Ownership)
团队成员共同为代码负责。基于Git分布式版本控制系统,实现了基本的代码托管理能力。在当前的代码协作概念中,分支即是协作的载体,世界各地的开发者们可以根据产品需求,建立不同分支,同时开发。恰当的分支模式,让分散的工作,快速集成在一起,并在版本上可追溯。每个代码库的readme信息详细说明代码设计,建立基本的代码质量管理标准(如单元测试和自动化的增量代码静态扫描),保证持续增量代码不会影响到已有功能,让协作成为可能。
提升代码的可见性,助力代码协作
无论从简单的复杂度、重复度分析、依赖分析,再到领域语言识别,安全敏感信息识别等,像阿里巴巴代码规约等工具,极大提升了代码的可见性,程序员们已经完全可以从大量的代码中,抓住关键信息。
同时,借助云端IDE、云端分布式代码托管工具,有效地促进社交化编程,无论是结对编程,还是代码评审,让代码本身及编码过程显性化,可以:
促进团队内部知识共享,提高团队整体水平,确保团队统一规范,不出现“天书”代码;
同时,工具的早期介入潜在缺陷发现率可以提升30%;
透明的代码,多人的讨论可以促进正向鼓励,主动思考和追求卓越。
代码安全
代码在线化协同,代码共享、复用文化的建立都依赖于代码平台复杂的权限控制体系,这是一把双刃剑,越开放意味着代码泄露的风险越大,但是越封闭意味着协同效率低下。为了让开发者可以更好地享受代码协作带来的红利,需要重点注意以下几个方面:
代码中的敏感信息:比如数据库密码,被有意或无意泄露后会导致公司业务出现致命打击。
访问权限控制:常见的有访问IP控制,离职权限回收,代码库可见范围设置等。
异常行为风险识别:拥有事后审计,事前预警的能力,比如大量下载代码异常行为检测和预警。
代码协作是技术卓越的追求,是培养软件匠艺精神的机会,借助先进的代码协作工具及技术手段,促进代码及编码过程的可见性,同时,让每一位程序员能够有信心地提交每一行代码。
在线发布协同
现代化企业级软件交付过程常常是多人多角色协作,跨越多个系统交互,同时为了保障交付可靠,交付流程往往也是复杂和难以完全标准化。而阿里巴巴为什么能紧跟市场变化,快速写出高质量软件,这得益于多年沉淀出的一套完整DevOps方法论和产品,确保软件交付过程在线高效可靠。
从流程标准,工序改进,建立在线发布协作
在线发布协同,需要基于同一个交付流水线进行,首先,需要拉通软件集成发布的完整流程。打通从变更到交付的完整系统;将流程工具化,通过工具串起整个集成交付过程;同时,明确流程中各阶段的准入准出标准,下游活动基于上游产出质量。其次,按工序建立质量守护系统,并使每一道工序自动化。再次,建立反馈机制,有问题能够精准定位,即时响应,快速修复。建立相应的度量反馈机制,还能对流程和工序进行持续优化。
真正的在线发布协同,应该是满足:流程工具化、部署无人化、测试自动化、反馈数字化的要求。
特性分支驱动多人多角色在线协作
为了实现多人研发不打扰,代码功能可以自由可靠组合交付,阿里巴巴生产经验积累出一套AoneFlow代码分支管理方法,以特性变更为单元,使用CI/CD 流水线完整的覆盖了从构建、测试到部署整个持续交付过程,过程中的每一个步骤和任务的信息都可以通过消息、邮件、钉钉机器人等告知和追溯,使研发、测试、运维、配管等角色能在线协同,异步工作。
用云原生技术打破开发与运维的边界
以Kubernetes、Serverless、Service Mesh、Cloud IDE为代表的多项云原生技术在过去一年让人印像深刻。这套开箱即用的开源软件,让中小公司快速的获得了以往互联网大厂才有的精项软件交付能力,比如复杂的流量治理能力,灰度发布能力,A/B测试能力,多环境管理能力,基础设施一键拉起,快速扩缩容能力等等。但在企业采纳新技术的同时,也面临着诸多挑战,比如开源软件复杂的搭建过程,黑屏化的交互设计,缺乏研发管理方法,缺乏企业权限管理能力等。阿里巴巴也在积极将CI/CD工具、测试环境管理方法、应用运维理念、DevOps协同方法论等与云原生技术融合贯通,为开发者提供开箱即用的新技术解决方案。
使用“云效”轻松实现一站式在线研发协同
工欲善其事必先利其器,云效可以提供从“需求 ->开发->测试->发布->运维->运营”端到端的在线协同服务和研发工具,让你轻松实现一站式研发协同。
我们可以这样使用云效来完成一天的工作:
晨会上团队基于精益看板进行需求、任务对齐,完成任务指派;
开发同学根据特性开发,创建变更分支;
通过线下或云端开发环境进行编程工作,然后提交代码;
代码自动触发自动的代码扫描,并发送给指定的代码评审员进行评审;
完成评审的代码自动触发集成发布流水线,自动化的完成构建,生成Docker镜像,分别在开发环境、集成环境及预发环境进行部署,完成相应的验证工作;验证完之后处于待发布状态,触发上线审核流程,运维完成审核发布上线;
过程中任何问题通过钉钉,遵循no news is good news的原则,及时反馈到指定负责人,做到准确反馈、即时响应,快速恢复。尽量避免垃圾短信式反馈,过多的噪音,反而会降低协作的效率。