Join us on Tuesday, April 29th, 5pm GMT/ 6pm CET / 12pm CDT / 10am PDT, when Brittany Istenes, InnerSource Commons Member, will discuss Empathetic Engineering and InnerSource.

概述

InnerSource解决的问题?

InnerSource解决的问题?

=

无论员工在公司组织结构中的位置如何,InnerSource鼓励并奖励与任何人的协作和代码的重用。这种方法与传统组织中看到的不同,传统组织中的思想和工作产品往往被困在内部企业层级结构及约束的边界内。让我们来探讨一个例子来说明这个想法。

想象一下,同一公司的两个团队交付不同的软件,其中一个团队的软件依赖于另一个团队的软件。例如,用户体验依赖于API服务来检索显示的数据。这种情况在大型企业中很常见,在大型企业中,单个团队生产的软件可能有几十个或几百个消费者。

当软件消费团队(consuming team)需要许多特性时,软件生产团队(producing team)通常自身有一些需求和优先级流程来决定他们将开发哪些特性。对于重要的特性请求,如果没有按照当前工作的优先级排序,消费团队通常会选择3个选项中的一个,每个选项都有自己的缺点。

  1. 等待结果。消费团队可能什么也不做,没有进入排期的需求只能艰难前行。通常这种特性需求只占用消费团队最少的工作量。从实现特性带来的收益来说,等待可能没什么问题。然而,它可能带来真正的痛苦是所要求的功能从未被交付。

  2. 变通方案。一个不愿意等待的消费团队可能会在其他地方做额外的工作来弥补他们所需特性的缺失。这些额外的工作可能会随着使用项目的变化而出现。或者,他们可以创建一个新的项目来满足他们的需求,并替换他们对提供团队的全部或部分系统的使用(代码/项目复制)。这种策略只允许消费团队通过自己的努力来获得所请求的特性。不过它也有几个缺点:

    1. 对于具有相同功能请求的任何其他使用者,消费团队所做的任何工作都是不可用的。

    2. 消费团队无意中承担了维护新编写的代码的长期负担,这不在他们的核心团队能力范围内。

    3. 对于整个公司来说,同一个问题空间存在重复的项目和代码。

  3. 问题升级。消费团队可能不会接受生产团队的“不”的答案,相反,他们会建议生产者管理阶层的某个人去影响(或强迫)提供团队去做这项工作。这个选项听起来对消费团队很有吸引力,因为他们无需执行或维护就可以获得他们要求的特性。尽管如此,它仍然是消费团队的累赘,因为它必然会将他们的一些注意力和工作转移到问题升级的非工程任务上。此外,这个选项不具有可伸缩性,因为在破坏消费者在公司的信誉之前,消费者只能提出几次特性请求的问题升级。对于提供团队来说,问题升级也具有类似的破坏性(甚至更严重),他们正常的工作流程和需求优先级处理了将会被打断,用以处理升级的特性请求。

这一讨论为InnerSource奠定了基础。InnerSource适用于消费团队的个性需求得不到满足的情况。InnerSource为团队提供了一种方法,使他们能够避免 等待结果变通方案问题升级 所带来的问题同时实现自己特性需要。

Learn
InnerSource如何运作?

InnerSource如何运作?

=

假设团队A使用的软件是由团队B生产的。团队A给团队B提交了一个特性需求,但团队B无法在团队A要求的时间内及时实现该功能。在InnerSource设置中,如果团队A不能得到这个特性请求,它会提一个提拉请求(Pull Request, 简称PR)代替。也就是说,团队A直接在团队B的软件中实现该功能,并提交一个带有代码更改的拉请求。团队B合作伙伴审查并接受提交的代码。

在这个例子中,我们称团队A为 调用(Guest) 团队 ,称团队B为 维护(Host) 团队 。 协同(Guest)主导(Host) 这两个术语暗示了一种类似于在家里接待客人的情况。在这种情况下,大多数人都想成为一个好主人。为了迎接协同方的到来,他们确保所有的东西都保持整洁。来访者在门口受到欢迎并被邀请进来。他们可以使用家中公共区域的功能和公用设施。可能会有一些客人被要求遵守的家规。同样的,大多数客人也想表现出对家庭和主人的尊重。他们对房子里的东西很小心,在他们逗留期间遵守规则。只要他们有礼貌,他们就会希望收到新的访问邀请。这些围绕着家访的概念是一个隐喻,它是团队在一个主导向另一个协同贡献代码库时应该采取的态度和行为。

让我们仔细看看InnerSource的流程机制是如何工作的。为了帮助解释,我们将列出调用团队和维护团队中的几个关键人物。首先, 产品所有者(Product Owner) 确定维护团队愿意接受哪些功能作为贡献。 贡献者(Contributor) 是调用团队中提交代码贡献以供主人团队评审的个人。 Trusted Committer 代表维护团队在提供一个成功的拉取请求所需的任何及时支持和指导。在小规模的基层工作中,一个人通常同时担任产品所有者和受信任提交者的角色。

Learn
InnerSource的原则