views:

66

answers:

4

Hello, I have recently been come to for advise on an idea of rewriting an existing site due to massive maintenance problems in their old design.

Basically, the company is considering a complete rewrite of aprox. 90% of their site which is currently written in PHP using an in-house framework.

The company would like to rebuild the backend and some way down the road the front-end as well in order to minimize their maintenance problems and make it easier to bring in new tallent which doesn't need to spend months learning the architecture before they can become affective developers.

We've come up with several possible architectures, some involving rewriting the whole site using an existing scripting web framework such as Cake, Django or RoR and some compiled language frameworks in Java or even .Net. In addition we have come up with some cross technology solutions - such as a web application built in Django with a Scala backend.

I was wondering what merit would there be to using a single technology stack (such as RoR) as apposed to using a cross between two (such as RoR with Scala, like Twitter now do) and vise versus.

Take into consideration the fact that this company's site is a high traffic site with over 1 million unique visitors a day, which will be transitioned onto the new architecture slowly over a long period (several month to a year)...

Thanks

A: 

Rewriting your whole codebase will require significant effort and lots of pressure, and for a start you would be best to start by doubling or maybe tripling the initial time estimate. You can think about your problem from two perspectives :

  1. Number of platforms. In order to minimize and manage complexity of this task, it is most definitely your imperative to reduce mental strain by using as less new technologies/platforms as possible. For example, an advantage of RoR over PHP+Smarty that has been cited often is that with RoR you don't have to learn a new presentation language.

  2. Team effort required to learn new techs. If your existing team is already versatile with PHP, Django etc, but not RoR, then you might be better off reusing existing skills, since the mental strain for developers will be lesser.

Jas
Thanks. Its not my developers acually, I'm advising someone else :) But doesn't matter. Obviously, keeping it to one technology is easier, but they are worried about scaling problems and so they dont want to use a scripting language for the backend, but still want the ease of scripting languages for the actual web application - and so we're considering Django or RoR for that.
Che Kofif
+1  A: 

Generally speaking, I don't think any particular technology stack is better than any other in terms of performance; Facebook runs on PHP and I know first hand that Java and .Net scale well too. Based on what you've said I'd be worrying more about the maintainability related issues than performance and scalability just now.

Generally speaking, I would keep within one well known technology stack if possible:

  • It'll be easier to find (good) staff for a well known platform / technology stack; there will be more in the market, and rates will not be as expensive as the skills are too rare.
  • Splitting your technology means you need a wider range of knowledge; by sticking with a single technology stack you can focus on it, with better / faster results.
  • People tend to focus on one platform / technology stack, so it'll be easier to find developers for technology X, rather than technologies X, Y and Z.
  • It's easier for team members to work on different parts of the system as it's all written in the same technology - presumably in a similar way.
  • In terms of integation, items within the same technology stack play nicer together, crossing into different stacks can quickly become more difficult and harder to support.
  • Where you do want to use different technology, ensure the boundary is clean - something standards based or technology agnostic like web service / JSON calls.
Adrian K
Che Kofif
That's cool then. I don't know anything about Cake, Django or RoR specifically so sorry I can't help much there. I suggest you write up a paper that looks at all the options and considers: the outcome you're after, the context of the system; and for each option you identify: pros/cons, risks, constraints.
Adrian K
We'll probably do that anyway, I am looking for thoughts from you guys to see if I'm missing something :)
Che Kofif
A: 

Getting the architecture right and the code clean is the easiest with Smalltalk and Seaside, especially when you do the persistence with Gemstone. At this scale, you'll have to talk to them about license costs. You might know them from the Ruby work they do with Maglev.

Stephan Eggermont
A: 

Single technology means less moving targets; simpler is always better as long as it meets the requirements. So, use as many technologies as you need, but not more than that. The technology is not important; the right technology is the one that makes your job easier. So, ask yourself what are your current pain points, and how would each of those technologies help.

Domchi