Organizational Patterns of Agile Software Development

James o. Coplien and Niel B. Harrison

Community of Trust
  • It is essential that people in a ateam trust each other; otherwise, it will be difficult yo get anything done.
  • Do things that explecity demonstrate trust. Managers, for example, should make it overtly obvious that they facilitate the achievement of organizational goals, rather than playing a central role to assert control over people. Take visible actions to give control over process.
  • Both overtly ambitious schedules and overly generous schedules have their pains, either for the teams or for the customers
Therefore: Reward teams for negotiating a schedule they can meet with financial bonuses [or at-risk compensation, or time off]. Keep two sets of schedules: One for the market and one for the team

You cant wait until you have every last requirement to get started. Therefore: As soon as you have some confidence about project direction, start developing areas in which you have high confidence.

Named Stable Bases
It is important to integrate software frequently enough so that the base doesn't become stale, but not so frequently that you damage a shared understanding of what functionality is sound and trusted in an evolving software base. Therefore: Stabilize system interfaces - the architecture - about once a week. Give the stable system a name of some kind by which developres can identify their shared understanding of that version's functionality.

Incremental Integration
For iterative development to work well it's necessary to make sure that components work togheter. Therefore: Provide a mechanism to allow developers to build all of the current software periodically. Developers should be discouraged from maintaining long intervals between check-ins. Developers should also at any time be able to build against any of the Named Stable Bases (or the newest chedked-in software)

Private World
How can we balance the need for developers to use current revisions, based on periodic baselines, with the need to prevent developers from experienceing undue grief by having development dependencies changed from underneath them? Therefore: Provide a mechanism where developers can maintain a Private World development environment. In their Private World they can control the rate of integration, which allows them to avoid having an integration step interup work in progress. The environment should represent a snapshot of all of the software being developed in a system, not just the code the developers is modifying. Try to ensure that the private development area is not used as a means of avoiding integration issues.

Comments

Popular posts from this blog

Possible SYN flooding on port 3306 (MySQL)

Part 1 - Disaster Recovery with SRM and vSphere Replication

Part 2 - Disaster Recovery with SRM and vSphere Replication