代码之家  ›  专栏  ›  技术社区  ›  Stefan Valianu

scrum的可行性和对哲学的某些修改[关闭]

  •  3
  • Stefan Valianu  · 技术社区  · 14 年前

    如果回答这个问题的人陈述他们是否有在敏捷环境中开发的经验,或者他们是从理论上讲的,我宁愿这样。

    幕后故事:

    假设有一家机会主义公司开发技术创新产品(多点触控界面、语音识别设备等),所有这些都是根本无关的。然而,正如人们所看到的,使用这些产品的主要优势在于,可以从产品中创建/提取库,并将其出售给其他公司、开发人员等。因此,以增量方式工作是有利的,因为它允许里程碑与最终产品分离。

    问题1:从业务角度来看,这是否有利?你们中有人遇到过将库分离为公司内的单个产品的问题吗?

    问题2:如果产品确实是以这种增量方式创建的,那么Scrum是否看起来是一种有效的应用方法?

    让我们假设这个创建组件以组合成最终应用程序的增量过程已经就位。开发团队最初非常小,6到7人。为了好玩,我们称这个队为A队 行会 . 这家公司刚刚起步,他们需要盈利。为了争论,假设公会发展了 FaceAPI Library . 所有这些都是在Scrum方法中完成的,比如说在一个Sprint中。现在,该公司有足够的资金再雇用7名员工。这7个新加入的人加入了他们自己的行会,他们的技能和原来的行会的技能是一致的。

    所以现在,这家公司有2个公会,1个图书馆要开发。假设一个公会的任务是使用原始库创建产品1,而另一个公会的任务是扩展具有更多功能的库。这两个“冲刺”将同时执行,最后将更新的库合并到应用程序中。如您所见,可能需要由处理product1的团队对库进行一些修改,在这种情况下,合并将是非常重要的。

    在任何情况下,这是一般的想法。公司将有单独的公会或团队( 问题3:你觉得这个想法怎么样?由于团队规模较小,他们希望雇佣具有良好协同效应的成员。这有可能提高整体士气和生产力吗? 同时进行冲刺。由于公司提供的服务的性质,团队将或多或少地使用相同的组件和部分应用程序,但是可以创建他们的冲刺,以便团队始终能够在不受阻碍的情况下执行工作。每个公会都是一个自封闭的单元,有测试人员、设计师和QA。

    最后问题:

    • 作为开发人员或测试人员,什么是 你对一家公司的看法 以这种方式工作?它吗 培养领导技能 开发者?听起来有吸引力吗? 听起来注定要失败吗?
    • 任何有知识或经验的人 对于Scrum,它是否适用 很自然,在这种情况下 环境?
    • 有人工作吗 类似于 上面的描述?如果你不 介意回答,它叫什么? 成功了吗?
    3 回复  |  直到 12 年前
        1
  •  3
  •   Péter Török    14 年前

    首先,到目前为止,我已经在做3个或多或少的Scrum项目。

    There are a couple of unclear things in your story. 公司的目标是开发图书馆或最终产品?对我来说,这两者似乎相当矛盾,尤其是对一家小公司而言。

    另一件事是,在没有任何真正用户的情况下,从一个库开始开发对我来说并不是很灵活。在我看来,一个敏捷的设置将从另一个角度开始:首先开发一个具体的产品,根据具体情况重构设计,以可能达到某种分层的架构,其中较低的层可以被提取到一个可重用的库中。然后,开始开发更多具体的产品,寻找在项目之间重用代码的可能性,并根据客户(产品开发团队)的具体使用和需求再次改进公共库的设计。

    在某种程度上,图书馆开发可能需要它自己的团队——在开始时,可以让它的设计和积压工作在不同的团队之间进行协调。

        2
  •  1
  •   Reddog    14 年前

    关于您的关于团队相互开发代码的问题-这就是源代码管理的目的。为新的东西叉子,然后在下一个冲刺重新融入和稳定。

    关于第二季度,Scrum是一种增量方法,因此如果设计适合于增量的工作部分,那么它当然是合适的。

    关于第三季度,雇佣“在他们内部工作很好并且他们想与之合作的人”是一件很糟糕的事情吗?

        3
  •  1
  •   Michael    14 年前

    团队组织和系统结构高度依赖。 See Conway's Law

    这意味着,要让两个独立的团队处理两个独立的代码模块(库团队和产品团队),您需要在团队之间有一个明确定义的通信通道,因此,开发的代码将在设计中反映这些通道。传统上,这意味着您最终为库定义一个API或接口,该接口的作用就像每个团队可以开发的契约。敏捷实践通常采用更紧急的设计理念,因此很难创建一个有意义的API。

    大多数敏捷团队解决这一问题的方法是将开发时间限制在可管理的增量上。因此,虽然设计整个API可能是不现实的,但产品团队和库团队可能会就一个API设计达成一致意见,该设计足以满足2周的工作需要。编写代码,部署,为下一个迭代设计,然后重复。这样就建立了团队和代码模块之间的通信路径,这样两个团队就可以独立工作,而不必相互干涉。

    我最近看到的另一个选择是让更大的团队使用看板/有限的WIP流程进行管理。让每个人都在同一个团队中,通过看板管理,可以实现更有机、更灵活的自我组织,这意味着您的系统能够更容易地发展。通过保持工作在进行中高度可见,它增加了通信,并且通过限制正在进行中的工作,您限制了开发人员通过保持系统在任何一个方向上进化得太远而相互击倒对方。结合一个坚实的风投,你应该很好去。

    最后,另一个选择是,在深入开发之前,您需要花一些时间来真正考虑您的体系结构。使用软件体系结构设计过程,如 Architecture Centric Design Methodology (acdm)在有限的“spike 0”类型的角色中,可以帮助您解决在允许紧急设计时通常遇到的许多问题。在设计冲刺结束时,您将能够制定一个对您需要做的事情更有意义的计划。And remember, just because it's a design phase doesn't mean you don't write code - quite the opposite. ACDM强烈主张实验。