This paper introduces a pattern for almost compositional functions over recursive data types, and over families of mutually recursive data types. Here ``almost compositional'' means that for all of the constructors in the type(s), except a limited number of them, the result of the function depends only on the constructor and the results of calling the function on the constructor's arguments. The pattern consists of a generic part constructed once for each data type or family of data types, and a task-specific part. The generic part contains the code for the predictable compositional cases, leaving the interesting work to the task-specific part. Examples of the pattern are given, implemented in dependent type theory with inductive families, in Haskell with generalized algebraic data types and rank-2 polymorphism, and in Java using a variant of the Visitor design pattern. The relationships to the ``Scrap Your Boilerplate'' approach to generic programming, and to general tree types in dependent type theory, are investigated by reimplementing our operations using those frameworks.