Joel points out somethng that you discover time and time again when write or use software libraries, The Law of Leaky Abstractions. Basic concept is that programers build abstractions to build more complex software. However all non trivial abstractions are leaky. It is probably the primary reason the software has security issues, and it also starts to define an upper bound in the quality complexity product of software.