Extensible Open Source projects.
Quite often an open source project is started because somebody
wanted some functionality that didn't already exist (or that
they weren't aware of). A small project is released and it
will either flourish or languish depending upon whether others
find it useful or not.
I've seen small one time hacks even become released products
from commercial companies. Once such a one-off hack becomes a
product, then it needs to be supported which can be quite
painful if the initial hack wasn't pretty.
A better approach would have been to properly design the
application, get potential user requirements, test prototypes
with real users, create a functional specification, then work
towards an implementation (making sure that everything is
fully documented). A lot of work, that not everybody wants to do.
Successful projects have typically taken those steps and more.
More and more I'm seeing projects that provide some kind of
extensible functionality. One such approach is with plugins.
provides this ability to allow you to automatically include
scripts that get loaded when the editor starts.
provides a plugin capability to allow you to have extra image
manipulation functionality beyond what exists by default.
There are lots of others.
With Java apps, a nice way to provide extensibility is to dynamically
load certain classes depending upon what you want to do. I used
this approach to dynamically load the transport layer code in
JSDT, a toolkit for writing collaborative
There are other approaches; graphical and audio codecs, web browser
plugins, shared libraries etc.
There is a catch in that this kind of functionality isn't always
the most straight forward approach to doing something if you are just
focused on trying to achieve a simple task. Sometimes programmers
adopt the "quick'n'dirty" approach rather than consider the greater good.
As projects become popular, then functionality like this can be added.
There is an old adage that says that a program isn't any good until it's
been rewritten 2-3 times and that you should always throw the first one
away. Perhaps a better approach would be to take more time and be a little
more thorough in the way that that first version is created.