This is a half baked idea and kind of a rant. The idea is very simple and has to do with my personal position position about how to choose technologies.
When building a software systems, first do things as natively as possible for your context.
As a software developer I would like to construct systems that are easy to get started with, understand, maintain and still can be delivered on time. As you may know that it is impossibly hard to do so many things well in any domain.
In my brief career I have seen many examples of technology stacks and systems which try to achieve the previously stated goals by abstracting away complexities of underlying layers but also creating some of their own. If you are a Java server side developer you probably have worked with likes of Hibernate etc (which helps you create database queries). This usually results in poor results and has been discussed in community (to quote "the resulting cakes from cake mixes generally taste worse than proper cakes...and they don't even save you any time"). And the more you use such things the more you start justifying these frameworks/technologies.
Edit: Revised the post on 2016-08-14.