Have you ever heard someone saying there were two types of programmers: those developping libraries and those developping applications. I don’t thing things can be sparated that easily. I just can’t see the difference between writing an application to access a database and a library that handles the requests and write files or anything. In the end, your code will be made out of classes and methods, loops and conditions and a bunch of variables. What’s the difference?
The only real difference is that a library is meant to be re-used and will generally work at a lower level: closer to the system and architecture. System programming has complexities and particularities, it does require special knowledge of the context. So does buisness logic programming where the developper has to be aware of the structure of the organisation and work processes. Even interface design is not simple. Most applications have worthless interfaces that barely suit anyone’s need because it was created by a programmer, but a real good interface is made for the user.
In the end, all the different layers do is abstract the complexities of the underlying architectures to reach a fully usable application. In facts, much more layers can be required depending on the size of the application and no bold line can indicate the division between library and application. The different layers simply bring the technicalities of the system to the reach of the user. A well structured project would not have less programming quality in the upper layers and the documentation would be adequate at all levels. The fact that a library should have a better design or documentation simply makes no sense.