I have spent the last year traveling the world and authoring numerous posts/solutions to evangelize SharePoint development using apps for SharePoint. Apps for SharePoint are incredibly powerful, but many SharePoint developers still gravitate to farm solutions based on familiarity and misconceptions on the "limitations" of the app model. I'm confident that almost ANY SharePoint solution can be delivered in the app model with good understanding and a little creativity. To support my case, I decided to assemble a comprehensive list of common SharePoint customizations, evaluate their support in the new app model, and provide alternate solutions where feasible. Although it is clear that gaps exist between apps and farm solutions, alternatives are available in my cases. Feel free to send me a note if you feel I'm missing something from this list.
Apps for SharePoint are designed to leverage the app web for all SharePoint things it needs. The app web is a hidden sub-site under the host web that provides isolation for the app. This is why ALL the declarative elements of an app are deployed to the app web and not host web (ex: modules, columns, content types, etc). Apps are architected this way so they leave no trace of themselves on the host web when they are uninstalled. The list above mentions the use of the app installed event to deploy elements to the host web. This is NOT an appropriate practice for general app development, especially apps that are designed for the Office Store. The approach is more appropriate for internal development, including customers moving to SharePoint Online or with extensive farm solutions.
I have two creative tips that have helped me close the gap between apps and farm solutions:
Beyond the list above, it is important to recognize the numerous benefits of the new app model. Apps for SharePoint do not run server code on the SharePoint farm, making them much safer to run (including in SharePoint Online) and don't impact upgrades/service packs. They are cloud-ready and cater to the numerous HTML/JS developers in the world, opening the door to numerous solution possibilities and cost efficient developer resources. One of the biggest advantages I've realized is in my development environment. In the past, I've carried a huge laptop with multiple cores and 32GB or memory. This was required because SharePoint assemblies weren't remoteable, requiring a full SharePoint server to be an effective developer. Today, I can use almost anything with a browser and a developer site collection (add Visual Studio for cloud-hosted apps). The picture below is my new SharePoint development machine and my old development machine...ahhh life is good!