Creating lists programmatically can be useful in many scenarios. The scenario we run into most often are lists for waterfall projects that aren’t well thought out. Need to define 30 e-mail templates? Forgot a column? Want to easily reset content to a base state? Dealing with these scenarios by deploying list definitions/instances in a package rather than content restores can restore sanity, but does offer some drawbacks. Namely – custom security and content query web parts.