In software engineering, extensibility (sometimes confused with forward compatibility) is a system design principle where the implementation takes into consideration future growth. It is a systemic measure of the ability to extend a system and the level of effort required to implement the extension. Extensions can be through the addition of new functionality or through modification of existing functionality. The central theme is to provide for change – typically enhancements – while minimizing impact to existing system functions.

Although forward compatibility and extensibility are similar, they are not the same. A forward compatible system can accept data from a future version of itself and pick out the "known" part of the data. An example is a text-only word processor ignoring picture data from a future version. An extensible system is one that can be upgraded to fully handle the new data in the newer input format. An example is the above mentioned word processor that can be upgraded to handle picture data or a browser that needs added functionality to successfully load and display certain document or file formats.

In systems architecture, extensibility means the system is designed to include hooks and mechanisms for expanding/enhancing the system with anticipated capabilities without having to make major changes to the system infrastructure. A good architecture provides the design principles to ensure this—a roadmap for that portion of the road yet to be built. Note that this usually means that capabilities and mechanisms must be built into the final delivery which will not be used in that delivery and, indeed, may never be used. These excess capabilities are not frills, but are necessary for maintainability and for avoiding early obsolescence.

Extensibility can also mean that a software system's behavior is modifiable at run time, without recompiling or changing the original source code. For example, a software system may have a public Application Programming Interface that allows its behavior to be extended or modified by people who don't have access to the original source code. The extra functionality can be provided through either internally or externally coded extensions.

Although usually applied to engineered systems involving software, it can be applied to any type of engineering. For example, houses can be built with future extensions in mind. The Prince Edward Viaduct located in Toronto, Ontario was built to accommodate a future subway line.

Though the application to software is relatively new, the word has been a rare but valid part of English for a long time. The Oxford English Dictionary cites examples going back to the 17th century.

Other articles related to "extensibility":

Racket (programming Language) - Features - Macros and Extensibility
... distinguishes Racket from other languages in the Lisp family is its integrated language extensibility ... Racket's extensibility features are built into the module system to allow context-sensitive and module-level control over syntax ... The module-level extensibility features are combined with a Scheme-like hygienic macro system, which provides more features than Lisp's S-expression manipulation system, Scheme 84's hygienic extend-sy ...
Scrolling Game Development Kit - Version 1
... Alternatively a project can be customized using the extensibility features described below ... Extensibility in version 1.x is achieved via the XML export feature and support for COM automation ... to be accessed from external programs to control behavior at either design time (for extensibility) or run time (for customization) ...