I was going to continue to be my usual lurker self but I just couldn't resist responding to this. First I want to say I am a fan of Rails and Ruby in general. I am currently developing a decent size project in Rails and have contributed several patches to the Rails framework itself so I am by no means a visiting troll.
Curt Hibbs wrote:
I got a lot of flack for what I wrote in my ONLamp.com article on Rails when
I said you could get a 10x productivity increase using Rails vs. a typical
Java framework. The funny thing is that I thought I was being conservative!
I think the problem with this statement is that it is so undefined. Under what circumstances are we talking about here? Every development environment is different with so many factors that will determine the speed of development that *nobody* in their right mind would claim a general X-times increase in productivity.
It is probably best explained in Brooks' essay "No Silver Bullet". If you want to really know why any improvement in general will not produce an order of magnitude increase in productivity (which is what you are claiming by 10x) then read that article (or the whole Mythical Man Month book). For those who read Cliff's Notes, the basic concept is can be summed up in this passage from the essay:
"I believe the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation."
Basically we can't get a order of magnitude increase in development time because a majority of development time is spent in specification, design and testing *not* implementation. Even using agile languages, being a good programmatic programmer and using RAD and XP programming methodogies I believe this to still be true. These methods only help remove what Brooks calls "Accidental Difficulties" but the fundamental complexities of understanding, designing, implementing, testing and verifying your system remain. The accidental difficulties removed are not going to provide an order of magnitude increase and neither is a boost in implementation.
Only in certain limited cases do I think your statement might be true. The two main cases I can think of off the top of my head are:
* When the scope of the project is small. In small projects the implementation time tends to increase in percentage compared to the time spent on other aspects of software development (understanding, design, etc.). This is because the complexity is not as high.
A good example of this I think is TaDa List. Don't get me wrong. I think TaDa List is a great little project. It is useful, easy to use, pretty, and fun. But fundamentally it is a simple todo list. It allows you to share a list, it uses XMLHttpRequest to reduce response time and update instantly, but honestly we aren't talking about rocket science here (or even a "standard" enterprise app like a CRM, Accounting Software or any other complex data driven application). I am not trying to rag on TaDa list in any way. I think it is a great app. I am merely trying to show why in this case the increase in development time might be the order of magnitude increase claimed.
* The other case I can think of is reimplementation. If you are reimplementing something (or are even on your 3rd or 4th reimplementation) then your implementation time will also be a larger percentage than normal. This is because much of the understanding, design and verification work has already been done. You are taking all your knowledge and experience and using it in the new project which greatly reduces your total development time (with or without rails).
Obviously your mileage will vary depending on circumstances, but
based on the details I got from Bruce, I still think that 10x is a good
ballpark number.
I agree that depending on details the mileage may very. I feel the mileage varies so widely that I don't think you can even give it a ballpark number.
Recently, Justin decided to re-implement with Ruby on Rails. Bruce said that
this took a total of 5 days (Justin's weblog reported 4 days for 80%
completion so, presumably, 5 days is for the whole thing)!
Careful with this statement. As I think someone else noted on this thread, some people claim 90% of your time is spent developing the last 10% of your project. I don't know if these percentages are generally correct but I do feel the concept is valid. 4 days for 80% could still mean weeks before it is 100%.
Also, this anecdotal evidence falls under the "reimplementation" special case. This says nothing about general web application development.
Anyway, it feels good to have my 10x claimed confirmed by an industry expert
to stated that he, too, was skeptical... until he had first-hand experience.
I feel that it doesn't support your claim in any way. You made a general statement which history has show to be unlikely the be true. Your "confirmation" is simply anecdotal evidence and even this it is a special case anecdotal evidence.
I don't want this post to feel like flame-bait. I am not trying to rag on any person or project. I just feel that saying Rails has a 10X productivity increase will be generally inaccurate and misleading.
Not only that I feel it reflects badly on the technology being talked about. I had been using Rails prior to your Rails article. I think your article was a great introduction to Rails, but if I had read your article and not known about Rails I would have been turned off to Rails because of that statement. I would have figured that if someone thought a web-development framework could generally give a order of magnitude productivity increase then they must not have learned lessons of past software developers (such as Brooks) and this would probably had made me put Rails towards the bottom of my "to look into" list. After all how good can the framework be if they hadn't learned from history?
Luckily I already knew Rails so I did not let that statement distract me and I just enjoyed the rest of a good article.
Just my two cents,
Eric