The new project we've been working on is a front-end to hide the ugliness of Tivoli and help with a rollout of new desktops throughout an organisation. Tivoli really does seem to be an unintuitive beast. Flexible, yes, if you enjoy arcane commandline scripts to do what (to me) seem like fairly trivial functions. Did I mention expensive....? Anyway, their new Tornado web application will hide all of this joy and allow even the most technically challenged deploy and remove software from remote machines with a couple of mouse clicks.
There will be a few user groups using the system and in order to keep the coding simple (and cheaper for the client) we have split the code into 3 .pma applications - one for each user group. Each user group doesn't have much overlap in functionality, but the look and feel is the same and we have built a shared java library of commonly used routines that all the applications use. Hmmmm, now how do we keep the designs in synch so that all apps get the correct and most up to date shared components. Enter Tornado's built-in design inheritance.
Design inheritance is something Domino developers have taken for granted for years and most other development platforms ignore. It is quite simple and incredibly powerful. You mark one .pma application as a template by giving it a template name eg "myTemplate" then in the actual application you say that it inherits its design from "myTemplate". That's it. There is a scheduled action inside the/system/webdesign.pma application that runs every morning at 4am and makes sure that everything in actual application matches the template (except for some application properties and database connection settings). All automagically. Just like Domino we also go to the next level. You can nominate individual design elements (for example a page) to inherit from a template. This is how we have implemented things in our current project.
The current project has one application which is marked as a template called "APP_Core". The common design elements inside each of the actual application have their inheritance property set to inherit from "APP_Core". Too simple. If we need to update things during development we just issue the console command "tell agenda run /system/webdesign.pma/RefreshDesign" and the scheduled task manager (AGENDA) will force the design refresh to run. Almost immediately all applications are synchronized to the template.
Domino has the ability to flag individual design elements so that they are NEVER touched by the design update process. Working with Domino for a number of years I have seen this cause absolute catastrophies or confusion. For this reason I have purposely not included this "feature" in Tornado.
For all the Domino guys reading, I'm sure you're saying "yeah? and?" Domino has done that for years. For everyone else, I hope that was a nice introduction to the power of templating.