When developing a new product, a lot of the time is spent on writing basic routines, drivers and services. A lot of this has been done before. It isn’t rocket science writing yet another UART driver, but it takes time. Additionally, add in the time that is spent on debugging it, doing bug fixes and verification. Then it is all the stacks that are time consuming to develop and that require a lot of effort to get the verification in place, like USB. On average, a C-programmer writes ten lines of code per day and there is one defect per four lines of code. Code complexity increases very fast and then code-defects cripple quality. These are prerequisites. The end product needs these basic services in place, but they remove the focus from creating application differentiation to writing basic services.