Skip to Main Content
The activity of "design" includes many things, but certainly one of the most important aspects is interface specification. Interfaces determine which aspects of a component are accessible and to whom; they thus determine encapsulation. Interfaces specify what functionality (data, properties, methods, and so forth) is available to clients. Interfaces reflect how a system is broken down into its constituent components. Regardless of our role in the development of a software system, it almost certainly involves some interface design, so it's helpful to have some heuristics that indicate when we're doing it well-or poorly. We've come to the conclusion that the most important general design guideline is interface should be easy to use correctly and hard to use incorrectly. This guideline leads to a conclusion that some developers find unsettling.