Technology Foothold 101

I do a lot of new technology investigation and I can tell you that first impressions matter.
Far too often, my first few hours with a product consist of:

Rock Climber
  1. Trying to figure out what to download
  2. Searching for simple examples
  3. Fighting CLASSPATH and JAR file hell
  4. Dealing with obscure “Name not found” types of exceptions

If my first day with a new product is miserable, I’ll probably move on to your competition.

Foothold 101

Here are some tips to make your product easier to approach and learn:

  1. Ease the JAR file pain.
    • Reduce the number of JARs, if possible. Apache ActiveMQ lets you choose between a single big JAR or many small JARs. Having that single JAR is a blessing during early development.
    • Clearly list the requirements for each JAR. If your product ships with 30 JARs, provide a documentation page that tells us which ones we need, and why.
  2. Provide 5-minute tutorials with simple example code. Many projects on The Codehaus have these 5-minute tutorials, and they are a fantastic idea. You can always follow up with more in-depth documentation, but the quick-start Hello World is — and always will be — essential.
  3. Beware overly technical documentation. It is highly likely that new users are not experts in arcane P2P networking terminology. The JXTA project documentation is a really good example of what not to do. I struggled with this for an entire day and just gave up in utter frustration and rage, unable to get much of anything to work.
  4. Your web site needs to be clean and easy to navigate. I am generally lost and confused when I try to navigate java.net projects like SwingLabs. Hell, their own search engine just crashed when I tried searching for “swingx”. I found it (and SwingLabs) through Google.
  5. Make sure your damn demos work.
  6. If your project requires me to compile, then let me type a single command to make it happen. I don’t care if it is Maven or Ant, just make it work. I’m here to learn about your API, not to diagnose a sloppy build.
  7. Framework and API developers should spend a huge amount of effort providing useful error messages. There’s nothing worse than firing up a new product and seeing messages like:
    • Logging is not configured. To see output edit some magical XML file.
    • Name not bound. (Uh…where did you look?)
    • Batch update failed. (gee, I don’t suppose you could tell me a table or column name?)
  8. Provide obvious downloads. If a particular release consists of three ZIP file choices, explain what those choices mean. Which do I want, and why? I generally just download all of them, because I’m afraid I’ll miss something. Check out the download counts for Guice. Notice that pretty much everybody who downloads guice-1.0-src.zip also downloads guice-1.0.zip. I’m not alone! Maybe all but the biggest projects should offer a single ZIP to download?
  9. Make sure your ZIP file extracts to a subdirectory. Don’t you hate it when you unzip some new toy, only to find it just dumped everything into the current directory?
  10. Provide an IDE-friendly ZIP or JAR containing all source code. This way I get proper JavaDoc tooltips and can easily navigate to source. Few things are more annoying that projects that ship with 15 separate parallel source trees, requiring me to spend precious time configuring a complex project.
  11. Screencasts are a great way to get people started.
  12. Concise documentation is often better than verbose documentation. Up-to-date documentation is priceless.

Credit

For the record, I stole the term “Foothold” from Mike.


10 Responses to “Technology Foothold 101”

Nice. This stuff can’t be said enough.

Jacques Says:

JXTA teaches a lot of ‘not to do things’. Quite awesome. The project aimed too high and fell quite uglily. There are heroes trying to make this big software crap to happen, but it is something not worth the effort.

What is the value of a p2p platform that cannot guarantee that a (little) data stream is sent to a peer even after a connection has been ’sucessfuly’ established? Or something so pretty difficult to configure and run? No, thanks.

Dennis S Says:

Also give me a glossary of terms… it seems every time I begin working with a new application they have another way of naming things. Also, I may be a real newbie to the topic, help me know what I don’t know. Also provide a breakout/breakdown/subdivision, for the beginner, intermediate and nitty gritty. Of course, that’s just my opinion, I could be wrong. (sorry Dennis Miller)

Dennis S Says:

@myself
-1 Also, also, also… clicker faster than the proofreader…

tra Says:

Too bad you could not spend one more day on JXTA! People are doing pretty neat stuff
with JXTA lately. Check this http://saxta.geog.umd.edu

You may want to check the latest JXTA 2.5 release and new programmer guide which is really making
things much simpler.

Jacques, sorry to hear you have such bad opinion of JXTA, but sounds like you are the
kind of guys that have no clue about what you are talking about. I am using JXTA and
not seeing any of the problem you are mentioning.

Eric Burke Says:

@tra that’s the version I used. The programmer guide may be rewritten and even up-to-date, but it is far too verbose and immensely overwhelming for newcomers. It spends way too much time extolling the virtues of JXTA in early chapters without showing concrete examples until Chapter 6: “The Basics”. The first code example, again in Chapter 6, shows three full pages of code to…generate an ID. Huh?

That is followed by a NINE PAGE example called “AdvertisementTutorial”. Talk about complicated! That’s “The Basics”?

Here is my advice. Chapter 1 should show a tiny Hello World program.

Chapter 2 should show a P2P app like a little Chat program.

The next example can show how to add a screen to the Chat program that shows all members of the group.

Then you can show how to handle new members coming and going, i.e. incorporating concepts like advertisements and unique ID generation.

The existing examples seem like random complicated facts and APIs. If I can’t write a small program after an entire day, something is seriously wrong.

Dean Says:

I think there should be a BHI (Burke Hostility Index) rating for technology investigation. Then when one is interested in something they can check the BHI to see if it’s within their personal foothold threshold.

Jacques Says:

Have no clue?

I waste three years dealing with JXTA. Trying to make things work, and it was a quite bad experience. It’s not because there’s a project using it right now that it is a good alternative. I didn’t post any details because this blog is not a forum and JXTA cannot bypass its drawbacks even with heroic efforts. JXTA has been around for at least 5 years (FIVE YEARS!) and how many apps do you really use that JXTA based?

tra Says:

Eric,

Thanks for your constructive comments. I will pass them to the community’s
documentation project owners. The intent of the initial chapters is
to explain the core concepts of JXTA before diving into specific code
samples.

Jacques,

If you could not get things done in JXTA after three years, sounds
more like JXTA was not the right technology for you ;-)

Gabriel Says:

Very piece advices. I very like the parctical point of view: the zip must be contained in a directory. Thinking about Tapestry? This little thing is very annoying thing.
And many more.
I a prefer 10 minuts example.
I very like the “step by step” tutorials. Such as in Spring. very usefull, and helps to really understand how thing get together.

Successfull projects have great doc. Punto i basta.

Leave a Reply