In last October, I left ThoughtWorks and joined a startup in Pune. The new company is developing a product for advising health professionals in United States.
The product is a web-application developed in PHP and Symfony framework. Not the cool stack for cool kids (I am referring to Ruby developers here). I never worked on PHP before and believe me, it is not the most awesome language to work when you have worked on Ruby, Java and C#. I hated many things about PHP in the beginning and I still do. But, as a geek at core, slowly I started getting comfortable and found lot of awesome things in it. I can live with it.
I started working with it, and faced huge challenges. We didn't have any tests (despite of PHPUnit). The code wasn't very modularized and object paradigm wasn't followed at all. So I just kept thinking, we should just rewrite entire thing in Ruby and move to a new world. That is when I realized that, I am not going to solve anything by moving to Ruby.
Yes, Ruby is a better language, it will reduce a lot of code and generally Rails will take care of plenty of the best practices without breaking a sweat. I just needed developer's agreement and their comfort level to move to Rails. The team was not comfortable at all. They were comfortable in PHP and not Ruby. It means, you'll be spending time in ramping up team in Ruby and migrating application. Bad way to move. Getting team to sign up for that, it was another challenge. Never forget that even if everybody agreed, its not very difficult to write bad code in ruby and create a royal mess.
So, in the end, we decided to stay in the PHP world, and do the right thing. Clean up the code and make it a better place. We started writing tests using PHPUnit. Used phactory for database factories. Introduced Jenkins as CI server. Started using jasmine for JS unit testing. Selenium was setup for functional tests. Got everybody licenses of PHPStorm :).
While all of this action takes place, we performed merciless refactoring and we deleted thousands of lines of duplicate/unnecessary code. This effort was happening in parallel to regular feature development. After nearly two months of effort, we reached our goal. We had a codebase which sucked less and worked better. Code was easier to manage and extend.
During this time the team learned a lot. Instead of switching to a different tool, we cleaned our own mistakes. That taught entire team to do things differently and in a better way. Now all we needed were few more helping hands like this and we are good to go!
We faced another huge challenge here.
When we put in word to recruit PHP developers in Pune, we got hundreds of resumes. It felt incredibly easy to hire PHP talent in Pune. We were clearly wrong!
We observed 90% of the resumes got rejected simply because those guys were not application/web developers. They were plugin developers for Wordpress, Drupal or Joomla! So that never exposed them to real programming at all!
So I started asking first question to them, what is a web application for you? If they say Drupal, they just got rejected. I might have lost some talent in this process but who cares?! I want a guy who can define an application which is not Drupal!
Then I tried to see if other people (Java, Ruby or .Net developers) want to work for us. Clearly they had their reservations to put PHP on their resume. Why?! Just because they think PHP is not a language which real developers use. I am sorry but thats not how it works!
It doesn't matter what language do you use, what matters is what you did using that language.Clearly, it was impossible to convey this thought to plenty of real developers.
Finally, we started hunting for talent which was right for us. People who don't give a damn about programming language and focus entirely on programming. They like to solve problems and take pride in code they wrote.
If you belive you're one of those who care about what code you write and it doesn't matter which language, talk to me. My email address is - sachin at dharmapurikar dot in.