If Cocoon goes for a 3.0 approach, I would have to argue for a more
radical approach than "just fix things here and there". The problem is
one of focus. On paper Cocoon is a very capable framework. It
introduced us to a great new world of dynamic web sites. It's caching
system kicks tousche. And yet, the old guard is moving on and the new
guard doesn't know where to start. How do you go about creating a
simple web application? How do you integrate a couple web services into
a larger app? How do you do forms? etc.
Cocoon 2.0 is like Visual Studio.NET. On paper there are a hundred
things that kick but. When you use those features, it does make your
life easier. However, we don't allways use the cool features every
day. There are some things that would make every day life even better
such as programming by intention and refactoring tools. It just feels
like the same old thing rehashed and a couple features added on.
It should be like JetBrains IDEA. Almost every feature that is included
somehow makes daily development life easier. There is an early access
program to draw feedback from the user base. You don't have to think
about the features that you need because they are right there. Even
better is that the features are where you need them, and they aren't
obtrusive. You don't necessarily notice IDEA by itself, you notice it
by its absence.
We need to ask ourselves some hard questions: Do we really need it? (It
being whatever feature up for discussion) Does it make the user's life
easier? Can an Average Joe understand it? How does this fit in with
the overall vision? What is the overall vision?
I may be off base here, but I believe the majority of Cocoon's users are
developing /interactive web sites/ and not statically published sites.
The original vision has changed, but the enertia behind the
implementation has made Cocoon slow to adapt. What we need is
_just_enough_ to get the job done. There should be _one_way_ to do
things. Options don't make life easier--they make negotiations easier.
Are there things in the cooker that will put Cocoon in the sweet spot?
Absolutely, but fitting them into the current architecture has been
difficult. I'd assert because there are too many ways of doing the same
thing.
What about Risk?
----------------
There is risk involved in any start over/redesign. Now, I have been
involved in three wholesale redesigns of software at the various
companies I worked for in the past. Each one of them has been
successful because of the approach I take in doing it. I use every
experience to help make development and design better. Here is the
basic outline of the process:
1) Decide on a regular release schedule and employ a FedEx method of
development. For example, Cocoon 3 should be released AS IS every
month. The first versions may not have a whole lot there, but it should
give an indication of where we are going. This is our Early Access Program.
2) Test First Development. By writing tests _first_ we have a feeling
of _how_ something is used. It is our first feedback of whether or not
we are barking up the right tree. If we don't like the results
ourselves, it is doubtful anyone else will like it.
3) Forget the "Everything is a Component" mentality for a bit. Let's
see just how far containerless programming takes us. You might be
surprised. The number of moving parts is/should be relatively small.
Lets just start with good OOP to begin with.
4) Focus on the essentials. Deliver the most important things first.
Focus on stability and understandability at each stage. Compare how the
new feature is implemented with the whole. There should be a
continuity. You should be able to say that things "just work" and
everything "just fits".
You will be surprised at how quickly you can get to a point where Cocoon
3 is ready for prime-time. The fact that it will be much easier to use
than its predecessor will generate the excitement. We will have to
measure success by "gee its easy to do this in Cocoon, why is it so hard
here?" Forget about the wizbang hollabalou of featuritis or even
providing a solution for the XML technology du jour. Start with good
foundational principles. SEE HOW MUCH WE CAN LEVERAGE EXISTING TOOLS!!!
We need to see things from the eye of a user. If Cocoon is going to
make it through the long haul, it needs to pick up momentum. It will
only do that if we can generate excitement. Excitement surrounding some
new whizbang feature is temporary. Excitement because Cocoon saves time
and doen't require significant ramp up to understand it lasts much
longer. If you can tell a manager that they will save money by using
Cocoon, and prove it, then it will have a higher adoption rate in
corporate america. To obtain that goal it has to be solid. It has to
save time that would normally be spent writing config files or mapping
files. Etc.
Don't worry about things like database integration at this time. There
are other tools that handle that. Hibernate, Apache OJB. They both
handle object/relational mapping. Suggest the use of those for database
related work. Will there be dynamic pages? You bet ya, but they will
probably be a bit different than they are now.
We bemoan the fact that there aren't any/many tools for Cocoon
development, because we have our users working outside Java and in all
these scripting languages. You'd be surprised at just how good a Java
application can be. Be proud of your environment. Embrace it. Let
it's tools work for you. Simplify.
Be kick *ss because of what you _don't_ have. Create passionate users.
That's my two cents. I'm probably working on what will be my last
Cocoon app--unless we can create something that is just so good, and so
natural to use that I can't resist. But Cocoon in its current form is
just too much. Too much of everything. Too many languages to learn
(sitemap, XSP, JXL, CForm, JavaScript). Too many concepts to learn
(Avalon, SAX, Cache System). Too many ways of doing the same thing.
We need one vision, one goal, one way. We don't need to achieve it by
endless debates. We acheive it by trying a particular approach, and
getting feedback. The feedback from early adopters is very important,
and they are far enough removed that their opinions are more trustworthy
than our own.