A program to build competitive rosters

ParityBuilder assembles individuals into rosters that are as similar to each other as is possible. The user specifies limits on the number and size of rosters, and whether every individual must be assigned to a roster. Individuals are described by categorical attributes (such as gender, background or specific skills) and numerical attributes (such as size or measures of aptitude). The user sets priorities for balancing attributes. The user can also specify pairs of individuals that should/should not be assigned to the same roster. ParityBuilder then tries to assign the individuals to rosters (at most one assignment per individual) so that the average attribute values for each team are comparable to those of the next team, emphasizing the attributes with highest priority.

Current version: 2.0.2


Although individuals need not be people -- you might, for instance, use ParityBuilder to assign parcels to shipping container with an eye toward balancing container weights, number of fragile parcels in each container, and so on -- most commonly ParityBuilder will be used to assign people to teams. Here are a few possible applications:

  • Assign children registering in a recreational sports league to teams. For a particular sport, you will have a target team size in mind, and limits to how much you can deviate in either direction. Relevant attributes to balance might include gender, size and skill, the idea being to produce competitively balanced teams (the "parity" in ParityBuilder). Families enrolling multiple children may, for logistical reasons, strongly desire them to be assigned to the same teams.
  • Create project teams or study groups in an educational program. MBA programs, for example, frequently assign entering students to groups. If the students are not allowed to self-select their groups, then it behooves the program to "level the playing field" so that no student feels disadvantaged by her or his group assignment. Relevant attributes might include measures of scholastic aptitude (such as scores on standardized tests), gender, foreign v. domestic origin, and specific educational background (such as engineering or accounting). At least some programs prefer not to assign married couples to the same group, since it may create the perception of a clique or voting bloc within the group (or just create endless bickering).
  • Assigning packages (the "individuals") to containers (the "rosters") for shipment, with an eye toward balancing the weights of the containers (and possibly other considerations, such as the number of fragile packages within each container).
  • Assigning experimental subjects (the "individuals") to treatments (the "rosters") so as to make the subject pools for various treatments as similar as possible.


ParityBuilder is not suited for roster building when the core concerns have to do with balancing the internal dynamics of the roster. For instance, ParityBuilder should not be use to assign workers to teams with the goal of maximizing the ability of the workers in a single team to cooperate, or with the goal of maximizing the diversity of skills within a team. Those are within-team goals; ParityBuilder concerns itself only with across-team balancing.

Tell me more

Still curious? Take a look at the feature list and some screenshots.


ParityBuilder is programmed entirely in Java, using the Swing graphical user interface. It should run on any platform having Oracle Java 7 or later properly installed. ParityBuilder has been tested on several versions of Windows and Linux, as well as OS/X. Oracle Java is a free download. (Pretty much every capitalilzed word in this paragraph is a trademark. Please consider yourself warned.)


Download the correct version of ParityBuilder for your operating system (the only difference is the startup script), unzip it somewhere, and either run the startup script (run.bat for Windows systems, run.sh for Linux systems) or enter "java -jar Parity_Builder.jar" in a terminal/command shell. That's it. (Windows users: nothing gets written to the registry.) To uninstall it, just delete the contents of the directory you created.

Getting Started

ParityBuilder's help system includes a tutorial that walks you through a sample project (creating teams in a youth recreation league). A comma-separated-value (CSV) file containing sample data for the tutorial is included.

Getting Help

There is a general forum for ParityBuilder users and developer(s) to exchange tips, ask questions, request help and so forth. There is also a ticket system where you can report bugs and request enhancements. If you cannot sort out how to use the ticket system, you make bug/enhancement reports on the discussion forum, but it would be a help to me if filed a ticket, particularly for bugs.

Getting Involved

If you use ParityBuilder and are happy with it, here are some ways you can support the project:

  • Get the word out! If you know other potential users, you might tell them about ParityBuilder (particularly if it's a glowing testimonial) and point them to this site.
  • Report your experiences. There is a bug tracker link on the right. If you stumble on one, please report it. If you are a happy user with no bugs to report (or even a happy user despite an occasional bug), feel free to use the forum link on the right to stroke my ego. :-)
  • Suggest enhancements. You can suggest missing features, or point out hard-to-use features, in the enhancement tracker. When my day job and the bug list permit, I might find time to make some improvements. If someone else has already suggested the enhancement you want, add a supportive comment. Requests from multiple sources will likely percolate to the top of the list.
  • Donate. I do some of my best (well, least buggy) work at local coffee shops. (Did you catch the use of the word "percolate" in the preceding paragraph?) Oddly enough, despite the fact that I am working on free software, they continue to charge for the coffee. There's a link at the right if you would like to contribute to my caffeine fund.
  • Improve the code. If you are an experience Java programmer (or even a less inexperienced one than I am), you should have no trouble improving the user interface. If you do so, please consider donating back the improvements.
  • Translate it. I have no idea if anyone would be interested in a non-English version of ParityBuilder. (For that matter, I have no idea if anyone is interested in an English version.) If you are interested, and you are bilingual in English and something else (excluding Klingon), please contact me. With some code modifications on my part and some translating on your part, it should be possible to get a version of ParityBuilder in your preferred language.