  Good documentation offers the promise of enabling developers to easily
understand design decisions. Unfortunately, in practice, design documents are
often rarely updated, becoming inaccurate, incomplete, and untrustworthy. A
better solution is to enable developers to write down design rules which are
checked against code for consistency. But existing rule checkers require
learning specialized query languages or program analysis frameworks, creating a
barrier to writing project-specific rules. We introduce two new techniques for
authoring design rules: snippet-based authoring and semi-natural-language
authoring. In snippet-based authoring, developers specify characteristics of
elements to match by writing partial code snippets. In semi-natural language
authoring, a textual representation offers a representation for understanding
design rules and resolving ambiguities. We implemented these approaches in
RulePad. To evaluate RulePad, we conducted a between-subjects study with 14
participants comparing RulePad to the PMD Designer, a utility for writing rules
in a popular rule checker. We found that those with RulePad were able to
successfully author 13 times more query elements in significantly less time and
reported being significantly more willing to use RulePad in their everyday
work.
