Apology for a Rails Maturity Model
5/16/09 UPDATE: The Rails Maturity Models website is now soft-launched and available for evaluation at http://railsmaturitymodels.com It allows Rails development firms to document their own set of practices, their "maturity model" so-to-speak. Many people have misunderstood the concept of the site and attacked it, but I don't think it is a particularly controversial endeavor. As a matter of fact, I believe strongly that the site will be a useful tool for community introspection and understanding our success.
The outcry over my idea of establishing certification of Rails development shops based on a "Rails Maturity Model" (RMM) gave me pause, to say the least. (It also gave me a bit of heartburn.) I was wrong to suggest auditing and certification, although I want to point out that I didn't write that message for a wide audience and it was purposely composed in a tongue-and-cheek and informal style. Lesson learned.
To be clear, what I'm saying is that I agree that certification is a bad idea, full-stop. Especially for individuals. I mean, it might only be a matter of time before someone tries to establish a certification program for Rails, but I promise it's not going to be me. At the moment, nobody is proposing Rails certification, so if you're one of those people that got riled up about it, just stop and chill the fuck out. Seriously.
[ As I was writing this blog post, I took a break and walked into the kitchen where Desi is finally wrapping up some of the unpacking from our recent move. Guess what was sitting on the counter? My framed Sun Certifications from 1999! Couldn't resist posting a pic of the Architect certificate, even though I expect to be mocked mercilessly for doing so. ]
On the other hand, a "maturity model" does not have to be coupled to certification and I don't think there's anything fundamentally objectionable or offensive about trying to define a maturity model for Rails. I envision it serving as a roadmap for Rails developers to adopt best practices defined by the community:
A maturity model can be described as a structured collection of elements that describe certain aspects of maturity in an organization. A maturity model may provide, for example :
- a place to start
- the benefit of a community’s prior experiences
- a common language and a shared vision
- a framework for prioritizing actions
- a way to define what improvement means for your organization
A maturity model can be used as a benchmark for comparison and as an aid to understanding - for example, for comparative assessment of different organizations where there is something in common that can be used as a basis for comparison. Wikipedia
I think an official maturity model is crucial as Rails enters the mainstream software development industry. In the words of Robert Fischer: "Once upon a time an idea like #rmm would be silly: the very fact you knew Rails implied something about the kind of dev you were."
That time has passed, but Zed is still wrong. Rails itself is not and was never a ghetto. It's more like the entire field of custom web software development in general is a ghetto. And what's happening now is that every year that passes more of the inhabitants of that ghetto switch from PHP, .NET, Java and ColdFusion to Rails as their drug of choice:
Rick Bradley: "Furthermore, In reality, where we happen to live, there seems to actually be a power law at work: the vast majority of software and teams plying our trade are so bad that they fail nearly every metric we could reasonably apply. Only the vanishing minority of products and practitioners pass even a single gameable metric. Yet we ultimately have little means of discerning for ourselves, for our clients (or for differentiating for our future clients) the difference between one or the other."
In my original RMM message to the mailing list I referred to some people as "unwashed masses". Yes, that sounds elitist. No, I don't think there's anything wrong with that. Note that if you're reading this, then I'm probably not talking about you. I'm talking about people that don't keep their code in source control, nevermind git vs. svn. I'm talking about people that don't do any automated testing, ever. I'm talking about people who write an entire big application in one controller. I'm talking about people that code big database queries into both sides of a spaceship operator. The list goes on and on; I've even done major conference talks about their horrors.
A Rails maturity model would point the way out of the ghetto for individuals and organizations who wish they were doing high-quality work, but have no idea what it means to do so.
Rick Bradley: "To be able to deploy a standard of comparison (whether distributed or centrally administered and computed) that forces products or teams to either score in the vast gutter of mediocrity, or work diligently to at least game performance on a number of axes (when such gaming is, realistically, often more difficult than just working to better oneself) to separate from the pack -- would imply a vast improvement in the current and long-standing state of affairs."
Lots of people on the original RMM thread suggested that market forces should be allowed to run their course. The problem is that there seems to be a bottomless well of amateurs ready to step up and take the place of the ones that go out of business. Where there's money to be made you will have opportunistic players ready to give it a go, and don't get me wrong -- I'm not trying to say that there's anything fundamentally wrong with being an amateur. It's just that at the very least the community should give those newcomers a more-or-less official set of guidelines for how to produce quality work:
Rick Bradley: "In my limited experience the difference is usually striking and obvious: "this is trash" vs. "wow, this is pretty good". In the Rails community the latter is really only elicited by the products of about 10-20 shops (those shops Obie was trying to catalog in one of his solicitations this evening). It would be great if we could get that number up to 50, 100, or even 1000. I'd like to believe that putting a workable set of metrics out there would eventially bias progress in that direction."
I have no idea whether Rick is correct that only 10-20 shops in the Rails community consistently produce "pretty good" work. None whatsoever. That questions is actually what prompted the RMM thread on the mailing list, because I asked members to reply with their list of the top 10 shops (consultants) in their opinion. It felt like everyone had a pretty hard time coming up with answers. In fact, I asked because the question came up among myself and a colleague, and I had a hard time coming up with a solid list myself, and arguably I'm one of the most well-connected people in the community.
I don't think there's anything inherently bad in what I'm talking about here. I don't think it'll take the fun out of Rails. I don't think it kills innovation or my credibility. I don't think it's enterprise-y. I don't think it's ridiculous or that it means Rails has really "jumped the shark" (that's happening in Las Vegas in May of this year, j/k). I do think it's about leadership and taking responsibility for maturing the community that lets us make a happy living, thereby ensuring its longetivity. I do think it's about expanding the pool of qualified and competent Rails developers out there.
Actually, I hate to end on a bad note, but I really think that there's some urgency to all this and that our collective failure to set high standards for the community is strangling the continued growth of Ruby and Rails overall.
Tom Mornini: Our customers at Engine Yard are screaming for more developer capacity, and in fact, TWO previous customers abandoned Rails (one for PHP and the other for Java) simply because they could not find enough skilled and savvy Rails developers to move their projects forward.
It's not a problem only for Tom and Engine Yard. At Hashrocket we've been helping organizations transition from legacy technologies to Rails and they all have difficulties finding qualified developers. I know that folks like Courtenay at ENTP are having the same problem. Please don't shoot the messenger. Something has to be done about this, and I think it's more important than Rails 3 or anything else we are currently excited about.
Notice I didn't actually propose the contents of the RMM this time around. I have been chastised by the community reaction to my first list, particularly for including things like pair-programming. I do have an idea for a way to have the RMM be community-generated and maintained, and I'm going to put it on my list of things to do in my copious free time. If someone wants to help me with it, let me know via email.