"To show evolution, you need to do something in a new
way or do something you hadn't done before."
In the
following discussion I will use the terms "extensibility" and
"evolution" using these definitions.
I would like to hear your
thoughts on ways to enhance the richness of an information
system.
I see two ways of enhancing the richness of an
information system:
1. Horizontal
Extension
2. Vertical
Evolution
Below I explain what I mean
by these terms.
Horizontal
Extension
A typical method of
growing a system is to "add more stuff". For example, Amazon can grow by
adding more ways for users to locate information:
- add a
keyword search capability,
- add a
way to locate information based upon book category,
- add a
way to locate information based upon author name,
-
etc.
By "adding more stuff"
Amazon has extended its "access mechanisms". The system has expanded
horizontally with new access methods. I refer to this method of enhancing
the richness of a system as horizontal extension.
Advantages: this method of
enhancing the richness of an information system is well understood and is
controllable.
Disadvantages: no matter
how many ways Amazon provides for accessing information, it will never be
enough. The need for new ways
to access information changes as
information changes (e.g., new fields of study) and as users change. (I
offer as evidence the constantly changing face of the Amazon web
site)
Vertical
Evolution
When I was a child I used
to enjoy building things with Legos. Starting from simple Lego building
blocks I was able to build up rich structures. The Lego building block
"interface" was fixed (i.e., the blocks snapped together in certain ways).
But that simple interface was sufficient to enable creation of
tremendously rich structures. The richness of the structures was
limited only by my imagination.
Analogously, a
method for enhancing the richness of a system is to "build up" the system
from building blocks. The system is thus designed to support
different mechanisms for "connecting" the pieces. After
launching the system, the ways that the system changes is dictated by how the
users connect the pieces together.
For example, suppose
that Amazon provides a "related to" mechanism for connecting
information. Further, suppose that Amazon does not have a keyword search
capability. The system could "evolve" to support keyword searches by using
the "related to" mechanism:
XSLT
--------------------> XSLT: Programmer's Reference by Michael
Kay
"related-to"
"XSLT" is a
user-defined keyword.
"XSLT: Programmer's
Reference by Michael Kay" is a basic information building block within the
Amazon system.
It is important to
note that no new functionality was introduced. Existing functionality was
utilized to enhance the richness of the system. That is, the "related to"
connection mechanism was used to create the keyword search mechanism. I
refer to this method of enhancing the richness of a system as vertical
evolution.
Advantages: the
system is able to quickly respond/adapt to user needs. In fact, it is the
users that evolve the system! The system simply provides the mechanisms
for the user to "snap together the building blocks".
Disadvantages:
it is important that the system provide guides to ensure that evolution occurs
in a useful direction. (The system guides,
but does not control the evolution)
What are your thoughts on this? /Roger