Why not use unmanaged packages to migrate metadata to production?

Having unmanaged package installation approach in production you can't

  • Uninstall the package if it is being referenced by component which is not part of that package
  • You can not upgrade unmanaged packages. You will have to uninstall the previous one.
  • You cannot overwrite a component which has same API name in production but not part of the package and package also contains the component with same API name.
  • In production you don't have enough development controls to resolve the dependencies issues. If package start causing issues you will stuck due to lack of controls.

With changesets above issues don't occurs. Also you can build a single unit of changeset and upgrade it by cloning and adding components.

Packages are good for distribution purpose.