As a web developer and a freelancer/consultant(once), I always had this dilemma. At times I will pick the wrong one, which lead to some horrendous situation. But after few failure attempts, nowadays I grasp the idea to choosing right tools for right work. Still my friends/acquaintances/family ask me which tool to use for their applications. Over the time, I had collected few metrics based on which I will choose the platform.
These metrics are drawn from my freelancing/consulting time and doesn’t reflect in my professional work, as both are different. Since I no longer do any freelancing or consulting, I though it would be nice if I post it, so someone will get benefit out of it. One of the main principle of mine is, always use Open Source. Never buy commercial product. So all my views are based on OS in mind.
Metrics which help me to pick the tools/platform(Languages mentioned are my preference and not necessarily implies that anyone should go by that. It is the metrics that you need to know about) :
Sounds weird, but true. The main thing is, even after the prices of web hosting has come down significantly over the last few years, still we can see some general price difference. In my basic view, PHP hosting is always cheaper(Java, which is my preferred language is closer, but shared JVM is something I tend to avoid for many reason). But this is not the sole reason to pick a language but plays a major role. I can remember a client ask me “Why would I need extra money for the application to work in URL, when it is already working fine in localhost?”. I had to deal with these kind of people and at times, I include web hosting charges along with my billing to avoid such embarrassing explanation session.
2. Size of the Application
It is major factor. For a teeny tiny admin application or readily-available-in-php situation, I always choose PHP. Reason, development time is fast(sometimes zero) and results are more than enough to please client. I will not touch Java for a simple inventory system or something which I can easily find online like e.x.shopping cart, CMS, invoicing etc. At times, even for some medium size application, I choose PHP. With lot of powerful PHP frameworks available today. it make sense for me to go with it, based on simplicity it brings in development and installation. For basic CRUD applications, Yii/grocerycrud(don’t ask me about Spring Roo) made my day. Development time has been greatly reduced and pain of writing CRUD is no more.
But still there are situation where I choose Java. Mostly because, if the development is going to be done my multiple developers, where as maintaining Java I find a lot easier. And the sheer size of code base increases, pain of maintain the code will decrease. With PHP, I find it hard to debug or enhance beyond certain point. Being a freelancer, you tend to do all the work and once an application reach beyond the projected scope, debugging becomes nightmare. To avoid those nightmare situation, I will go with Java. Even if something new need to be added, it is not going to be tough as Java is my bread and butter.
3. Nature of work
If the work is re-writing legacy code, or adding a new functionality the existing applications, then things get interesting. With Node.js becoming buzzword, I started using it for simple utility kind of applications as well as moving legacy applications to new UI etc. Keep back end untouched(if performance is good), and improve the GUI and front-end speed. With this approach, billable hours are greatly reduced and response time has been good. Only downside is, getting a decent/good Node.js resource is real tough. For a simple utility applications, not much of an hassle. But bringing back legacy applications to new life, need some serious work and this is when finding a resource becomes real tricky. It is very tricky, at some point, I dropped the projects or idea of using Node.js. Adding new functionality to existing one is little tricky too, so I care to choose projects based on what language it is written. There is no way I am going to learn a completely new alien programming language which I know I never will use, for the sake of the just one project. I have done many such projects in Python, PHP, Struts, VB.Net etc. For me to learn, either it should be worthy or it should be fun to learn. Else, I am happy to skip the project.
If deadline is going to be too tight to choose my preferred language, I will go with PHP blindly, reason being, support and ease of development. But again, if deadline is too tight and nature of works requires me to go for Java, I will simply refuse, as I will never want to give sub-par work, as it is against my own moral. But most of the time, I either negotiate for time or split the release into phases, so additional features can go after live.
These are all some of basic metrics which I follow in choosing language for projects. And I hope these metrics will be helpful for someone out there, who is facing the same dilemma what I faced years ago. Just keep some priority and standard for the kind of work and don’t go below that. I would like to be called good developer who did less project than mediocre developer who did a lot of projects. For this, these 4 metrics along with lot other factors helps me in finding right tool for right job.