Start here. This is the direct spoken answer to practice first.
Why this question matters
I prefer immutability for values and snapshots whose meaning should not change after creation. For identity-bearing entities with a lifecycle, controlled methods can express valid mutation more naturally than replacing the entire object.
I prefer immutability for value-like data and snapshots, and controlled mutation for identity-bearing objects with a real lifecycle. Money, date ranges, identifiers, and configuration snapshots can be shared without observing partial change. An Order may change status over time, but callers should use Confirm or Cancel rather than set arbitrary properties. Immutability reduces aliasing and concurrency surprises, while controlled mutation keeps business transitions explicit.