As you all are aware, I've been putting most of my recent Hackystat energy into documentation: not just at the level of explaining the current system, but also at the level of developing a Hackystat documentation framework that allows documentation about future extensions to the system to be seamlessly integrated with the existing documentation.

Here's an article from a person who claims one reason Eclipse has been so successful is because of the quality of the documentation, and that the amount and quality of documentation is a key success indicator for frameworks in general. If he's right, then it seems like we're on the right track!

Cheers,
Philip

------------ Forwarded Message ------------
Date: Friday, February 24, 2006 1:24 PM -0500
From: EclipseZone News <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Subject: Choosing a framework you can rely on

The real motivation for picking a framework is based on two things: trust and
accountability. I know this sounds ridiculous, we are techies, we choose things 
based on
their technical merit, sometimes even their whizz-bang! Do we though? Do we 
really think
that is enough when your boss comes to you and says "Ok, I need you to build an
absolutely bullet proof application for a government agency where security and 
stability
are of the utmost importance.&rdquo; Do you even consider using that cool 
SourceForge or
JavaForge project? Are you too scared to even imagine what would happen if the 
system
crashed, kept crashing, or got hacked?

Let's say you took the risk; the XYZ Framework project is just too cool to pass 
up and,
besides, you want to learn it. What happens when you get past the design stage 
and get
into the heavy coding stage? What happens when you are 3/4 of the way through 
it and find
out that there is a huge design problem with how sessions are handled? Maybe 
you find
it's impossible to totally secure access based on how the framework handles 
flow control?
Now what?

Now, keep in mind I'm not equating commercial to stable; I'm only making a line 
in the
sand between "new, cool project" and "old, robust, tested project". I've been 
giving this
a lot of thought recently, as I am currently in this position, and I think a 
lot of
developers go through this same internal dialog. You want to know the real 
reason why so
many developers "grow their own"? Because they don't understand what is out 
there. I
write Riyad RCP because I don't understand how Eclipse RCP works. That is, 
until I get
months into Riyad RCP and go "Oh, now I understand why they do that with 
Composites... go
figure." Now it's too late to stop, too much work has gone into it.

Think of the jobs you have worked at where you inherited some legacy framework. 
Isn't
everyone's explanation for it something along the lines of "When we started 
this project,
none of the options out there did what we wanted.&rdquo; Now you're left 
sitting there
staring at basically a text book app and thinking "Yes they did...&rdquo; So 
what
happens? Accountability and trust is what happened.

If a developer has to put his trust in something and he's relatively sure of 
his skills,
I think a lot choose to put their trust in themselves. "I will write a 
fine-tuned
framework specifically for this app; it will be so much more efficient then 
general-case
frameworks." What really ends up happening is that his intentions start off 
good enough,
but as the framework stage of development drags on, and managers want to start 
seeing
demos the inevitable happens. The project gets rushed out the door in a very 
incomplete
state. However, the one benefit here that a lot of developers value, even if the
framework isn't perfect, is that they feel confident in their ability to 
maintain the
framework and fix bugs. They know exactly where the ResourceBundle loading is 
done, so
there is no search necessary. They know to open up LeakyResourceBundleUtil.java 
and fix
it, and because of this they feel confident; they can be accountable. What 
scares a lot
of develo! pers is using some well known framework and having the inevitable 
bug show up
and then having no idea how to fix it. Mailing lists can help, but ultimately 
the bug
could be in your huge mess of code which you can't share with anyone else to 
look at.
Scary.

If you sat someone down in front of a huge framework, say the Eclipse platform 
with no
documentation and they banged out an email client that threw a NPE every 10th 
time
checking mail and asked them to fix it, a lot of developers would balk at that. 
"Oh god,
I have no idea where to look. I should have written my own framework."

How do you combat this? How do you get people to stop reinventing the wheel? 
How do you
get them to feel confident enough in the platform that they can throw all their 
eggs into
the basket and say "We are in this through thick and thin, I love you."? You 
provide
documentation. In fact, you provide so much documentation that your 
documentation could
kill a small horse. You document everything, not just Javadoc, but features,
how-to&rsquo;s and styles of coding. You try to provide so much documentation 
that
someone could search for "Splash screen", and not just find the Javadoc on 
Window, but
actually find a document on how to write a splash screen using your framework.

This is exactly what the Eclipse developers have done and continue to do. This 
is the #1
complaint against using alternative frameworks like NetBeans even from the 
Eclipse 1.0
days. There was no contest when it came to the level of documentation provided 
by the
Eclipse group to learn their platform, every tiny part of it, in and out.

I have to say with a certain level of confidence that this is 85% of the reason 
that
Eclipse steam rolled the competition out of the gate. When you make things 
accessible to
developers, don't waste their time. Grease the wheels and give them the 
controls, they
will love you for it. I can certainly see the bulleted lists, the framework 
comparisons
and the mailing list arguments: "NetBeans has supported that forever! Spring 
RCP has
supported that forever! MyRandom RCP has supported that since its pre-alpha 
release!" The
point is, no one knew that. There were one, two or three "Getting started" 
guides, maybe
a "Starter tutorial" here and there, but where were the "Splash screen how-to" 
or the
"View synchronization" tutorials or even the random 10 "Sample application" 
guides that a
developer could read and extract just enough from each one to map it to his own 
needs?
Well, a few years ago, this style of! documentation was no where except in the 
Eclipse
camp. Now NetBeans and the other frameworks are pumping out some excellent 
tutorials.
Folks like Roman Strobl are spending their days creating web casts, screen 
casts, quick
tutorials and blog entries covering all the nooks and crannies I'm talking 
about. This is
what we need: giving people editable appetizers of information that they can 
convert to
bigger apps, or just have fun with.

Is this too little too late for everyone else? God no. Keep it up I say, mush 
mush! The
more documentation out there the more everyone is going to strive to improve 
and reuse
these frameworks. At the end of the day, all we as developers want is something 
that we
can trust our next app on.

When I originally wrote this article it had a strong web framework undertone to 
it. I
believe this is because the barrier to entry in the web framework arena is much 
lower
compared to a good client side framework like NetBeans or the Eclipse platform. 
That's
not the type of thing you spec out in a weekend and have a beta running by the 
next week,
but all the arguments apply. Think back to around 1998. Was there even any 
framework that
people could consistently suggest to one another to use for any client side 
app? I'm not
aware of one. Because of this, I can only imagine the number of legacy 
frameworks that
have been created over the years to solve this problem in-house that we are 
never made
aware of. At least with web frameworks, most of them end up in easily 
searchable arenas
because of their generic nature (handling requests). Client side apps can be 
fine tuned
for an extremely specific purpose, as we saw with early Eclipse releases where 
the
platform wa! s clearly tuned to an IDE. It takes work, a lot of work, to try 
and dream up
and expand the support for something like that to encompass all the possible 
use cases.
As we move forward it's nice to know we have a few mature choices so we don't 
need to go
down that path again and again.

Well, we are at the end. I appreciate you reading this article and I hope you 
take
something away from this. The key is documentation. The reason I think this is 
important
is because I am a sucker for homegrown frameworks. I like writing them, I like 
using them
and frankly every great framework we use right now was born out of an open 
source startup
at some point. Because of this, I want to encourage people to still create 
them, don't
hang your head and think "Oh it's been done before" and give up. If you do plan 
on
writing it, don't forget to document it. Give us examples, tutorials, 
explanations and
screenshots. God knows we love screenshots. Who knows, you might be writing the 
next
Hibernate, Spring or Struts right now and not even know it.

Until Next Time,
Riyad Kalla
[EMAIL PROTECTED]

Reply via email to