What makes a StableInterface? ''please add -- PeterSommerlad'' * it is supported by a GreatAbstraction * it incorporates DesignForSlippage * it is easy to use * it avoids too strong typing (TypeSafeInterfacesConsideredHarmful) * it provides good default behavior, even if it is misused * it doesn't leak implementation details, such as data structures * it can serve implementations and clients far beyond its initial intention * everybody understands it and its limitations * it was invented by its users and used by its inventors * it is usually a result of rigorous refactoring or designed by very great practical thinkers that are thinking practitioners * it lacks any really bad features, so no-one feels driven to fix them * it lacks any really obvious gaps or missing features, so no-one feels driven to add them * it follows the LawOfDemeter Tongue in cheek answers: * It's too hard to change * Nobody's using it, so no need to change * It is not permitted to change, everyone codes work arounds to use it What else makes a StableInterface an AbsoluteJoyToUse? -- DavidBennett * it can be queried for additional services or extensions. (This PatLet is used in Unix file I/O, X11, OpenGL, COM, CORBA etc.) In PoSaTwo this is called ExtensionInterface (aka ExtensionObject). * it can be queried for information about itself (eg COM/TLB, .NET) Can we make a pattern from this stuff? ''I think that a StableInterface is a synergistic result of several patterns'' --NatPryce. ---- But is a stable interface always worth the cost? ---- see LeastFlexibleProtocolWins, ImplementationIndependenceLimits