This document discusses backward compatible development and provides examples. It explains that backward compatible approaches introduce new implementations alongside existing ones without removing existing code. This is achieved by proxying calls to the new implementations. Backward incompatible approaches remove existing implementations and refactor code to use new ones exclusively. The document also discusses specific cases like adding new methods, properties or constants, and identifies some subtler backward incompatible changes like adding functionality without reusing interfaces. It provides resources for backward compatible development best practices and change discussions.