3

I have recently joined a startup as CTO/co-founder. The startup and I have been thinking about moving the existing codebase (which is in PHP5.5, laravel framework) to node.js .

Main reason for this being that at the stage we are in right now, I'll need to hire talented, but inexperienced developers and train them to work on different parts of the project. JS is already being used in a very big angular app, and will also be used in the mobile app (we are planning to go the phone gap route). The api only exists in PHP.

I personally can re-implement the existing api in node.js in 3-6 weeks optimistically (I am confident of that time because I myself built the laravel api backend) and have a pretty good idea of the feature set required. Also, that's a time that the startup can afford at this stage.

I think that having one language across our tech stack can increase our ability to get the maximum out of new developers who join the company as we can train them only in JS and in use their skills across the tech stack, by giving them proper training before exposing them to a new area of the stack.

My question is, what are the benefits of training inexperienced devs in a single technology stack? Are my assumptions correct based on this list of benefits? Does an affordable 3-6 week turnaround become more realistic if inexperienced devs can focus on a single technology stack?

closed as primarily opinion-based by Robert Harvey, user40980, jwenting, gnat, GlenH7 May 22 '14 at 13:51

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.

  • 9
    Your plan sounds wildly over-optimistic. – Robert Harvey May 22 '14 at 1:42
  • 1
    What is a "talented, but inexperienced developer"? – Greg Hewgill May 22 '14 at 1:48
  • 4
    @GregHewgill: A young, cheap one. – Robert Harvey May 22 '14 at 1:48
  • @GregHewgill a wordy way of saying 'intern'. – user40980 May 22 '14 at 1:50
  • 2
    @GregHewgill We are based in India, college education here sucks, exposure to open source kinda sucks too, but a lot less than college ed. And the most capable programmers coming out of colleges are usually self-taught. Hence talented, and inexperienced. – kapv89 May 22 '14 at 1:56
11

There are several possibly wildly overoptimistic assumptions in your idea. I'm going to focus on two of them.

Technology rewrite in 3 weeks

I'm going to work off of the Cocomo II model, change every driver to be in your favor, and poke at numbers and say you have about 1000 SLC give or take (its an estimate based on you are doing all, being an expert in all the technologies used, and skipping the phases other than 'construction' and pushing yourself). If you have more than 1000 SLC, you might want to reconsider that number of 3 weeks.

1000 modified, 100% code modified, 0% design modified, 0% integration required...

You are switching technologies, frameworks, and even the language model. This is not a small change. You could be off by several factors or even an order of magnitude. Before going too far down the road with your "3 weeks", I would suggest getting a copy of Software Estimation: Demystifying the Black Art by Steve McConnell and make sure you are confident with your estimation.

One language across the stack

Yea, it may be one language across the stack. But programing for a mobile device vs a web page vs a back end are completely different ways of writing code. There are things that mobile developers think about (connectivity, different devices, different browsers) that backend don't concern themselves with because they are a given.

While you may be writing one language across the stack, its as different as writing Java ME vs Java SE vs Java EE. They all use Java, they all have the same base libraries, but a Java ME person will never even think of Spring or Hibernate and a Java EE type will not worry about Swing or Java FX.

The ideal of one technology across the stack does exist, but do not pretend that you can take a JavaScript UI type and be able to swap them into the position of a Node.js with no ramp up time for that new technology stack.

Yes, one language across the stack is a nice ideal. And something you might want to work for. But doing what appears to be a rush job to make it so will not make for a good platform or be of long term benefit. It also forces you into using one language across the entire set of applications when other languages may be a better fit (but you can't change it because you are a pure javascript shop).

  • Hi Michael, thanks for your answer, and thanks for referring the Software Estimation book !. Assuming the re-implementation of the api takes even 6 weeks (Now that's a timeline I am very comfortable about, and is something that the startup, given the state it is in, ie, the initial sales cycle, can afford). Would it affect your opinions one way or the other in a major way ? – kapv89 May 22 '14 at 2:19
  • Also, do note that I think that if I know the concepts well enough, then it'd be easier to teach the concepts of Java ME or Java EE to a person who knows Java than to one who doesn't. – kapv89 May 22 '14 at 2:19
  • 3
    @kapv89, actually no. I think the language does not guarantee the speed of adoption of a technology approach. I am hard-wired backend developer who has learned java in a few weeks after years of experience in .NET in the same tier - backend. I am still learning and getting my head around today's concepts of javascript+html5 and the MVC/MVVM patterns for example. My hard-wired backend thinking prevents me to gasp into the concepts of the front-end tier as I often stick to best practices which in most cases matter only for the backend.Do not constrain the people by technology, but by their skill – Ivaylo Slavov May 22 '14 at 10:46
  • 1
    @gnat I was more thinking along the lines of a node.js developer may have never touched jquery or worried about modification of the dom. On the other hand a web javascript type would not worry about ORMs or NoSQL databases... and a mobile app developer would have entirely different concerns. Java has a huge library that is part of the language - but the various design patterns that are integral to one may be completely foreign to another. – user40980 May 22 '14 at 17:00
  • 3
    Completely agree with @MichaelT. The assertion here is that JavaScript on both the client and server would be less expensive than mixing JavaScript and PHP. I suspect that's not inherently true. Client and server-side programming are quite different, and the cost of entry for PHP (in terms of training, 3rd party support, available talent) is, IMO, a lot less than node. – GrandmasterB May 22 '14 at 18:59

Not the answer you're looking for? Browse other questions tagged or ask your own question.