"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