Not really. Then again to me a glass is never half empty. When I was still working for an employer I developed a networked product which got an upgrade from an LPC2103 to an LPC1768 (*). The PCB wasn't even redesigned from scratch. Just move some stuff to make room for a bigger part. UARTs, timers, SPI, I2C, GPIO, ADC work just the same. Some differences in setting up the clock, interrupts and I/O pins ofcourse. The biggest difference was going from a bit-banged ethernet MAC to a real MAC. Still both versions compiled from the same source (with some defines to differentiate between product and hardware platform) with the same compiler and the hardware got programmed using the same programmer and software.
(*) Actually the product was a hardware platform which could be used as 20 different products. It wasn't designed that way but it just turned out to be that versatile.