« Create, edit and delete without agents | Main| And if you're not Fiona Apple... »

Nifty... modules?

Category domino
So as you all know, there's been much discussion about exhuming the Nifty Fifty. Or creating our own ("It's alive...."). I've a slightly different idea: instead of (or, perhaps, in addition to) showcasing entire standalone templates, how's about creating some really impressive embeddable "modules" that can demonstrate how rapidly an existing application can be juiced up by adding one or more of these modules? I think a perfect example of this is OpenLog: add the script library to any database and it's instantly more powerful. The issue that I have with standalones is simply that, when implemented within any given Domino environment, they don't fit in... unless we did go to the hassle of Blue-Rinsing them, in which they'll still look out of place unless the organization implementing them Blue-Rinses all of their databases too.

Why is that even an issue? Well, IMHO the two main points underlying the Notes vs. Sharepoint debate are cost and ease. OpenNTF obviously addresses the first issue, no question about it. But what about ease? Yes, of course, I can slap an instance of domBulletin or DominoWiki out on my server and have it ready for users to start using in five minutes flat. So I can rapidly enhance my Domino environment, and the users benefit. That was easy. But that's not the "ease" we're really looking for in this case. When I installed DominoWiki for the first time, my reaction was, "Wow, that was very easy to install," not, "Wow, that would have been easy for me to create myself." Hardly. Most of what ends up on OpenNTF took somebody (or a whole team of somebodies) months or even years to develop, in many cases using techniques that are either cutting edge at the time or at least far more advanced than those within the range of the average Domino developer. So I feel that a Nifty Fifty that will truly convince an organization that Notes/Domino is the right platform for them would not only get them off to a good start, but also showcase how easily they can create and enhance their own applications within the platform.

Please don't misunderstand me: I'm not saying that OpenLog is a perfect example because it looks like it would be easy to create... quite the contrary. However, the bulk of what it does is really contained in a single script library (well, technically two; one for LotusScript, one for Java... but the functionality of one is essentially mirrored in the other, just using a different language, which is yet another reason this is perfect for demonstrating the capabilities of the platform). So in looking at a single design element, I can follow along: "Oh... I see what he's doing here." Much easier to get my head around than trying to comprehend something as intricate as BlogSphere. There's only one aspect of it that keeps it from being the ultimate poster-child for what I'm suggesting: it appeals primarily to techies. Centralized, standardized logging makes our lives so much easier. And, although this indirectly translates into improved user experience, the users themselves don't immediately notice a difference. Or, if they do, they won't understand why.

Perhaps what I'm getting at would be best illustrated by a story from my own past. Once upon a time I supported approximately 250 applications... in an environment that had no templates when I got there. When a change was requested, a developer would make the code changes in the live database, test the changes live (which resulted in test data mixed in with the real data, that either had to be cleaned out later or was simply left there), and until the changes were complete, the affected functionality performed erratically, if at all. Ew. Meanwhile, any functionality that was similar (or even identical) across databases had to be applied manually to each in order for all of them to receive the benefits of updated techniques.

Over the course of a couple years, I implemented a multi-layered template inheritance framework that not only allowed users to be shielded from the testing process despite the lack of a separate test environment, but also ensured that, whenever a more ideal (faster, more secure, more reliable, whatever) approach was identified for shared functionality, the next morning all 250 applications had received the "better" code. This was accomplished by consolidating all shared design elements into a global template and setting each to inherit from that template, instead of an application-specific template. In particular, this template included a LotusScript script library that was common to all applications; hence, any time we further optimized a given function or class, the next morning any calls to the optimized code ran faster or more securely or more reliably. In every application.

At some point during this process I was approached by the owner of two separate, but related, applications. One was used for documenting all aspects of a certain internal process. The other was used solely for storing meeting agendas and minutes for a weekly meeting that was held for the sole purpose of discussing the current contents of the first application. The request I received was merely to combine the two; there was no point, they said, in having a separate database to store the agendas and minutes. I agreed, so we merged them. But we took it a step further: we added functionality allowing the meeting to be automatically added to the chairperson and invitees' Notes calendars. I'm sure most of you have done something very similar; this is exactly the kind of integration that makes Notes/Domino such a powerful collaboration platform.

Next thing I knew, however, another process owner approached me and indicated that there was another pair of databases with an identical relationship. They had seen the result of the previous effort - and users' response to it - and wanted the same for their applications. And just like that, our first module was born. Given that there was no application-specific code contained in the design elements that comprised that category of functionality, I copied them out to their own template, and pointed the inheritance of each element in the applications that now contained them to that template. From then on, we were able to add the same kind of calendar integration to any application in minutes, and each retained the auto-update capability: periodically we'd add features or fix some bugs, and the couple dozen applications that - almost overnight - had come to include this module would receive the upgrade, while the rest of the functionality of each remained intact.

Over time we applied this same principle to other modules. This not only made my life easier by simplifying the process of updating self-contained featuresets of completely disparate applications, but it also demonstrated to the users why Notes/Domino was the right solution for the various business needs it was being used to address. Management acknowledged its impact on the total cost of ownership, and representatives from all areas of the business contributed great ideas for additional opportunities to take advantage of this model.

What I believe ultimately made this approach successful was that each module was intentionally designed to be highly configurable. The best example of this concept was the workflow module. A single document (which wasn't a true profile document, but could have been) in each application defined whether the application used a serial or parallel approval workflow, and whether a document's revision ID was to be incremented numerically or alphabetically. The presence of these two fields was all it took to allow the subforms that comprised this module to be added to any Notes form and instantly give it a standardized workflow that fit that application's process, no matter how disparate the application was from any other that used the same module. And once again, any time the module was improved, the improvements filtered out to every application that used it.

My point is that this isn't just my approach; we all do this sort of thing, to some extent. This isn't some trade secret I'm giving away here. But we're all doing it independently, packaging up our code into an internally sharable form so that we can save ourselves hassle and make our users' lives easier. But wouldn't it be great to extend this approach globally? All of us create and support applications that are specific to a certain business or industry, but at the end of the day, most of them do very similar things, and certain portions of them are universal. So why not have a shared codebase for certain small areas of functionality? From the web side, think of prototype.js, or Scriptaculous, or the YUI... "everybody" now uses one or more of these. I'm just sayin' us Notesheads should have more things like this... some subform or script library or agent that instantly adds a specific capability to whatever application it's plopped into, demonstrates how easily a fledgling developer could come up with something similar, and is rapidly upgradeable whenever an ehancement to it becomes available.

I'm going to give this some more thought and try to come up with some ideas for specific modules that I'd like to contribute and/or would like to see someone attempt. I'm also curious to see if other folks have feedback on this.

Comments

Gravatar Image1 - While I'm still struggling to find time to read all the threads scattered around the blogosphere on this topic, I do sense a few common themes emerging. I made a recent post here: http://benpoole.com/weblog/200608030928#44663DCABBAEA366882571C50056EC95 on Ben Poole's blog that echos the concerns about a steep learning curve, and the point that the audience for whatever modular architecture gets developed will be primarily advanced developers.

OpenLog is a great example of a "module" that could become a standard for a wide range of logging behavior, and I envision a time when several OpenNTF templates will have OpenLog integration built-in, perhaps even with design element inheritence back to the Openlog template. As for other "modules", the OpenSlice architecture seems to have identified a lot of the most common ones, and I'm sure a more comprehensive list will emerge as the conversation progresses.

Gravatar Image2 - Interesting thought about the difference between modules and templates. Both are important in different situations -- templates for demos and sales, modules for maintenance and features. And both functions (sales and maintenance/internal development) are quite important.

I'd be interested to see a list of what people thought would be good modules to develop.

- Julian

p.s. -- and thanks for the OpenLog plug!

Gravatar Image3 - My only concern with delivering modules on OpenNTF is the brain bending new Notes developers have to go through to understand how it fits together. It's very different than the COM components most Microsoft developers are familiar with since it's not dependent on the OS.

It is a very interesting idea, and it's really gotten me thinking about how to make it work and ways to make it easier to implement.

Gravatar Image4 - Wow. Little did I know what I unleashed on the world when I trained you in Lotus Notes. As I recall I still have the t-shirt that says "Unleash the power of 4" although the neck is rather frayed and it has been relegated to such undignified usage as car polishing. Also the other day she found her way down to the lake to wipe some slime off my hands between bluegills and the occasional bass. Through the subsequent releases of Domino they keep getting better and improving their capabilities with the passage of time. With me it is somewhat different. I am now at the point where I can hide my own Easter eggs.

Gravatar Image5 - Sean, point taken: not everyone follows the same process; I should have specified that what I meant by "all of us" was the group of kindred souls I've encountered in our community. In contrast, I've encountered organizations that build every application as a customization of the Discussion template... it gives them a core UI to start with, as well as a very basic database structure, and they add their own features from there. Not necessarily the approach I'd recommend, but they feel that's the best process for their business.

The kind of modules I'm hoping we can accumulate are the kind that do demonstrate what Notes can do, particularly its strengths, like flexible workflow. I guess mostly I'm aiming for building blocks... the end result of my previous module focus was a "deli menu" of sorts: most requests for new applications that would come in would need approval features, revision history, calendar integration, record retention management, and various other standard functionality that we'd previously encapsulated into modular form. So I'd create a new application template from the core UI shell template (deselecting future inheritance so that the individual elements would continue to inherit from the global template), then drop in the applicable modules. In fifteen minutes 90% of the new application's functionality would be in place, so all that was left to do was code the features that would be specific to that particular application. You're right: that process, once it had become that refined, is probably more advanced than the approach used by many developers.

But I'm not convinced the individual features each module contained were terribly complex; the true value was in the packaging. End user learning curve plummeted because the overall UI was consistent across the majority of the applications. Development time plummeted because less time was spent duplicating the same functionality in disparate applications. Everybody won. But each module showcased a strength of Notes, and in such a way that was apparent to the end users. In recommending a communal module set, I'm envisioning one that focuses on features that users (and management) will actually see and feel, not just enhancements that provide behind-the-scenes value. I'd love to have access to, and contribute to, a set of building blocks that allow any developer to show off to their boss and their users how rapidly they can create a completely custom process solution by integrating these building blocks into something of their own.

That's where Notes really shines... plenty of businesses say they want to get rid of Notes, but continue to cling to it because every time they try an "off-the-shelf" solution for a given process, it fails to meet their specific business needs. Full-blown templates - even if they're free - still present the appearance of being off-the-shelf, because how they function as an entire unit is already tightly defined, even if it isn't written in stone (i.e. open source). That's the response I've received when showing various managers an entire template like !!HELP!!... they're impressed by what it can do, but just don't trust that we'd be able to customize it to fit our specific needs, much less easily create something similar in-house. Based on prior reactions to the module concept, however, I suspect that a set of UI-independent building blocks (that's where subforms can be particularly handy) would go a long way toward showing businesses - not just other developers - why Notes is the right platform for their particular needs.

Gravatar Image6 - The problem I see with this approach is that you are thinking like developers and not marketing folks. If you check out Richard Swartz' piece on his use of the original Nifty-Fifty http://smokey.rhs.com/web/blog/PowerOfTheSchwartz.nsf/d6plinks/RSCZ-6SA5F6 , you might rethink the purpose of this set of templates. I was a recipient of the original Nifty-Fifty CD and my experience mirrored Rich's. I took a look at almost all the databases on the CD just to get an idea of what could be done with Notes and maybe learn a couple of things about how to do it. I see the set of applications for Sharepoint in much the same manner. No one actually deployed any of these applications directly off the CD, but it gave developers something to look at to see what Notes could do and it gave management something to look at to see how they could use Notes. While building modules like OpenLog would be great for the more advanced developers, it does nothing to market the capabilities of what Notes is good for. The next Nifty-Fifty has to wow the suits as well as being able to help Joe Developer. In fact, if it just has a link to OpenNTF, that will be enough for Joe to really do something kewl.

And please don't downplay your methods for development as being the same thing that everyone else does. If that were so, why didn't the guy who built the original 250 applications do it that way?

Sean---

Gravatar Image7 - I think this is a more constructive idea that full templates, because there is just too much conflict involved in making a template either simple enough to understand or complex enough to be usable. A module, on the other hand, can make sense with a certain functionality without having to be a complete application. I think you are on to something.

Gravatar Image8 - I'm with Ben; whilst I obviously like the idea of templates, having seen the resulting discussion at John and Ed's sites, I'm very much in favour of making discreet chunks of code available for specific functionality within an application.

I apply similar techniques to some of my application development, so count me in!

Contact Me

Hire Me

Elsewhere

What the Quote?

"You look a little different now, but you still smell the same."

Kathy Tripcony

"I want my MTV, dammit, but you don't hear me bitching... oh wait, that was me bitching."

Steven Rodgers

"It's probably Bruce Springsteen's wicked plan to thwart iTunes."

Laura Tripcony

"If you love somebody, set them free."

Linus Torvalds

"Take that, fluff butt."

Mike Nickolai

Apparel

Lotus Rocks

I write the code that makes the young girls cry

Current Terror Alert Level

Assorted Linkage

ClustrMap