Xml comment in elements file can break your content type. The following content type is incorrect and all fields after the comment won't be created by SharePoint.
ContentTypeRef is for referencing content type from Site content types. ContentType is for defining new content type directly in list definition.
It might be suggested to avoid mixing up “ID” and “Id” while crafting field
Avoid system list names for the custom list instances.
The issue is that SharePoint Online (Office 365) out of the blue has decided to take the spaces and underscores out of the list and variable names while sending the data back to your application. When we send a query using the list and field names, it does get the correct data from the correct list but when it brings the data back, it changes the names of the fields. For example, if I queried against "First_Name", in my "People Demographics" list, it will go and fetch the data but bring it back as "FirstName" rather than "First_Name" and it will have the list name as "PeopleDemographics" rathern than "People Demographics". This could effectively broken all your mappings for all the variables that have an underscore in their names. What is worst is that you will not know if it is a permanent change or just a hiccup.
List Templates with instances in solution should not be created by end user.
ContentTypes with Overwrite="TRUE" are deployed directly to Content Database and not subject to ghosting issues.
Fields with Overwrite=”TRUE” are deployed directly to Content Database and not subject to ghosting issues.
Declare empty Fields element when using only ContentTypeRefs. Fields automatically populated from content types.
Do not deploy Content Type with Overwrite="TRUE" and Inherits="False" or not specified.
Deploy lookup field correctly
Deploy Taxonomy field correctly
It is recommended to have unique field Name.
It is recommended to have unique field StaticName.
It is recommended to have unique list instance title.