Site Definitions and Templates
Kris got his article published on the .NET Developers Journal and Patrick comments on the use of custom site definitons. I agree with Patricks pros and cons of using Site Definitions and I'd like to elaborate a bit aswell.
I've done several template based Sharepoint projects and usually I don't create site definitions. The primary driver for avoiding it is development time and upgradeability. I generally use the very simple "Save site as Template", or ".stp" approach. This enables me to create the templates really fast in Frontpage, and deployment is done with spsadm in seconds. Technical customers even learn to do it themselves.
There is a drawback to this approach however. When we do comprehensive customizations to the ghosted STS template, the entire changeset is instantiated for each site, making each site consume a lot of space on the SQL Server. So far we have been doing quite massive site generation using this technique without sacrificing much more than diskspace, but there is a x-factor here I'm not entirely comfortable with, compared to ghosted scenarios.
Additionally you have the Sharepoint Portal Server templates where you don't have the option of saving an area as a template. Here I generally recommend to do customizations manually for each area, but in some cases you might want to create an area template to save time. Just make sure you're really going to save time. Usually you can customize a lot of areas in frontpage in the time it takes to develop and test a area definition.