I think that is a problem induced by choosing micro's which are either too dedicated or based on an archaic architecture like PIC or the
8051. If you start with a micro which can be programmed using C code (use of assembly language strictly prohibited) which compiles on a PC- (except for the hardware layer) then porting to a different micro becomes a piece of cake. Write a new hardware layer, hit 'compile' and you have the new micro running with a minimal amount of changes. Take the PCB through a re-design and you're done. Customer happy.
- This is one of the reasons I recommend using GCC (Gnu C Compiler) for embedded projects. GCC forces you to write clean code with a minimal dependancy on the target. Most commercial embedded compilers have some language extensions / pragmas which make the C code stick to the target. The latter turns porting code from one target to another into a time consuming (expensive) process.