I think about the current state of web development experiences as a continuum. On one end we have traditional Rails-era web apps - full page loads, with bits of dynamism haphazardly mixed in. On the other are rich client-side JavaScript apps with their own structure and life cycles, standing alone and/or talking to an HTTP API.
Rails-era web apps have some great tooling and deliver a pretty nice development experience. The shift toward rich client-side web experiences has lead to some great tooling that makes for a 1st-class web development experience.
A no man’s land
Between these two approaches lies a no man’s land. The tooling and techniques are focused largely on either end of the continuum despite the large population of apps living in the middle.
For too long we’ve resorted to sprinkling JavaScript onto our Rails-era web apps in an attempt to inch toward the rich and dynamic experiences we see at the other end of the spectrum. However, not every application needs a full rich-client experience. Often a Rails-era web app is mostly enough, except we require some dynamism in portions of the application. But sprinkling on more JavaScript only leads to larger tangles of costly and inflexible code. What we really desire is that rich-client 1st-class web development experience paired with our 1st-class Rails-era web app development experience.
For example
Rails is a tool I use regularly, and it’s often the first tool I reach for when building those Rails-era web apps. My friends at Test Double have made great contributions to creating a great web development experience for fat-client JavaScript applications with Lineman, especially when paired with frameworks like AngularJS or Ember. What I long for, and believe is both needed and achievable, is a happy union of these two approaches with tooling that supports them working together.
Sadly I don’t have an answer for you. At least not today. But I know that folks are working to enrich the middle ground, to reduce the frustration and friction felt when using tools like Rails while also striving to build sensible and coherent fat-client JavaScript apps with tools like AngularJS and Lineman.
If you’re working to improve the middle ground, or you find yourself living there, please share your thoughts, experiences, and advice so that we all might learn and improve, together.