I have recently joined a startup as CTO/co-founder. The startup and I have been
ID: 647346 • Letter: I
Question
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?
Explanation / Answer
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).