What’s needed in Rails – maturity, or excellence?
October 24th, 2009
About 6 months ago, Obie Fernandez proposed a “Rails Maturity Model.” Reactions mostly ranged from lukewarm to downright hostile. I didn’t give it much thought at the time it was introduced, but the discussion panel on RMM at Aloha on Rails piqued my interest. I kept wondering to myself, “What problem are we trying to solve?” I want to briefly talk about some potential answers to that question.
Certification
It seems to me like when people first heard about RMM, the first thing that jumped into their mind was certification. That’s too bad, because that’s not what Obie intended at all. The first beef many people have with certification is that it can be gamed. Having a specific certification doesn’t necessarily mean you’re a good software developer, and naturally there are many talented developers that don’t have the right certifications for whatever niche they’re in. It’s completely true, but I don’t see the relevance in the context of RMM. Chosing to hire someone or not based on a certification is pretty stupid no matter how you slice it.
Another argument that I’ve heard against certification is that it could make life harder for a bunch of programmers who have been using Ruby/Rails effectively long before certifications came on to the scene. Now what if they’re unable to find work because potential employers won’t even look at applications that lack the hot Ruby certs? Ignoring for a moment the fact that you don’t want to work at a place like that to begin with, I think the Ruby community is immune to that scenario. Openness pervades our culture and you can’t put that genie back in the bottle.
Educating Potential Clients
According to people more in the know than me, there’s a lot of software written that is so crappy that the development firms should be considered criminal. I can understand that elite firms might consider it a moral obligation to reach out to customers, if only to save the hapless clients from a tragic and expensive project that’s doomed from day 1. Does this moral obligation extend to the community as a whole? I don’t think so. Teams and individual developers might feel the same obligation, but that’s a deliberate choice. Hashrocket is special because they’ve adopted a certain set of values. The Hashrocket Way doesn’t scale to the whole community though, because not everyone shares those exact values.
As noble as it is to direct customers to the firms that can do the job at least adequately, I think this is a business responsibility rather than a community one. It’s a responsibility shared between client and provider — caveat emptor; and software shops need to market themselves in a way that distinguishes them from the unwashed masses. While the responsibility for this falls squarely on the business side, the community can help the state of affairs by serving as a trust network. If someone falls in love with Hashrocket but has a heart attack at the price tag, HR can refer them to someone who may be more suitable. Customers shopping around can also research the top firms and see what they have in common with each other. They can then use the information learned to analyze alternate firms that might perform better on other criteria: cost, location, familiarity with other technologies.
Interestingly, this line of thinking can lead to the idea of certification boards a la the medical and legal professions. I’ve considered this possibility as a way to achieve accountability in the industry, but I think it would do way more harm than good. In sectors where personal safety is an absolute necessity, there are already regulations in place, with audits ensuring that standards are met. Is our situation so dire that we’re willing to create a legal burden on small-time developers who write blog systems and bulletin boards for mom and pop shops? The competent shops, who supposedly benefit from being part of a high-quality industry, will also face the threat of malpractice suits. That alone is enough to make legal certification a terrible idea. It’s not that we want to skirt responsibility. It’s just that we get more value from asking the question, “Is there some other way to improve the software industry than a policy of ‘take this test, and get sued if you fuck up’?” Finally, throw in the fact that in recent months we’ve learned of corruption in financial and voting systems, and I think it becomes increasingly important that we as technologists pay close examination to what the government does, not the other way around.
Excellence
There are two facets to excellence, achieving it and redefining it. Newcomers to Rails face a daunting task. They typically have to deal with a funky new language, different environment, and all those friggin Mac people. Not only that but there seems to be a whole different culture going on. People debate testing frameworks, version control systems, and what the hell is this NoSQL thing?! The initial step for RMM should be to codify the important choices developers can make — the decision to use automated testing, to use version control, or stick to widespread infrastructure options. This communicates the principles and practices that we feel are supportive of effective software development, and provides a starting point for people who want to become effective.
A separate but related issue is advancing the state of the art. We can focus our efforts on improving in areas that give us a lot of bang for our buck. The question is not whether RSpec is better than Test::Unit, but rather if Test::Unit is better off for RSpec existing. Since Shoulda came on the scene, the answer is obvious. RSpec is better off for Shoulda existing as well, and vice versa. The developers who use these tools, by extension, are better off due to the vibrant ecosystem.
How do we achieve excellence?
While watching the panel, I put my hand up several times to ask a question, but took it down each time because I couldn’t figure out just how to formulate it. If RMM isn’t about screening out bad developers or educating customers, but rather about defining excellence in the Rails world, then why do we need it? Sitting there surrounded by talented, creative software minds, the path to excellence seemed obvious to me — go to a conference and spend a lot of time talking to a bunch of wicked smart people. It doesn’t matter if you’re just getting started and don’t know where to go, or if you’re a seasoned pro looking to push the boundaries of your practices. What’s needed is not some formal codification of popular practices, but simply a way to keep the high-level conversations going all the time, not just in between sessions at conferences.
I’m not sure how to do this. Personally I would love to have a small mailing list made up of the 10 to 20 people I cling to at conferences who really know what’s going on. I learn so much and come away with so many ideas after a conference, I want to have that feeling all the time. Sites like stackoverflow let you ask questions and get feedback from the community. Maybe an RMM-style site could be effective. I think the important thing is to gather the top thinkers in our community and create an extended dialogue, and make it open to the community as a whole so we can continue to get fresh ideas and cultivate up-and-coming thinkers. What’s the best way to do that?
October 25th, 2009 at 9:33 am
[...] What’s Needed in Rails – Maturity, or Excellence?, interesting thoughts on the “Rails Maturity Model” Tags: programming, rails Comment (RSS) | Trackback [...]
October 25th, 2009 at 3:19 pm
Thanks for the post, Pat. I feel that there are low hanging fruit that can be considered part of a mature practice. Techniques such as continual testing, version control, and the adoption of some sort of issue tracking system. These things may be obvious to us, but believe it or not, there are a lot of developers that don’t even do those three things.
One of the things that bugged me with RMM was the specification of the version control system (eg git). Technologies come in and out of fashion all the time. It’s not important to ensure everyone uses the same tech. However, it is important to promote the ideas of version control.
I’d like to see RMM morph to a collection of techniques that should be promoted as applicable to everyone and under all conditions… for software being delivered to a paying customer.
This is where Lark’s panel was going… when do put aside Agile practices? The answer, in my mind, is whenever we are not writing software for a paying customer. If a paying customer is involved, we, as professionals, need to become a lot more mature.
Thanks for continuing the conversation.
October 25th, 2009 at 8:19 pm
One of the problems that caused a bad initial reaction about RMM is the name. It’s completely understandable that people thought it was about certification. Bad, bad name choice.
I still think it needs to change ’cause it carries a lot of negative cultural baggage.
October 26th, 2009 at 9:05 am
Great post Pat. I think the fundamental idea as you say is how do we increase excellence. It is true that there is a lot of crappy code out there. I am sure that when I started doing Rails my code wasn’t the best. Today though there is a lot more information out there so developers should be able to start at a much higher level. As Seth pointed out, things such as version control and TDD (or continual testing) should be standard practice. In my computer science classes, while we weren’t taught TDD, we were taught to write tests for our code.
The problem that I had when RMM came out, beside the fact that I was suspect of Hashrocket working to help the community rather than promote themselves, is that it specified technologies. While we choose git I don’t care what you use as long as you version your code. We use RSpec and Cucumber, but I don’t care what you use as long as you test your code.
I agree with you Pat in that talking with more and more of the feet on the ground people in the community has helped us to shape how it is we develop, as well as challenge our approach. Learning from people like Corey Haines of a great way of doing TDD is fantastic for finding better ways.
There will forever be flame wars over what testing framework is best or what IDE is best. Ultimately it’s all a bunch of crap as it’s situational. What you think is best is what you know best. I believe though that as a community we have already determined that using version control, TDD, and other practices is just how things should be done. No need to formalize these in any model, just keep the conversation going and continuously challenge how we do things.
December 5th, 2009 at 5:41 pm
[...] while back I asked if we need a maturity model or excellence in Rails. There is a lot to be done in this area I’m sure but the first step for me is opening up a [...]