Sunday, May 10, 2009

Won't Somebody Think Of The Noobren?

Some people have disagreed with, or criticized, my rant about Uncle Bob's keynote saying that there are lots of Rails developers outside my little social bubble who still don't TATFT. Meanwhile, Obie Fernandez is still pushing RMM despite continuous and consistent opposition. Uncle Bob's keynote and Obie's maturity model effort have something in common: they cost energy and time, and that expense becomes less worth it the more skilled you are.

If you're doing well with Ruby and Rails, Uncle Bob's keynote - whose message is just a recap of "Test All The Fucking Time" - is as obvious as obvious gets. If you already use unit testing or BDD or any of the varied options available to you in that space, there's really no value in watching the keynote. You've either heard it before or you figured it out for yourself. However, if you haven't figured out that a culture of unit testing is one of Ruby's most valuable assets, then of course I have to give credit to anything which wakes you up to this.

Uncle Bob is a fireman.

Obie's RMM is similar: useful for noobs, valueless for so-called "rock stars." If you're starting up a company and you want a way to model your company on companies you admire, a web site which collects practices and techniques for lots of different companies will help you do that.

However, let's take for example the place where I work. We're all prolific open source contributors, and/or frequent conference speakers, and/or creators of various and numerous interesting side projects. What would a noob learn from attempting to model us? Well, a few months ago, a noob would have learned that RSpec is awesome. More recently, a noob would have learned that RSpec has all kinds of foibles, and we use Context and Matchy instead. We frequently declare "everybody should be doing X" or "nobody should ever do X", and sometimes we're using the same value of X in either case.

What do you bet that a unanimous "everybody should use yaml" from us is only a matter of time? Trick question - that's what we were all saying a few years ago when everybody was on XML.

Last month a noob would have learned that we're in Campfire all the time, including Saturdays at 4am. This month a noob would learn that we're experimenting with "blackout days" when people are completely and deliberately inaccessible to the outside world except via telephone.

Whiteboard from Flickr founder's new startup.

Do you use remote work at your company? Is that a best practice? We're all telecommuting from disparate conferences one week. We're all co-located in a remote cabin without Internet access the next week. Oh, and we never use pair programming, except sometimes we do. Meanwhile our side projects include screenplays, professional photography, short films, iPhone apps, mini-apps, open source libraries, several different music projects, and, if I recall correctly, a now-defunct fashion design firm.

Not a pic from anything we did, just awesome.

Is it good for us that we do all this other shit? Of course it is. It keeps us creative. But does this mean your company should go out and start their own fashion label too? Where does that rank on the RMM list of best practices? How many endorsements does that have?

The moral of the story is that the story has no moral (and the key to the treasure is the treasure). There's nothing to learn here and a noob would lose their marbles trying. An RMM practices page which tracked every one of our "best practices" would include hundreds of entries, and very few of those entries would have any endorsements, and those few which did have endorsements would be practices we tried out a year ago and decided against for one reason or another. It would be ridiculous. We change our practices so often and over such a wide range that a bar graph wouldn't cut it; you'd need a particle-cloud visualization just to determine what practices we're committed to and what practices we're experimenting with. Depending on the time frame of your analysis, you might discover that we're not committed to any practice and we consider every practice experimental to some degree. Depending on your point of view, you might even think that's a good idea.

⌘N > ⌘C

Well OK. So it would be impossible for a noob to learn from us on or whatever. Couldn't they still learn by finding out which experiments worked and which failed? Wouldn't it still be useful for us to learn what our competitors are doing? Yes, of course. That's why we have blogs. (And for that matter Twitter.)

It's a very good thing so many people think RMM's a bad idea. Our community is contentious enough to begin with. Can you imagine what it'd be like if people took RMM seriously? Every downvote or upvote would set off a cascade of tweets and a blog war. RMM mistakenly assumes that what the Ruby and Rails communities need to do is spend even more time blogging, arguing, and in many cases splitting hairs over the best way to run a Web shop. This is kind of like McDonald's new McCafé idea, which is based on the theory that the world needs a Starbucks with even more sugar, as if the one thing Starbucks didn't have enough of was sugar.

Now listen. I'm not saying we shouldn't help people. I'm not trying to be all "fuck you, I'm an anteater."

Helping people is nice.

However, I already do things to help people. I blog, constantly, and in between my rants and jabbering you'll find lots of helpful tricks. I speak at conferences, and proselytize not just my own projects but also ideas and techniques that I think matter for everyone. And I think it's better that way. After all, you can lead a horse to water, but you can't make him drink.

It's very draining to battle mediocrity.

Why bother? So Rails is full of programmers who don't test and maybe even companies who don't use version control. That's their problem, not ours. We don't even use Rails any more anyway. At ENTP, we're switching to Potion. Everybody should write all their code in Potion (except nobody ever should).