What is software extensibility?
Extensibility is the ability of the software system to allow and accept the significant extension of its capabilities without major rewriting of code or changes in its basic architecture. Extensible systems provide technology, tools, languages designed so that developers can expand or add to their capabilities.
What are some of the benefits customers get out of extensibility?
Having an extensibility platform not only allows companies to build and run solutions that address needs beyond the standard product but also allows them to bring innovation trends to those same solutions without risking their ongoing operations.
What's the difference between scalability and extensibility?
Scalable - make the system withstand more usage (bandwidth etc...) AND make it larger. Extensible - add more functionality to the system
The 11 Attributes of Extensible & Consumable Software
- One can set up a new account (or, if on-prem, one can install the product) in 30 minutes or less.
- The value is seen within the first hour of use.
- Full external-facing API.
- The product’s UI uses the user-facing API exclusively. In other words, the UI does not depend on any API calls or interfaces that are not documented and available to customers.
- Authentication is customizable within the product’s UI.
- The UI has a customizable look & feel.
- The UI can be extended with custom modules.
- Backend logic that can be extended with custom modules in various hook points.
- Customizations & extensions are upgrade-safe.
- Full documentation and support for the API, extension framework, and hook points.
- A rich library of readily available examples of extensibility.
Techniques for Achieving All 11 Attributes
Some tips on how to achieve more of the attributes above:
- Setting up a public location with many extensibility that users can browse extensions and find one to start with.
- Include a time into the software design and implementation schedule to build the right API for new features, build a simple UI, and also make the feature extensible & customizable.
- If you do not have sufficient time to make it easy and extensible, start with extensibility, and schedule a project to make it easy in the immediate next release. This is a more specific incarnation of Ken Beck’s rule for software: “Make it work, make it right, make it fast. ”
- Collaborate in brainstorming. Get a group of creative people together around a [virtual] whiteboard, throw around ideas good and bad for ways to make the software both customizable and easy to use. You may be surprised at what you’re able to come up with together, and at how fun it is.
- Use the extensibility framework internally! Any time a new feature needs to be developed, ask the question: what if we had to implement this without any changes to the core product code, just using the extensibility framework. If it’s too hard, the extensibility of your product could use improvement.
- Constantly ask what the easiest way to provide customizability and extensibility would be. Instead of making the customer learn a domain-specific language (DSL), could we allow them to program extensions in a language they already know? Instead of requiring them to code from scratch, could we give them a working chunk of code and then let them change it to meet their needs? Or, instead of requiring them to code, could we create a configuration UI for customizing the product?