Principles of Agile Version Control: From Object-oriented Design to Project-oriented Branching

stream of "change-flow" for the two competing/conflicting sets of users. This would seem to be a restatement of the " branch on incompatible policy " rule.

Other applications of this are evidenced by Task Branches and Private Branches for in-progress changes and exploratory/experimental work, or multiple levels of "active" development lines that may correspond to work being performed and integrated across multiple sites and timezones.

The package coupling principles of OOD translate almost directly to version-control with only slight modification (sometimes "dependency" translates into "flow", but note that change-flow does not imply dependency). We alsready covered the ADP, so we'll cover the other two here:

The Stable Promotion Principle (SPP):
Changes and configurations should be promoted in the direction of increasing stability.
The Stable History Principle (SHIP):
A codeline should be as stable as it is "historical": The less evolved it is (and hence more mature/conservative), the more stable it must be.

In Robert Martin's book, when discussing the ADP, SDP, and SAP, he describes some measures of stability and abstractness, and plots the stability. He then describes what he calls the "main sequence", which is the line through the origin identifying all points of equal abstractness and stability. When we translate these three principles into version-control terms, the so called "main sequence" seems to directly correlate to Laura Wingerd's "Tofu Scale" of the relative "firmness" of a codeline [8][12].

Conclusion

We hope that these ideas (principles) and discussions prove useful to the reader. We are very interested in feedback on any of these principles (especially the names and accuracy of the "translations" from OOD terms to version-control terms). This set of principles is still a "work-in-progress" and we of course reserve the right to modify them as our understanding of them matures.

References

Agile Software Development: Principles, Patterns, and Practices ; by Robert C. Martin; Prentice-Hall, 2002.  

Software Configurationanagement Patterns: Effective Teamwork, Practical Integration ; by Stephen Berczuk and Brad Appleton; Addison-Wesley, November 2002. A Software

Configuration Management Model for Supporting Component-Based Software Development ; by Hong Mei, Lu Zhang, Fuqing Yang; ACM SIGSOFT Software Engineering Notes, Vol. 26, Issue 2; (March 2001), pp. 53-58; ISSN:0163-5948

A Component-Based Software Configuration Management Model And Its Supporting System ; by Hong Mei, Lu Zhang, Fuqing Yang; Journal of Computer Science and Technology, Vol. 17, Issue 4; (July 2002), pp.432 - 441; ISSN:1000-9000

Container-Based SCM and Inter-File Branching; by Laura Wingerd; 1st BCS CMSG Conference , April 2003 (also see accompanying presentation )

Flexible Configuration Management for a Component-based Software Asset Repository ; by Tom Brett; BCS CMSG event: Why Software Asset Management and Configuration Management is essential , March 2004 (also see accompanying presentation )

The Timesafe Property: A Formal Statement of Immutability in CM ; by Damon Poole Wingerd; submitted to the 8th International Symposium on System Configuration Management (SCM-8) in Brussels, Belgium, July 1998.

"The Flow of Change"; by Laura Wingerd; presented at SD West 2005 and the 2005 Perforce User's Conference.

Configuration Management Principles and Practice ; by Anne Mette Hass; Addison-Wesley, December 2002. Chapter 1, "What is Configuration Management?" (available online)

Streamed Lines: Branching Patterns for Parallel Software Development ; by Brad Appleton, Steve Berczuk et. al.; Proceedings of the 1998 Workshop on Pattern Languages of Program Design.

High-level Best Practices in Software Configuration Management; by Laura Wingerd, Chris Seiwald; Proceedings of the Eighth International Workshop on Software Configuration Management (I-SCM8), Brussels, July 1998; (also presented at the 1998 Perforce User's Conference, June 1998)

Practical Perforce : Channeling the Flow of Change in Software Development Collaboration ; by Laura Wingerd; O'Reilly & Associates, 2005.

About the author

Brad Appleton's picture
Brad Appleton

Brad Appleton is a software CM/ALM solution architect and lean/agile development champion at a large telecommunications company. Currently he helps projects and teams adopt and apply lean/agile development and CM/ALM practices and tools. He is coauthor of the bookSoftware Configuration Management Patterns, a columnist in The CM Journal and The Agile Journal at CMCrossroads.com, and a former section editor for The C++ Report. You can read Brad's blog at blog.bradapp.net.

About the author

Robert Cowham's picture
Robert Cowham

Robert Cowham has long been interested in software configuration management while retaining the attitude of a generalist with experience and skills in many aspects of software development. A regular presenter at conferences, he authored the Agile SCM column within the CM Journal together with Brad Appleton and Steve Berczuk. His day job is as Services Director for Square Mile Systems whose main focus is on skills and techniques for infrastructure configuration management and DCIM (Data Center Infrastructure Management) - applying configuration management principles to hardware documentation and implementation as well as mapping ITIL services to the underlying layers.