在英国康沃尔郡举办的 2017 年敏捷沙滩大会上,数百名演讲者和与会者欢聚一堂,探讨在敏捷领域和后敏捷时代软件开发方法上的最新进展。大会第二天的要点包括:要基于敏捷宣言的原则进行交付,在软件开发方法中实现技术卓越是至关重要的;持续交付的实践是最大化商业价值链的关键推动因素,但组织必须经过恰当的调整,使这种实践能够高效、可持续地进行下去;虽然在使用微服务架构设计,用容器部署的软件系统中应用安全功能是颇具挑战性的,但开发者和运营者也应该使用一些基础实践。
大会第二天以 James W Grenning 的演讲打头,演讲主题为“技术卓越,你需要它”。 Grenning 是 Wingman Software 的创始人,也是敏捷宣言的签署人。他一开始谈到自己在80 年代编写集成系统代码的往事,并指出在那个年代,在一系列较短的周期内交付功能并持续改进的做法也像当今这样至关重要。Grenning 分享了对Demming 的“计划、执行、回顾、行动(Plan、Do、Check、Act,PDCA)”周期与“全面质量管理(Total Quality Management,TQM)”实践的理解和引用,并声称这类技术中有很多基本原则也是敏捷宣言所呈现思想的基础。然而,或许时隔多年,技术卓越与持续学习的理念在悄然弱化,结果人们的观念变得教条,只去关心开发软件的正确流程。
Grenning 探讨了敏捷十周年纪念的共识,并回顾了其中得出的结论:敏捷社区必须“1,追求技术卓越;2,推动个体改变,引导组织变革”。一如Erik Dietrich 内容深刻的博文“为何开发者不再学习:专家新人的崛起”所言,我们必须持续学习,持续改进技术实践,从而避免陷入“有十年经验的开发老手实际上只是重复了十次同一年的工作”的陷阱。例如,开发者应该避免“之后再debug”式的开发,而是关注于应用并提升测试驱动开发(Test-Driven Development,TDD)的技巧。Grenning 在演讲结尾谈到对人力的尊重的重要性(在大会第一天频繁被提及),并感慨说,虽然敏捷方法使管理交付受益巨大,但技术卓越的重要性是不能被遗忘的。
本日商业部分的第一节内容是“为持续交付优化的组织”,演讲者是 Phil Parker ,Equal Experts 的合伙人。在演讲开头,Parker 提到持续交付成功应用到组织中的标志是“可以为现实客户自然地呈现一个准备充分的前景,且过程不会手忙脚乱”,以及“速度和稳定性符合商业需求”。持续交付的关键目标是尽可能减少“从有价值的创意(假设),到实现这种创意并呈现给现实客户”这一流程中的等待时间。因此,这需要整个组织通力合作以成功实现持续交付。谈到效用和流程,Parker 提到关注效用的组织“往往会走向减少价值流、降低效用的结局”,所以应该关注价值流对效用的提升。实现这一目标的一种方式是用小批次(batch)进行开发。
回到演讲主题,Parker 认为传统上以项目为中心的“服务团队”,通常在最大化价值流方面效率不足。这是因为他们欠缺实现端到端变化的能力(例如,从商业创意到架构到部署),结果通常导致需要更大的批次和更长的升级周期,以在交付中包含更多的功能,典型例子就是令人生畏的“大爆炸”式发布。Parker 借鉴了 Spotify 公司的组织模型,也就是小队(squads)、分部(chapters)和公会(guilds),作为组织设计中对传统服务团队的替代,并提出了一种三维度的组织设计模式。这种模式将团队分为以下三种:
- 领域(垂直维度):每个领域代表一类商业能力,由一个独立小组掌控;领域的功能在部署时应与其它领域团队独立
- 社区(水平维度):社区是具备相似技能与兴趣的人员组成的松散小组,可以在组织内实现协作并分享知识
- 推动者(对角线维度):作为推动者的团队负责提供共同需要的资源,例如所需的平台或核心工具
演讲结尾,Parker 强调组织必须注意到康威定律的影响,并牢记这一事实:虽然复用很不错,但它的代价是降低独立性;而领域团队之间的界限及其构建的体制应该是明确定义、相对稳定、不太笼统的。
成功创建有着明确界限,负责单一商业功能的领域团队,对软件开发者来说不应该是什么新鲜事物:这其实就是高内聚、低耦合(high cohesion & loose coupling)的架构设计原则
软件交付话题的下一场演讲是 Phil Winder 主持的,他是 Winder Research and Development 的创始人。他在演讲中探讨了在使用微服务架构风格开发软件,及使用容器技术部署和运营时的安全问题(这里可以下载演讲的幻灯片)。Winder 使用了一个开源的,应用微服务和容器的电商平台“袜店”作为示例,讨论了一系列安全概念,并给出了以下建议:
-
容器安全:
- 在 Dockerfile 中设置一个用户账户,从而避免以 root 账户运行操作
- 使用固化镜像(hardened image,参考网络安全中心页面),将容器部署为不可变工件(immutable artefacts),并将根容器文件系统设置为只读
- 充分利用 Linux 的功能,限制容器受损时的操作
- 流行的容器编排框架 Kubernetes ,其文档很好地说明了如何启用它的众多安全功能
-
网络:
Winder 在演讲总结中强调,要正确、高效地应用安全功能不是件容易的事情。由于权限和责任逐渐扩散到架构师、开发人员和运营人员等众多角色身上,组织中的所有成员都应熟悉基本的安全原则(尤其是涉及容器这样的新技术时的原则),并意识到他们的工作事关整个系统的安全性。
敏捷沙滩大会的更多信息可以参考大会官网。演讲的视频已上传 AotB Youtube 频道。
查看英文原文: Technical Excellence, Organisational Design for CD, and Container Security: Agile on the Beach 2017
感谢冬雨对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论