Team-Based Software Development Workflow

Infrastructure

For teams working in a single location, the repository should probably be located on a server on the local network. For many organizations, network security may not be an issue, in which case the SVN network protocol (svn://) will provide the best performance. If network security is an issue then the svn+ssh:// or https:// protocols may be a better choice.

If members of your project (such as external contractors) work off-site then you will probably need to serve your repository using HTTP with Apache. Whether you use http:// or https:// will depend on the sensitivity of your project’s code. If you are working on an open source project then http:// may be sufficient (although many open source projects in fact use https:// for non-anonymous access). If you are working on a commercial software project then https:// will probably be a requirement.

Small organizations may find hosting an attractive alternative. Numerous providers (such as Beanstalk) provide inexpensive hosting plans to organizations which may meet your needs. Hosting may be of particular interest to small, loosely-knit organizations (such as start-ups) which do not have or can’t afford a shared IT infrastructure.

Organizaton

It may be useful to define the roles played by the members of your team. You can use these roles to define authorization policies for your repository. Candidate roles may include:

Workflow

  1. Each contributor checks out a working copy to their Mac or PC.
  2. Contributors make local modifications as part of an assigned task.
  3. Once the task has been completed, changes which have been made by other team-members are obtained by updating the working copy. The developer can inspect other’s changes and decide to update as much or as little of his working copy as is required.

    While it may seem counter-intuitive to pull changes before pushing them upstream with a commit, this workflow helps minimize conflicts and decrease merge effort.

  4. The committer resolves any ensuing conflicts and verifies that the result of the merge of the HEAD (i.e. latest in the repository) and local changes works as expected.
  5. The committer then commits the merged changes back to the repository.
  6. Server hooks (or Cornerstone post-commit scripts) can be used to notify other team members if necessary that new code has been committed to the repository.
  7. Projects which have an automated build environment in place may choose to automatically create a tag for the repository state prior to the start of each automated build.
  8. Once a milestone is achieved, the release manager manually creates a milestone tag in the repository. Inspection of the log history over the period since the last milestone will reveal hot-spots in the system which have seen a large degree of change. These can be identified for more intensive integration testing and communicated to test staff.
  9. Once a major release is released, the release manager creates a maintenance branch prior to continued development for the next version.

Branch-Based Development

Larger development organizations may profit from working on various aspects of the project in parallel. This can be achieved by developing on multiple branches.

The exact designation of these branches will differ from project to project. Some organizations will encourage committers to work on developer-specific branches in parallel while others will prefer branches organized along functional, technical, geographical or organizational boundaries.

While branch-based development affords a team’s members a high degree of independence, it comes at a cost of increased integration effort in the form of inter-branch merging. At designated integration points during the project, team-members will be required to merge their changes upstream from their working branch up to the integration (or build) branch.

Branched-based development can significantly increase the complexity of a project’s version control and should not be attempted without good reason. In particular, infrequent integration can cause significant interruption to a project’s progress.