摘要: 本文将会讨论如何协调公司内各个工程师团队之间的合作,从而高效地保持系统的弹性和灵活性,以满足敏捷开发的需求。本文选自《Node.js微服务》。
如果一个公司采用微服务来构建软件系统,那么每个干系人都需要参与决策。
微服务是一次重大的范式转换。通常,大型组织倾向于使用相当传统的方式来构建软件系统。每个重大发布需要经历数月的研发周期,之后需要一个完备的质量保证阶段以及数小时的部署阶段。
当一个公司选择使用面向微服务的架构时,方法论就会发生完全的改变:每个小团队负责各自的小功能点,包括它们的构建、测试和部署。每个团队各司其职,并且能够处理好各自负责的单一事项(一个微服务,或更确切地说是数个微服务),每个团队成员将熟练掌握构建软件系统的相关技术与领域知识。
这通常被称为跨职能团队。这是一个由少数人组成的工作单元,他们都具备了构建高质量软件组件的能力。
有一点值得注意的是,团队成员应当掌握必要的领域知识来理解业务需求。
在我的职业生涯中,大多数导致公司失败的主要问题不外乎以下这点(就我个人观点而言)。首先,有一种观点认为开发者是“堆砖器”,即可以在没有提前沟通的情况下却依然能神奇地理解业务流。而且,还有观点认为,如果一个开发者一周可以完成X 量级的工作,那么10 个开发者一周就可以交付10X 量级的产量。这些观点都是错误的。
为了保持高效以及考虑到康威定律在改变业务流程方面对系统的影响,构建微服务的跨职能团队中的成员必须熟练掌握(不仅仅是了解)相关领域知识。
每当谈及微服务的组织架构适配时,自治才是关键因素。为了保证构建微服务的敏捷性,每个团队都必须保持自治,这也意味着要确保技术的自主选择权,如下所示:
- 使用的语言。
- 代码规范。
- 解决问题的模式。
- 各类工具的选择,比如软件的构建、测试、调试及部署工具。
这是非常重要的部分,因为这是我们需要定义公司如何构建软件,并且可能会引入工程问题的部分。
举个例子,我们来看看代码规范问题,如下所示:
- 我们需要在所有团队内都保持统一的代码规范吗?
- 我们应该让每个团队都有各自的代码规范吗?
一般来说,我偏好于“80%准则”:80%的完美度已经足以涵盖100%的使用场景。这意味着放宽代码规范(也适用于其他领域),以及允许一定程度的不完美或者个性化,都有助于减少团队间的摩擦,也能让工程师能够尽快关注到那些极少数的重要准则,比如日志策略以及异常处理。
如果你的代码规范过于复杂,那么在某个团队想要向其他团队的微服务提交代码时就会遇到很多阻力(切记,一个团队拥有自己的服务,但是其他团队的成员也可以对这个服务做出贡献)。
本文选自《Node.js微服务》,点此链接可在博文视点官网查看此书。
相关推荐
企业内部的跨部门合作也变得更加敏捷,形成精益原则指导下的产品团队。技术社区的建设则促进了知识分享和技能提升,进一步推动整个企业的技术创新和DevOps文化的普及。 总结来说,云原生时代的DevOps是关于在快速...
云原生化并不仅仅是开发方式的变化,还涉及到组织架构的调整、企业文化的适配、人才的培养和相应的考核体系的革新,因此应该把其视为企业数字化转型和未来创新中的重要一环,上升到企业整体的数字化战略层面。...
- **核心内容**:探讨不同的软件开发过程(如敏捷开发、瀑布模型等)如何影响架构设计决策。 - **关键知识点**: - **敏捷开发**:侧重于快速响应变化,因此架构需具备灵活性。 - **瀑布模型**:按部就班地进行...
这样的转型需要企业从技术、组织结构和文化等多个维度进行革新,例如建立起敏捷开发流程、多团队协作、持续部署和运维等现代IT实践。 此外,业务目标中提到的“支持无线优先战略”,强调的是企业应对移动互联网浪潮...
- Scrum敏捷开发流程 - Git分支管理策略 - 代码审查与重构实践 13. **职业发展路径规划** - 前端工程师技能树梳理 - 技术选型与学习资源推荐 - 职业晋升与转型经验分享 14. **未来趋势预测** - WebAssembly...
SOA适合复杂的集成场景,微服务适合敏捷开发和持续交付,服务网格则提供了更高效的治理手段。理解这些架构的原理和优缺点,可以帮助我们设计出适应业务发展的高可用分布式系统。在实践中,需要不断优化和调整架构,...
企业级技术中台架构的实践指的是通过构建一个共用的技术平台,以支持多个业务线和应用,实现业务敏捷、技术共享和成本优化。实践表明,中台架构不仅能够应对快速变化的市场和技术需求,还能为企业的数智化转型提供...
合理运用分层思想,结合敏捷开发理念,可以使软件项目在可维护性、可扩展性和团队协作方面达到最佳平衡。在未来,随着软件工程方法论的不断演进,分层架构也将迎来更多创新的优化策略和应用场景。
为团队成员提供必要的技术培训和敏捷开发方法的培训,提升团队技能和协作效率。 【附录】 包含项目文档、技术规范、代码样例等内容,作为项目实施的参考依据。 【裁剪说明】 针对小型项目,某些大型项目管理过程...
2. **开发进度难以控制**:由于软件开发的复杂性,即使采用敏捷开发方法,也可能面临长时间无法发布新版本的问题。这可能源于各个功能域之间的协同困难,以及修复一个问题可能导致更多问题出现的情况。 3. **软件...
这包括但不限于开发方法的选择,比如敏捷开发、迭代开发还是瀑布模型;软硬件平台的适配,如操作系统、服务器硬件、编程语言和框架;网络架构设计,如局域网、广域网或云计算平台;系统架构和设计,如模块化、服务化...
2. **数据格式和协议差异:** 不同设备间的数据格式和通信协议可能存在差异,需要API架构具备转换和适配的能力。 3. **性能和资源限制:** 边缘设备受限于资源和计算能力,API架构需要优化数据处理流程,减少不必要...
2. **Integrated**:实现了技术层面的数据和交互集成,但缺乏标准化,需要定制开发和适配。 3. **Componentized**:系统被分解为组件,但仍存在分析限制,组件交互不够灵活。 4. **Service**:服务基于开放标准,...
总结来说,企业互联网共享服务架构是一种战略性的IT解决方案,它通过模块化、服务化和互联网化的方式来优化企业资源分配,提高运营效率,降低技术复杂度,并为企业提供了面向未来的业务敏捷性。
使用Git进行代码版本管理,以及敏捷开发方法如Scrum或Kanban来组织团队工作,可以提高开发效率和代码质量。 总之,基于ARM的嵌入式系统软件设计涵盖了操作系统选型、驱动开发、中间件利用、应用编程、性能优化、...
不同的开发生命周期模型,比如瀑布模型、迭代模型、敏捷开发等,有其各自的特点和适用场景。学习计划应该根据学习者的背景和目标,选择合适的学习路径和开发模型。 需求分析是软件开发的第一步,它决定了软件开发的...
在数字化转型中实践云计算 ...这不仅涉及到技术层面的创新,还包括管理理念的更新、业务流程的优化和组织架构的调整等各个方面。云计算的深入应用,将使得银行业在数字化转型的道路上走得更远,更快。
同时,采用敏捷开发方法,如Scrum或Kanban,可以更好地管理任务,确保团队高效协作。 3. **可扩展性**: 软电话客户端的可扩展性意味着系统能够适应未来的新功能或更高的用户需求。为了实现这一目标,设计时应考虑...
在系统开发过程中,遵循敏捷开发原则,进行迭代开发和持续集成。项目完成后,进行全面的功能测试、性能测试和安全性测试,确保系统满足设计需求并具备良好的用户体验。 总结,环球雅思教育考试管理系统设计与实现...