Recently, an agile software development technique called extreme programming has caught the attention of practitioners and researchers in the software industry. A core practice of extreme programming is pair programming, where two developers work on the same piece of code. We introduce the problem of assigning pairs of developers to modules so as to maximize the commonalitya measure of the extent to which common developers work on related modulessubject to a load-balancing constraint that is motivated by the need to control the completion time of the project. We consider two variants of this problem. In MCAPn, a developer is teamed up with exactly one other developer to form a pair that works together for the entire duration of the project. In MCAPs, we allow a developer to pair with more than one other developer during the project. This pair-splitting version of the problem facilitates knowledge dissemination among developers, but can increase the effort needed for a developer to adjust to the work habits of several partners.
The difference between the commonality achieved with and without pair splitting crucially depends on the underlying structure of the problem. For trees, we show that the value of the maximum commonality is the same for both MCAPn and MCAPs. Additionally, we obtain polynomial-time algorithms for both of these variants. For general graphs, both problems MCAPn and MCAPs are shown to be strongly NP-complete. We prove that the maximum commonality for MCAPs is at most 3/2 times the maximum commonality of MCAPn. We also provide polynomial-time algorithms and approximation results for a number of special cases of these problems.