En pocas palabras, utiliza las herramientas y los talentos disponibles para realizar el trabajo, en el tiempo requerido y dentro del presupuesto. Al final, eso es todo lo que importa.
Si bien algunas tareas se prestan naturalmente a un hardware o una solución de software, hay muchas tareas que no importan. Por ejemplo, podría usar un temporizador 555 para hacer parpadear un LED, o podría usar una MCU de US $ 0,30. Hay ventajas y desventajas para cualquiera de los dos, pero al final no importa, siempre y cuando termines el trabajo. He visto LED parpadeantes con cualquiera de los dos enfoques en productos comerciales.
No puedo darle una lista de cosas que se deben hacer en el software, o una lista para el hardware. Esa lista sería larga, aburrida y en su mayoría sin sentido. La tecnología progresa. Hace 20 años nunca hubiera pensado en usar una MCU solo para parpadear un LED. Las tareas que son apropiadas para hardware / software siempre están cambiando. Si te diera una lista ahora, mañana estaría desactualizada.
Para empeorar las cosas, la línea entre el hardware y el software es borrosa. Los FPGA vienen a la mente, los cuales están programados de manera similar a los programas de escritura, pero el resultado final es el hardware. E incluso los FPGA con frecuencia tienen una lógica dentro de ellos que se parece a algún tipo de CPU. Pero incluso las GPU y algunas CPU tienen características similares a FPGA que pueden o no permanecer ocultas para el programador de software.
El conocimiento y la experiencia deberán guiarlo para saber qué es apropiado para el hardware y el software. Su primer paso es conocer el problema que está tratando de resolver y cómo resolverlo. El segundo paso es conocer diferentes maneras de resolverlo: CPU, FPGA, circuitos analógicos, etc. En muchos casos, necesitarás conocer varias CPU diferentes o varias FPGA diferentes para descubrir cuál es el mejor enfoque.
No hay sustituto para conocer tu oficio.