When Great Features Aren’t Enough: Twisted, Tornado, the Zero-Step, and Activation EnergyPosted: September 12, 2009
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.
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.