Part of the challenge of designing heterogeneous hardware is deciding what is the right mixture of processors to include in anticipating the workloads the chip might have to deal with for the next 5 years, for example. On the programmer side, the challenge is writing code that utilizes all the different components of the chip efficiently.
On the next slide, we see an example where chip architects have to hedge their bets and over-provision functionalities of the chip, so they won't make a mistake in predicting the workload for the chip, but it's at the cost of the efficiency of the heterogeneity because then most of the chip is idle because other parts are over-provisioned.
This issue in hardware seems very similar to the software issue of designing domain-specific tools. Such tools making working in those domains much easier and enable much more efficient computing, but the cost of developing the domain-specific tools can be extremely high, so there's a tradeoff even when deciding whether or not to design the system.