A company contacted me and wanted a custom product developed. I took on the speculative work, but something kept nagging me.
Six months later and three iterations of hardware I realized what was nagging me. The company had inexperienced engineers, as such they would give me requirements and I was constantly going back to them and explaining why their requirements were incorrect. It was ending up I was having to design their product in hopes that I could sell my little part of the product. This resulted in several iterations of my product, trying to chase the never ending requirements with no sales.
An engineer is a tool for the business, where a tool is something that is used to solve a problem. An inexperienced engineer is like a cheap wrench, where when you use the cheap wrench and it breaks leaving you with a medical bill for stitches. The savings for the cheap wrench is not enough to cover the medical bills, and yet your problem you were using the wrench for is still exists.
Companies with cheap engineering have learned to accept the current state of reality as the only reality and often use words like "It is normal to have these problems during development" or "We could not have predicted this problem." Usually when these bad outcomes are normalized it is indication that you have problem.
A friend of mine ran into a similar issue where he design a printed circuit board (PCB) for a company. Whenever their inexperienced engineers ran into a problem (firmware or other wise) they blamed my friend and said it was PCB issue. They then sent hardware to him and he would debug it, usually finding a firmware bug or more often an assembly issue where they company had figured their engineers could assemble boards cheaper than an assembly house. The net result is that they spent more money debugging the bad engineering than it would cost to have a good engineer. However because they do not do accounting on the costs of bad engineering they will never know the difference.
At the end of the day the saying is true "You get what you measure for." That is if you do not measure the cost of inexperienced engineers that is what you have always gotten. The lesson I learned is if the team has inexperienced engineers the best you can do is a time and materials contract as the odds are they will never actually ship the product. Even if they do it will not be what they designed initially, and will be months if not years behind schedule.
The reality is that the problem is not the engineers but the business, as they do not have accounting methods to measure the cost of a inexperienced engineer to know they need something better.