If I may continue to this regarding the development environment. As there are no development board for every type of MCU, how is the code to be ported to different MCU model? For example, you'll use STM32L476RET6 in final product, but closest development board is 511-NUCLEO-L476RG which has STM32L476RG mcu.
Just build your own board using the final chip. I almost never use the "development boards", they are simply too far from the final application and you would spend a lot of time breadboarding hardware around the devboard. While the
results of these breadboarding tests are useful, the
work itself goes to waste.
The reason is simple: you will have some custom electronics that need development and testing anyway. By doing very first revision of the final board, you can develop HW/SW in parallel. Even the quickly designed "prototype zero" board will reveal hardware problems, ideas, etc., which is extremely helpful when designing the next revision, which could be very close to the final product. "Prototype zero" can also be shown to management, customers, etc.; it's the first step in right direction, but changes are still easy to make.
For example:
1) board revision 0, design in a few days, ignore time-consuming parts and don't try to optimize to perfect design; order boards from China ASAP
2) during wait time, finish BOM details (like resistor values), order components, start writing software
3) components arrive. Keep writing software
4) boards/stencils arrive. Now you have components, board and some initial version of your firmware. Hand-assemble and start real development work.