I think I understand why you are setting all lists for Production Data at creation (so no hardcoding or select statements can be used), but this can be very dangerous especially in a Deployed model. If you remove the the production data boolean (making it a regular list) and then sync to production, then all data in the production environment tied to that list will be deleted. The reason for this is during the sync, the list in Production will be wiped cleaned (deleted) and the members in Dev will be inserted. Even if the the members with the exact same codes are used in Dev as well as in Production, the system doesn't understand that and simply wipes the list out.
So, instead of making every list a Production Data list, it is best to understand what the list will be used for (does it need to be updated in a Production environment) or is a static list (Active vs. InActive)?. If the list will be updated via actions or user involvement, then it will need to be a Production Data list. If it is static, it should be a regular list.