A prerequisite for Agile approaches is an architecture you already know how to use.
If the architecture is not well-defined and completely understood, you can't really take an Agile approach.
You need to have some technical spikes that show how the architecture works, and how the various pieces will fit together. You can do these are preliminary sprints, but they won't lead directly to a release to users. They're a special case, required to get to an architecture you can use.
Once you're past this "understand the architecture" effort, you can then start to execute sprints that lead directly to releases for the users.
I would also recomend reading fowlers document Is Design Dead, as far as I understand his arguments if you consider all the agile practices as a whole then you gain the freedom to make large changes and so can evolve an architecture.
Refactoring works most effectivly with continuous interation, testing is enhanced with TDD and continuous integration ... I could go on. Evolving 'architectures' are only limited if you are unable to make the large changes requied to correct 'mistakes'.
Additionally, I think you have an architect as a stakeholder in the project, they contribute user stories which are in turn delivered back to the architect.
This is also a good way to utilise pair programming with the architect working as part of the pair. In this context the architect is not so much a dedicated person more a hat that a member of the development team wears while pair programming.
I think XP does not diminish the role of the architect (and architecture) it just places the resonsibility on all team members to deliver and spreads the cost over the lifetime of the project.
[edit]
Per other comments dont be afraid of some upfront planning, itteration zero is a good time to try and chart a bit of a plan, just dont get to strict about delivering it to a specific time scale.
In my experience, the best way you do this is have experienced developers / architects working on the projects that drive the architecture vision on a day by day basis.
I would suggest its up to the dev lead on the project to control the architecture and to ensure that all new work fits in with it.
I handle this by doing some planning up front -- generally, I have some prior experience with a similar application to help with this. If not, I'll do some exploration in the space to get an idea. Once a basic architecture is laid out, I'll start developing with it in mind based on my prioritized stories. Then, I refactor as I go along to address shortcomings or errors in the architecture.
Without doing big design up-front, there is usually a basic design that applies to the each project. Usually, this defines basic layers to respect in the design of the application. Most other design decisions are made by each developer.
Our development process is based on short development bursts with frequent peer review. The quality of each developer's architecture decision is validated at peer-review time. This also includes validating that the code follows the product architecture.
Depending on the type of project and the tools that are available, we also use tools like macker to automatically validate the integrity of the layer-cake.
发布评论
评论(6)
敏捷方法的先决条件是您已经知道如何使用架构。
如果架构没有明确定义和完全理解,您就无法真正采用敏捷方法。
您需要一些技术亮点来展示架构如何工作,以及各个部分如何组合在一起。 您可以将这些作为初步冲刺,但它们不会直接导致向用户发布。 它们是一种特殊情况,需要获得可以使用的架构。
一旦完成了“理解架构”的工作,您就可以开始执行直接为用户发布版本的冲刺。
A prerequisite for Agile approaches is an architecture you already know how to use.
If the architecture is not well-defined and completely understood, you can't really take an Agile approach.
You need to have some technical spikes that show how the architecture works, and how the various pieces will fit together. You can do these are preliminary sprints, but they won't lead directly to a release to users. They're a special case, required to get to an architecture you can use.
Once you're past this "understand the architecture" effort, you can then start to execute sprints that lead directly to releases for the users.
我可以解释我将如何做到这一点,但是这比我能说的更好。
I could explain how I would do it, but this says it better than I could.
我还建议阅读 fowlers 文档Is Design Dead,据我了解他的论点,如果你将所有敏捷实践作为一个整体考虑,然后您就可以自由地进行重大更改,从而可以发展架构。
重构通过持续交互最有效地工作,通过 TDD 和持续集成增强测试......我可以继续。 仅当您无法进行纠正“错误”所需的重大更改时,不断发展的“架构”才会受到限制。
此外,我认为架构师作为项目的利益相关者,他们贡献用户故事,然后将这些故事交付给架构师。
这也是利用结对编程的好方法,架构师作为结对的一部分工作。 在这种情况下,架构师与其说是一个专注的人,不如说是开发团队成员在结对编程时所戴的帽子。
我认为 XP 并没有削弱架构师(和架构)的作用,它只是将交付的责任交给所有团队成员,并将成本分摊到项目的整个生命周期中。
[编辑]
根据其他评论,不要害怕一些前期计划,零迭代是尝试制定一些计划的好时机,只是不要严格要求在特定的时间范围内交付它。
I would also recomend reading fowlers document Is Design Dead, as far as I understand his arguments if you consider all the agile practices as a whole then you gain the freedom to make large changes and so can evolve an architecture.
Refactoring works most effectivly with continuous interation, testing is enhanced with TDD and continuous integration ... I could go on. Evolving 'architectures' are only limited if you are unable to make the large changes requied to correct 'mistakes'.
Additionally, I think you have an architect as a stakeholder in the project, they contribute user stories which are in turn delivered back to the architect.
This is also a good way to utilise pair programming with the architect working as part of the pair. In this context the architect is not so much a dedicated person more a hat that a member of the development team wears while pair programming.
I think XP does not diminish the role of the architect (and architecture) it just places the resonsibility on all team members to deliver and spreads the cost over the lifetime of the project.
[edit]
Per other comments dont be afraid of some upfront planning, itteration zero is a good time to try and chart a bit of a plan, just dont get to strict about delivering it to a specific time scale.
根据我的经验,做到这一点的最佳方法是让经验丰富的开发人员/架构师致力于每天推动架构愿景的项目。
我建议由项目的开发负责人来控制架构并确保所有新工作都适合它。
In my experience, the best way you do this is have experienced developers / architects working on the projects that drive the architecture vision on a day by day basis.
I would suggest its up to the dev lead on the project to control the architecture and to ensure that all new work fits in with it.
我通过预先做一些计划来处理这个问题——通常,我之前有一些类似应用程序的经验来帮助解决这个问题。 如果没有,我会在这个领域进行一些探索以获得想法。 一旦制定了基本架构,我将开始根据我优先考虑的故事进行开发。 然后,我会进行重构,以解决架构中的缺点或错误。
I handle this by doing some planning up front -- generally, I have some prior experience with a similar application to help with this. If not, I'll do some exploration in the space to get an idea. Once a basic architecture is laid out, I'll start developing with it in mind based on my prioritized stories. Then, I refactor as I go along to address shortcomings or errors in the architecture.
无需预先进行大型设计,通常会有一个适用于每个项目的基本设计。 通常,这定义了应用程序设计中要遵守的基本层。 大多数其他设计决策是由每个开发人员做出的。
我们的开发流程基于短期开发爆发和频繁的同行评审。 每个开发人员的架构决策的质量都会在同行评审时得到验证。 这还包括验证代码是否遵循产品架构。
根据项目类型和可用工具,我们还使用 macker 等工具来自动验证千层蛋糕的完整性。
Without doing big design up-front, there is usually a basic design that applies to the each project. Usually, this defines basic layers to respect in the design of the application. Most other design decisions are made by each developer.
Our development process is based on short development bursts with frequent peer review. The quality of each developer's architecture decision is validated at peer-review time. This also includes validating that the code follows the product architecture.
Depending on the type of project and the tools that are available, we also use tools like macker to automatically validate the integrity of the layer-cake.