I have just been to an ECM best practice session at TechReady and it is nice to know that I have followed the best practice. Although most people think about using content types for document libraries, they work just as well for lists.
On this site I have a resource list. There are many types of resources I wanted to track but each type had slightly different metadata requirements although they all had some metadata in common.
I created a base Resource content type that had all the columns that were in common. Some of these fields would also be mandatory.

Then I created each of the resource content types that inherited the base Resource content type, adding the extra fields required.

It can be very hard to get the split between what should be a content type and what should just be a metadata column. For example, I had created a content type for Web Casts but then I also found there were several other types of training material that I wanted to classify. I ended up going with only a Training content type which contained a column for the Course Type which has the values HOL, Web Cast, Instructor led, event recording, etc.
When it came to creating the columns for the content types, you have the option of creating the columns in the site catalogue or just in the list. I use a lookup list called Technology in my base Resource content type but I also use this lookup in a web part page document library so it made sense to make this a custom site column (even though it is just a lookup list) so that I have consistent values selected for this field. This approach can also be leveraged by search and the content query web part if you have a MOSS server and want to roll up content from sub sites. Other columns would only ever be used in the resources list so that is where I created them and then added them to the appropriate content types assigned to the list.
Naming conventions are also important so that things don't get confusing. As you can see, I didn't do such a good job in this example.