Andy Meyer wrote:
Hello, I am working in a small software company. We are developing
business applications for a very niche industry.
At the moment our software products are mainly fat client windows
applications which are accessing different kinds of database servers.
Now we plan to slowly move to web applications. We do not host the
applications for our customers, so it is necessary that we ship a
complete solution which is deployed at the customer site.
In total we will have about 20 to 40 customers deploying our web
application.
Unfortunately every customer needs a specific customized user interface
and sequence of dialogues, but the general business logic is the same.
So my question: Is Ruby on Rails capable for this kind of requirements?
Absolutely, if you can set some ground rules.
What you are selling is not a finished app, but a series of feature requests.
To solve each feature request as soon as possible, you need a Capistrano account on your customers' servers. That means, each time you finish a request, you enter 'cap deploy', and the end users' experience upgrades in real-time, right between page hits.
On your side, to satisfy these feature requests, you need highly decoupled code, with absolutely saturating automated tests. That is what Model View Controller and unit testing are all about. Each time you make one tiny edit, you run all the tests for that model, view, or controller. If the edit is for a feature for one customer, the tests defend the user experience for all the other customers.
A colleague of me has already begun to develop a complete new web
application framework in pure java and servlets without using any
existing web application framework technology. He has almost no
background in web applications and is doing it all alone.
Unless he is a supergenius who deserves to become our next overlord, he will epic-fail. Your goal now is to prevent the inevitable, as soon as possible.
My thinking is that this strategy is a big mistake. In 2008 it is
essential to use a mature web application framework for a small company
with not more than 3 web developers.
Absolutely. You will spend all your time on the plumbing. May I ask if this guy is working alone, long hours, at home, and without unit tests or frequent releases?
Developing a own new framework makes no sense at all. Especially for a
small company with a very niche market.
Rails is exactly what you need. Firstly, it is dynamic, so you can do much more stuff in much fewer lines of code than Java. Some guestimates place the ratio of code lines at 1 to 10.
Next, Rails leverages unit tests, so you can write new tests that target high-level things, without reinventing _their_ plumbing.
Next, Rails makes "metadata" rather easy. You will soon discover that each customer needs a different configuration. This topic is called "Software Product Lines" - look it up. As you add configurations, you will add unit tests that cross-check their methods. The more product lines the better, because the configurations and unit tests work together to cross-test everything, and soak-test all your code abilities.
These techniques do not require heroism. They require small, co-located teams, typically pair-programmers, who work reasonable hours. A week of work like this consists of collating the feature requests with highest business value, knocking each one down, and deploying the application when each one is finish.
Your colleague is raising the risk much higher than you need.