Its an old battle between ITpro and developer. ITpros hate them due to upgrade issues, devs like the freedom it gives them without having to do house cleaning with feature stapling.
What is your preference, and when do you use what?
When you stick with OOTB SDT how do you add your customizations?
Personally i tend to only use custom SDT when doing WCM (to get ID), or in rare cases when an intranet sub site collection needs to be cleaned up for excessive artifacts.
Lately when i customie OOTB STD i prefer custom provisioning providers (on both root site and sub sites) in combination with feature receivers for maximum flexibility. On my latest project we even did a general CPP that could be configured using XML where you could set up default pages, what sub site templates and page layouts should be visible, instantiate lists and list items programmatically, what web parts to provision, different configurations like audit enabling, navigation configuration, role definitions etc.
Let me know your favourite way of doing this, and why you prefer doing it like that.
[Marked community wiki]