Tad pointed me to a post by “SharePoint Joel” aka Joel Oleson in which he rants about the evils of highly customized Site Definitions:
Joel even goes as far as saying that Site Templates (stp files) are a better option than customized Site Definitions. His point is basically, if you need a custom site, use the basic OOTB Site Template and then use Feature Stapling to achieve the necessary customization.
Andrew Connell says pretty much the same thing in his post from February:
He is less generally, broad strokes dismissive of Site Definitions – his point is:
“We just need [custom Site Definitions] at times. In those times I go with the minimalist approach... [...] I take a copy of the blank site and strip it way down... no TeamCollab Feature, no WSS branding image... nothing... a truly blank site. I then give it a new name and ID. ...then create associated stapling Features that are used to attach [custom functionality] to the site def.”
Tad and I are both generally in agreement with Andrew’s approach, but a bit wary of the extent to which Joel wants to take things. There is a benefit to having an identifier for our custom site template/definition, and a single instantiation point for an end user – but the bulk of customizations should be done through Features/in code.
[As an aside, I am in favor of doing the very same thing for Lists – use a bare bones schema file (without the 1200 lines of View CAML), then use API code to customize the list as needed.]