Less
I like it when people talk about less code. Code slower, all of that. Here's my attempt to talk about less.
Less Layers
This is one aspect people find appealing about pure Couch apps. Less layers makes deployment easier. Less layers means less impedance mismatch between layers. This makes applications different.
But which layer do we drop? Model, View, Controller, Client, Server?
Unlearning
The hardest things about switching to a document store is learning to think in documents. Documents are self-contained so reconstructing their meaning for users is a simpler task, mostly consisting of presentation. However, CouchDB enforces some constraints of it's own, but they are largely a consequence of it's distributed programming model, so we learn to live with them.
Model
Validating user input is crucial for security, as well as useful for providing guarantees to your application's views etc. Most frameworks have you doing this sort of thing in an application server, which is scaled and distributed differently from your database. Without an application server, where do the models live?
In CouchDB models feel functional, not object oriented. This can be a mind fuck but after about six months you get used to it. For instance, CouchDB's validation functions can access only one document at a time, and have no side effects other than blocking invalid database updates.
Imagine if your Rails controller had read-only access to your database, and could make only one select query per request (determined by the URL), and was required to return true or fail with a message. It's that weird. Did I mention validation functions are run during CouchDB replication, not just during user access?
But it makes sense, when you understand the physics of distributed computing. Of course you run validations at replication, because replication is accomplished via the same HTTP channels as normal client access. It's not hard to "replicate" into CouchDB from JavaScript running in a browser.
View
Do I have to tell you that CouchDB can transform JSON documents and Map Reduce rows into formatted output, for instance as XML feeds or HTML pages? This blog's Atom feed is generated on CouchDB's server side using a _list function stored in Sofa's design document.
Client / Server
When CouchDB is running on localhost, this distinction becomes less important in certain ways. In other ways, the constraints of HTTP (definitely a networking protocol) make local applications easier to deploy and manage. When a web application is local, what makes it a web application?
Controller
I think the controller is largely moved to the client, in my experience it's wrapped up in event hooks attached to HTML elements. Good riddance, that bit of my Rails app was always a pain anyway. Keep refactoring the controller layer, eventually it's gone. ;)
There are other application models besides MVC, I'm not going into them right away, but I'm taking requests.
Karaoke
I could go on all night, but @amysue's playing Jump really loud on the Piano, which means it's time for out-the-door to Chopsticks III. Little known fact, my karaoke name is Grandpa Chris. Protip: if you've ever heard it before, you can sing Wooly Bully, but you have to #leanintoit.