I've been putting a few development standards together recently to drive the way things are done in a SharePoint development environment. One of the discussions that introduced discussion was Site Templates.
Site Templates can be created from the Web User Interface or SharePoint Designer. A Site Template is a .stp file, that renamed to .cab file contains various elements that make up a Site Instance that the template is generated by.
For simple sites that have a few lists with various columns and a few pages with various web parts on it it is great. But the stp is a black box file that is not easily made sense of when it is extracted. It also will not contain certain things that if moved to a completely new SharePoint farm would mean it would work. examples of this are event receivers defined in a dll stored in the GAC, Content Types, Master Pages, Web Part definitions etc.
What I'm trying to get at is these things I've listed are deployed via Solutions as best practice and manually by bad practice. All of the things a site template can do can be done by a Solution Feature. For this reason I have stated that Site Templates are bad practice. Solution Features may be new to a development team, but once this technique is understood it's just as easy as Site templates and exposes some key extras:
1. Feature Event Receivers - ability to do anything in C# code and SharePoint API.
2. Ability to source control individual files rather than black box stp
3. Ability to have Feature dependencies on other Features
4. Features are commonly used in SharePoint development and is the advanced method of extending the platform. Site Templates paradigm does not extend it, it simply implements it.
5. Feature Versioning
6. The ability to hide Features from the UI so can only be activated by stsadm on server.
7. The ability to encapsulate in a Solution Feature all elements of an extension to the platform: dlls, site collection elements (web parts, master pages, page layouts, style sheets, images, etc.), hive files (custom controls, images, resource files).