Team Assignment

DVCS Stage 2: Team Assignment

As discussed in class, the DVCS system is divided into five modules.  Each team has one person responsible for one module as the module developer (dev).  

Module Dev

The responsibilities are as follows.  Write the design document, the interface specification, and the module test.  Have the project lead to review the design and specification and QA review the module test.  Implement the module and be responsible for error fixes inside the module.

In this project, we will standardize the module interface so different module implementations can be interchangeable.  This is key to verify that the principle of information hiding is fully realized.  To do so, we require all implementation done in a single programming language, Ruby.  Once each team has designed the five modules and written module tests, the designers will meet and agree on a single interface and create a combined set of module tests.

The specification for the five modules is as follows, with capitalized names as Ruby class names:


It stores the entire history of a single file.  Each revision is identified by a unique Nodeid.  Revlog hides the storage device/mechanism. 


Logically a snapshot is the set of all files and their content.  Repos hides the implementation of snapshots and their history.  It stores the snapshot in a Manifest, which is a list of all files and their Nodeid.  The Revlog of the Manifest stores the history of snapshots.


This module may not be a single class.  It hides inter-repository communication including the network and concurrency control


This module hides the user commands.


This module hides the management of the work directory. 

In addition, we have three organizational roles.  The roles of project manager, project lead, and QA are patterned after the similar roles in professional software development.  In this assignment, their responsibilities are as follows:

Project Manager

is responsible for the progress of a project, setting clear and attainable objectives for each step of the project, based on and coordinating the plan and progress of individual members.  The manager keeps track of the progress by soliciting/receiving progress updates.  The manage reviews the schedule of work in design and code reviews.

Project Lead

is the single point of decision making on the division of functionalities among the Level 1 modules (File, Repos, Push/Pull,  UI, and Workspace) and the interface between them.  Therefore the lead is responsible for the system as a whole above and over the responsibility of individual modules.  The lead is the first line of technical support, i.e. solving algorithmic and design difficulties, and the main source of feedback in design reviews, including reviews for design specification, unit tests and the actual coding. 

QA (quality assurance)

reviews unit tests, reviews and coordinates module tests, and designs and implements integration tests to ensure that the modules, once passed the module tests, can be integrated successfully.  The QA also tracks user bug reports and assigns bug fix tasks.

During the project, the manager and the lead will meet regularly with the teaching staff to report progress and receive help.  After the project, the manager and the lead will provide evaluation of the technical contribution by team members (except for the lead and the manager) which we consult for assigning individual project grades.

Initial Requirements and Deadlines

1) We will have two teams and have pre-selected the project manager and the project lead for each team.  You should choose which team you would like to join by Thursday midnight. Note that you are also choosing a role in the team.  

Please sign up your group by the Google doc link.

2) Discuss with your team to finalize your role by Friday midnight. The tech manager please send an email with the final team composition and role assignment to me <>. 

3) The team managers and leads will meet with the teaching staff on Wednesday October 7, 5pm to 5:30pm, in CSB 720.