1. A method, in a computer system having one or more processors, for transforming a design tree, the method comprising: receiving a version of the design tree; transforming, with at least one processor, the received version of the design tree into a transformed version of the design tree; sending the transformed version of the design tree to a first transform comprising a source transform or an intermediate transform; maintaining a mapping between elements of the received version of the design tree and elements of the transformed version of the design tree; receiving an identity-description of a portion of the transformed version of the design tree; transforming the received identity-description to a transformed identity-description based on the mapping of elements; and sending the transformed identity-description to a second transform comprising an intermediate transform or a sink transform, wherein the second transform is different from the first transform, wherein the transforms form a pipeline having a modular architecture including a portion that starts with the first transform and ends with the second transform in a first direction and starts with the second transform and ends with the first transform in a second direction opposite to the first direction, and wherein each transform is reversible such that in the first direction each transform transforms versions of the design tree and in the second direction each transform transforms identity-descriptions identifying subsets of versions of the design tree.