Last we left off in part 1, the last minute torrent of submissions had ceased and it was review’n time.
LISA’s paper track is peer-reviewed. We’re very lucky to have a community of highly-experienced peers willing to help out with an important process like this. After the call went out for volunteers, we had ~35 people offer to review papers in addition to the 12 program committee members.
The first step in the setup process was the assignment of categories in the webreview system. I read through every single submission and tagged each one with one more more categories. For example, some of the categories used were “theory / process,” “security,” “network management / monitoring / configuration.” These categories are used in the paper assignment process.
Accounts in the webreview system were then created for each reviewer. This is normally a manual procedure but sysadmins like myself aren’t particularly keen on drudgery. I did what any self-respecting sysadmin would do and wrote a (Perl) script to automate the process. It used HTML::TableExtract, one of my favorite modules, to scrape the list of reviewers/email addresses from our internal planning wiki (more on this wiki in another post), created a reasonable secure, pronounceable password with Crypt::GeneratePassword, filled in the account web form with WWW::Mechanize, and then mailed the password and reviewing instructions to each person with Mail::Mailer.
Each reviewer was then asked to log on to the system and set their review area preferences. Review areas are just another name for the categories I had assigned to each paper earlier. Reviewers are asked to identify the areas within which they feel competent/experienced to review and those they can’t review. This helps to make sure that papers are reviewed by people who believe they have expertise in that paper’s subject.
The first step towards assigning papers actually consists of deciding which papers can’t be assigned. All known conflicts of interest are entered into the system at this point. For example, reviewers are not allowed to even view the reviews of papers they have written or taken part in helping to construct. Throughout the whole process, we’re very careful to keep this boundary intact.
Finally it is time to assign papers. This consists of matching up people’s review area preferences to paper categories while still respecting conflicts of interest. Given the number of reviewers, review areas/categories and submissions, this can be a heck of a manual process because the webreview system has no support for this matching at all.
Yup, Perl to the rescue again. I took a couple of days to write a matching script. The end result:
% wc -l match.pl
720 match.pl
Though a respectable number of those 720 lines are comments and self-generating documentation (so another program chair can use it), it’s still a pretty honkin’ script. I found out while writing it that this turns out to be a non-trivial problem to solve. One has to perform a match while taking care to also observe all of the review area preferences. For example, if someone says they will review things in categories A and C but not B, and a paper is tagged with all three categories, the matching process has to make sure not to assign the paper to the person because of the negative preference. Finding an optimal search order when performing the match was another thing that gave me pause.
This script was also written with the desire to do what-if calculations. I wanted to be able to ask “if each reviewer gets assigned a max of 8 submissions but no less than 4, how many reviewers would each submission get, given everyone’s preferences?” And truth be told, there are a number of bells and whistles and I couldn’t resist including. It can autodownload the data out of the webreview system, do the match, display the results in pretty tables and then actually commit the results back to the webreview system (saving me literally hundreds of clicks). Here’s the usage just to give you a final taste of the script:
match [options]
Options:
–fetch: fetch a new copy of the data files <off>
–potential: display all potential assignments <off>
–commit: actually post the assignments in webreview <off>
–user=username: user name for chair (required for fetch or commit)
–pass=password: password for chair (required for fetch or commit)
–random: avoid the smarter assignment strategies <no>
–reallycare: if reviewer says “don’t care” treat that as a no <no>
–maxperpaper=#: max # of reviewers assigned to each paper <5>
–minperpaper=#: min # of reviewers assigned to each paper <5>
–maxperperson=#: max # of reviewers assigned to each paper <5>
–minperperson=#: max # of reviewers assigned to each paper <4>
–help|manual: display summary or doc
(Hey, I promised you behind-the-scenes, here they are!)
Phew. I ran this script until I found a set of values that provided good coverage for all papers and even distribution of work to reviewers. Once I found them, I ran the script and told it to commit the results back to the webreview system. Held my breath, everything worked great, and we were off to the races…
We’ll pick this saga up next time with how reviews actually work.