Which components to contribute?
This is really a software design question: it isn't that Tapestry related, but still may deserve some attention. During application design, it's obvious some components are application specific and others are more general. For instance, a rich-text edit box is a very generic component, but a component someone uses to display a header on each page of his brand new shiny web site is probably not the best candidate for generalisation.
One more thing deserves special notice here. While we all do our best to separate concerns (one of the means beeing components), components have a tendency to become more context sensitive than originaly intended. Simply thinking ahead and planning the application with modularisation in mind is the first and most important step to designing fairly independent components, reusable in as many situations as is reasonable.
As tapestry applications are just structures built out of components, three types of components might differentiate themselves by the end of the project (if such a date exists, anyway):
- "singleton" components
- project-level reusable components
- shamelessly reusable components
The borders between the groups aren't clear, but experiance seems to suggest these cathegories. We've already mentioned examples of components which are project-level reusable (a site header) and shamelessly reusable (rich-text editor, any built in tapestry component etc.). An example of a singleton component is a single web page: typicaly, it's used in one place, and one place alone (although there probably are some exceptions to the rule).