“Extensibility” vs. “User Extensibility”

When users “customize” software against a requirement, this requirement fits into three levels of “vendor predictability.”

It’s that last one that’s problematic. How well does a vendor support “creative” requirements?

Some vendors wouldn’t support this at all. They would require the customer to do this completely offline and just copy and paste the resulting value. They would require a “manual intervention” for this requirement – a human-gapped process.

Other vendors might provide a toolset for this. Their software would have a set of features that are optionally used to enable these requirements without a manual intervention, and presenting the illusion to the user that the software was designed to do this all along.

For our last example, here are some tools a vendor might supply:

And here’s a key: each of those tools solves a patterned need. When combined together, they can solve a specific need.

Now, this is just a general view of extensibility. If you look at the all the tools up there, they can all be created in such a way to require root access to the application.

The trick to user extensible software: how can we create these tools in such a way that they does not require root access to create or modify them?

Some of the above list are easier than others:

Put in colloquial terms, the core question of user extensibility is –

How much can a user adapt the software to their specific requirements without requiring root access?

Or, in much more common terms –

“How much can we do without a developer?”