When Great Features Aren’t Enough: Twisted, Tornado, the Zero-Step, and Activation Energy

Fresh on the heels of Tornado’s release, and Glyph’s response to it (note 1) and others, I’ve been thinking about why Tornado so excites me.

Twisted is a robust, powerful, scalable asynchronous web framework (among other things). We have used it successfully in the past. Taking them at their word, Tornado is scalable, but focused on http and much less fully featured than Twisted, it does provide authentication pieces (awesome!), and some other utilities. In architectural terms, Glyph is probably right that Tornado is incomplete (to be polite).

I still want to use Tornado.

I would much rather use “best in class” tools always, but sometimes the activation energy is just too high. In using any piece of software there is a Zero-Step (or 0-step), where I have to be convinced to try it. Tornado does an excellent job of convincing me.

Great Features Aren’t Enough

Look at the Dyson Airblade. The narrative is simple.

Hands Go In Hands Get Dry Full Win

Now the Airblade is one of those rare items that actually delivers on its promise. It ACTUALLY DRIES YOUR HANDS, unlike most hand dryers.

Capability is not enough. If I’d never seen one in action in person, I’d have been slightly unhappy about my perennially soggy hands, but life goes one, and that’s why the gods invented pants and skirts. Now I pine for an Airblade whenever I’m in some public bathroom without one. The win doesn’t come from how well it works, but from how moron-proof it is.

The Zero-Step Matters

Trivial applications should be trivial to write. Of course, asynchronous web-serving isn’t trivial at all, but it should look trivial, because the dev shouldn’t have to care how it’s implemented (until they do, but not one second before). I’m not smart enough to write a good dict implementation either, but no one makes me go through hoops to use the excellent one that comes with Python.

you can do this too. Low activation energy empowers the user. Before a user can be a power user / evangelist, they have to start as a regular user. For many people, Tornado will solve their problems well enough. The “hello,world” in Tornado is a dozen lines, and looks very similar to the one in web.py , except that it inherits from an asynchronous class base instead of object or a PYPO (a plain old Python Object). This simple “hello, world” code is the featured content on the main page of their respective sites. What is more inviting than that? It screams,. Low activation energy empowers the user. Before a user can be a power user / evangelist, they have to start as a regular user. For many people, Tornado will solve their problems well enough.

If twisted can do this (through some sane default web classes, decorators, etc. (Note 2) ), then point it out right on the front page. Perception matters, and having a prominent snippet, saying “YOU CAN WRITE IN TWISTED, and IT’S SIMPLE, here’s how”, is more important than some of the posted news, for example (Note 3). It may all be there, and build already, but it’s not obvious to me, and not everyone has the patience to dig.

By contrast, when I learned Twisted, I felt like I needed to understand it holistically. Nothing made sense, which was frustrating, then after a while, it all did, and I grokked in fullness. Until then, it was blood and gore. My goal wasn’t to understand Twisted, it was to get an asynchronous app going. That impedance mismatch affects uptake, mindshare, and adoption. That’s the 0-step, and the 0-Step matters.

Make The Easy Easy, and the Hard Possible

There is nothing new in this essay, except the weakly retouched photo of the Airblade. Good usability is hard, and that’s all we’re talking about here. Removing barriers to entry is part of it.

Don’t make me choose between simple tools for simple projects, and complex tools for complex projects if I don’t have to.

Create default modes / deployments that handle the usual cases

make “first steps” and “hello worlds” prominent on your project pages

most tools in the real world don’t require a person to fully understand the tech before using it.

aim for a ‘ramp-up’, where as one needs more functionality, one has to do more research, but not before

Twisted gets the “hard” end right. Make the easy end easy!

Continue to “make the easy easy, and the hard possible”, and this world will iterate towards the best of all possible worlds (Note 4)

——————

note1: Glyph, if you’re reading this, I really don’t mean to be a prick about this stuff, and I can understand why it might be very sensitive, given the amount of work you’ve put into Twisted. So please understand this as coming from a place of wanting Twisted to be more awesome. I want to use Twisted, even in small projects. I’ll like it to be core of whatever framework I use. Make it easy for me to do so! Make it shiny. Make it zero-barrier-to-entry.

note2: SQLAlchemy is similarly complex (from a “scope of task”) standpoint to Twisted. Maybe something like Declarative for Twisted would be a goodness. I think I want an asynchronous-http mix-in basically :).

note3: More egregious example: the Clojure site, which seems to be much more focused on explaining how Clojure relates to other LISPs and Java than actually attracting outsiders. I had a long discussion on SO about Clojure’s presentation layer with one of its evangelists (Rayne). I’m not sure who comes off worse. He accuses me of needing to be spoonfed. I prefer to think that laziness is a virtue. And who doesn’t want to be spoonfed!

note4: FWIW, Dustin Sallings’ ‘Snake Tornado’ looks like a great start/compromise, and exactly the kind of project I like to see.