"When I was growing up I spent a lot of time with my father doing woodworking. One lesson you pick up pretty quick when woodworking is that you have to keep the work clean at each step... When you create a new layer on top of existing layers you are often digging your project into trouble, both now and downstream. In addition to problems with each layer creating a leaky abstraction, deploying and supporting these highly layered systems is extraordinarily challenging. It becomes prohibitively expensive to make changes in lower layers because of the high chance of unexpected side effects showing up as defects in dependent applications. More often than not, each layer has to be held static with any changes accommodated by creating new queries or items at each layer to be served in parallel with the older methods. Before you go ahead, be sure you look at the total lifecycle cost of that decision, including support and maintenance. "