Friday, August 18, 2006

How nifty does it need to be?

A while back, Rocky Oliver floated the idea of resurrecting the Nifty Fifty, a group of fifty minimal sample applications that IBM threw into the box with every purchase of Notes 3.somethingorother. They didn't do much, and were never really intended to do much. They were fifty sets of ideas, fifty starting points for developers to build upon.

Lately, the idea has been getting a lot of play, thanks mainly to John Head. John suggested that, with Microsoft entering the fray and including application templates with the various incarnations of Sharepoint, the community should step up and contribute a set of "real" applications to run on Notes and Domino. The community consensus seems to be that the idea would not fly unless the apps were distributed and supported by IBM.

I guess it's time to throw my coupla cents in.

Should there be a set of application templates available that go beyond Discussion, Document Library and TeamRoom? You betcha. Does the set need IBM distribution and support? Again, you betcha. Do these applications need to be everything an organisation could lust after out of the box? Not on your nelly, nor on mine, neither. Not no-how.

What Domino needs is fifty (give or take) Really Good Ideas™ rolled into a neat little package. The applications need to be useful and usable, but each should really only try to do One Thing Right™. They should do that clearly and with voluminous documentation even for the most obvious bits. And while an application would need to include all of the ancillary bits that make its particular Really Good Idea™ work, it should absolutely cry out for extension and customisation.

A big part of what got me started down this track was jonvon's list of suggestions. In particular, it was the suggestion that there should be no obfuscated JavaScript (as one finds in Domino Web Access). As I've been doing a lot of webby things lately, it occurred to me that clear, self-documenting JavaScript on the scale required for a genuine Web Application™, complete with all of the neat Ajaxian features and behaviour layers and everything else that represents large-scale functionality these days, would make the needed libraries huge. Not merely big, but huge. Obfuscation might be a maintenance programmer's worst nightmare, but failing to make the downloadable component as small as it can be by using short names and proxy functions is working at cross purposes to the user community. Sure, it's easier for a developer to see what's going on and make modifications to the code (that is, without having the same obfuscator and replacement key file), but at a cost that can be as much as 80% larger code.

Let's take the Prototype library's $ function as a basic example. The name is impenetrable (and forget about documentation — Prototype was not intended for human developers to interact with, so it's enough that Rails understands what's going on), but by the simple act of replacing document.getElementById("someID") with $("someId"), you save twenty-two characters with every call, recouping the cost of the function in only two calls. Twenty-two characters might not sound like much, but one might make a call like that a hundred times or more in a complex script, and that's more than 2KB saved right there. Short variable names come with similar savings, as do snippet "constants" fed into the constructor of a function or an object.

When it means the difference between 2KB and 10KB, even over a bad POTS connection it's not worth sweating. But when the same ratio takes you from 30KB to 150KB, you start running into usability issues over dialup and on slow, crowded networks. Sure, the file is cached, but that's on a per-database basis (and what if the user is using several applications of the same or similar design?) and only after that first slow download. The fact that the application is better-stronger-faster after it loads means very little if the initial hit feels like one is installing Office. Users will not put up with slow, and it will be Domino's fault no matter who actually wrote the code. Chuck one application, and maybe even the platform it runs on. That means that if clarity and extensibility are among the chief aims of the project, as I believe they should be, then we have to aim lower than Google Maps or BaseCamp with our web examples.

I agree that the templates in the set need to be as simple and clear as they can be. We are, after all, trying to sell the possibilities of the platform, and if a developer can't figure out what's going on, she's going to have a hell of a time trying to build her own custom applications. And they should be no simpler than necessary. Each application needs to do something that will be useful to someone, if for no other reason than to encourage the "Notes guy" to open the thing up in Designer to take a look under the hood. There almost needs to be a hole in every application, though; something that is obviously missing, but not so obvious that the template will be discounted as useless right away. NiftyNext™ should be at least as much about teaching as it is about value added to the platform. Let the all-singing, all-dancing, impenetrably complex applications remain as they are now — commercial ventures and the province of internal corporate developers.

After all, if everything comes in the box, we're all out of work.


Anonymous said...

The first system I ever had to build was a simple approval workflow, somewhere around Notes r4.0. There was this template called "Approval Cycle" or something, and it saved my bacon! I guess it was a leftover of one of the "nifty fifties". I had no idea where on earth to start and this template just got me going. Yes, today, maybe I would not use any old IBM free template but those days, it was my learning platform. I think providing a basic out-of-the-box set of apps would be an educational tool and, in time, also lead to an escalation of overall development work out there. Thinking back now, the major loss in development work has always been the withdrawal of Notes as a platform and losing a client as a whole; it has never been free templates or even paid solutions from other Business Partners (as we end up customising/fixing those also...). If including free, funky stuff would make clients think twice about how useful Notes really is, I'm all for it and heck, I'll help code them if they'll accept my gruel. And as much as I agree they should be small and in dire need of customisation, I think they should contain some killer code, e.g. include perhaps SAP and Office suites integration, a reporting tool, web content manager etc. The work will come back to us...

Richard Schwartz said...

The nifty fifty were not in the box. They were a download from the Lotus ftp site. I contend that this library of apps doens't need any official Lotus support. It merely needs Lotus acknowledgement. No matter who it comes from, if it is a useful way to demonstrate the power of Notes, IBM sales and marketing will know about it and they will use it. It will get in front of customers.

Richard Schwartz said...

With respect to "Really Good Ideas", there was actually a book written in the early Notes 3 time-frame, called the Lotus Notes Idea Book. Hmmm....

Stan Rogers said...

One would have to take "in the box" figuratively. I would expect to see NiftyNext as a separate, free download (as was the original), if for no other reason that to prevent templates in different versions of the collection from overwriting one another at upgrade. (We can't assume that folks who need a Nifty Fifty are going to make new copies to work from.) But I do think the download source needs to be Lotus itself -- too many would be unjustly afraid to source them from anywhere else, despite the assurances of the local BP. That doesn't mean that they need to be IBM-branded or get a blue rinse. They can proudly exhibit their origin and express their individuality. The folks who would be using the templates just need to know that they're perfectly safe, and they'll believe that much faster if the source is IBM.