Some tips that I have observed in my projects to design update friendly installers
1.An update packaged as a full installation should behave correctly as a first-time installation if no earlier version exists on the target system. We also need to understand whether both versions can coexist on the target machine. For example, under installation folder, you can create a folder with version name and place the right version files under the right folder.
2. Should there be more than one version of the product advertised in the Add or Remove Programs panel? Ask this question and plan accordingly
3.Partition your product into discrete sets of features. You can also divide the features to sub features. we have conditions that only if the parent feature is installed, the sub features will be installed.The more features your project has, the more flexibility you have in reinstallation behavior. Features can be in their own merge modules which provides a lot of independence at feature level and the decision to install can be left to the user installing the product.
4. Do not forget to change the MSI product version for each new release. This is very important as this is what would help to distinguish the version installed leading debug and diagnose issues effectively.
5. Please make sure that upgrade does not remove the user specific data and can remove or modify the application specific data. For example do not delete files from UserAppDataPath folder of the product as this may consist of user’s personal files.
6. a major upgrade is required if the file name of the MSI database has changed OR a component has been removed from an existing feature, OR if a component code of an existing component has changed, OR if an existing feature has been moved to become a sub feature of another feature, OR if a sub feature has been removed from an existing feature,