Extensible Decisions
This paper proposes a programming style where each piece of behavior has a predicate that specifies when the behavior needs to be executed. Such a pair of predicate and behavior body is called a branch.

The paper is of immediate practical benefit because the programming style promoted by branches can be simulated with AspectJ.

A key benefit of branches is that we can program by addition instead of by modification. When the program evolves, we would like to add additional branches instead of having to modify existing branches.

This approach works best if each branch focusses on one purpose. This means that we want to factor large complex and tangled branches into several small branches, each one prefixed by a predicate.

Branches are a generalization of both methods and pointcuts/advice in AOP. For methods we have the Law of Demeter (which promotes "small" methods) and which has the general formulation:
Each unit should have only limited knowledge about other units: only units "closely" related to the current unit.
http://www.ccs.neu.edu/home/lieber/LoD.html

What is the Law of Demeter for branches? Does the formulation help to write simple branches that are more easily extensible by addition?

The paper is available in several formats. aosd02.* is the paper, slides.* is the presentation from NU PL Day.

Bibtex entry:

@INPROCEEDINGS{doug:aosd-2002,
AUTHOR = "Doug Orleans",
TITLE = "Incremental Programming with Extensible Decisions",
BOOKTITLE = "First International Conference on Aspect-Oriented Software Developm
ent",
YEAR = "2002",
ADDRESS = "Enschede, The Netherlands",
PAGES = "",
EDITOR = "Gregor Kiczales",
PUBLISHER = "ACM Press",
NOTE="http://www.ccs.neu.edu/home/dougo/papers/aosd02/"
}