For me, one of the main goal of fixtures in app is for : “take a vanilla ERPNext/Frappe, install it and there is no need to make other customization/settings in UI”
All changes that have to be applied when install a custom app :
Custom Fields on core DocType
for this one you can also export the customize DocType in you app in global, but when bench migrate/update, if the core DocType “update date” is more recent that your “update date” for you customized DocType, your change will be removed, that why use fixture for custom field is nice, it will always be apply on migrate/apply with core changes
property of core fields changes (label, display, read only, default print format for a doctype, etc…)
but take care, the property setters as fixtures of your app are inserted in DB when install app, remove them from the fixture of your app, on migrate/update this do not remove them from your the table Property setters, you have to remove them manually if you don’t want them anymore (or use migration process in your app to remove them).
customization made during “live” design on UI and store in DB, that need to be deployed when custom app is install on a site :
SQL query Report
Print format
Dashboard / Dashboard Card
Workspace/Menu
Add Role for Doctype
New Roles and their linked permissions with Core DocType (for custom DocType that in the custom DocType itself)
I’m sure I forget other use case, but that it, just install the app and it will apply point by point your custom app feature and been keept along with core update