When speaking about how to develop software, one is usually making the difference between drivers, OS and rest of the application software.
It is always about different strategy in developing the software. The lower software layer have to be generic, scalable and easy to use, if possible. The developer is applying some paradigm, even defined by the OS itself and has to optimize the usage of the hardware. The primary customer of his application is the colleague next to him who will develop further the application
The application has slightly different constraints. It has to meet the expectations of the customer, as well as to implement non-functional requirements. Now, the customer is identified and the generic cases are not in the focus. One can argue that re-use of software is a trend now. A trend yes, but a primary focus very seldom.
Then, it is the pressure of delivery date. The generic development has some buffers in the timescale. The application has to meet the delivery date to customer. This is not easy to negotiate and it is part of the product to be delivered. The generic software is part of a strategy. We start early, it is nothing yet defined and there is no recipe how to do it.
This fight with uncertainty combined with the scarcity of information in what regards the new technology is giving the developers of basic software this aura of pioneers or medieval knights who are pushing the limits. The others, as harsh it might seem, are actually the bourgeois who are the core of society and they are keeping where there are the existing limits.