Few production virtual environment (VE) applications involve complex three-dimensional (3D) interaction. Our long-term collaboration with architects and engineers in designing 3D user interfaces (3D UIs) has revealed some of the causes: existing interaction tasks and/or techniques are either too generic when isolated from the application context, or too specific to be reusable. We propose a new design approach called domain-specific design (DSD) that sits between the generic and specific design approaches, with an emphasis on using domain knowledge in 3D interaction techniques. We also describe an interaction design framework encompassing generic, domain-specific, and application-specific interaction tasks and techniques. This framework can be used by designers to think of ways to produce domain-specific interaction techniques. We present a particular DSD method, and demonstrate its use for the design of cloning techniques in a structural engineering application. Results from empirical studies demonstrate that interaction techniques produced with domain knowledge in mind outperformed other techniques by improving task efficiency, work flow, and usefulness of the 3D UI.