Saturday, February 25, 2012

8 Months at ThoughtWorks Pune

I joined ThoughtWorks, Pune in June 2011. 8 months ago. Previously I had worked with Persistent Systems, IBM Software Labs and Performix (a start-up). I would like to pen down my ThoughtWorks journey so far. Correction. Incredible journey.

For sake of readability, let's list down the things I feel are awesome and different about ThoughtWorks, and why I catch myself wondering why the hell did I not apply to ThoughtWorks earlier. For the record, I joined ThoughtWorks as a Senior Consultant, and my role here is Programming, Programming and yeah Programming. :) Lets see.. what this means.

1. People: The most awesome thing about working here is definitely the People. Each and everyone has a special talent. Everything else that follows is just a nice side effect of smart people doing things they love. If you are looking for a UI guru -- there are many, if you are looking for a Linux guru -- again there are many, if you are looking for someone with experience in Mongo DB -- turn around and go to the 3rd table, if you are looking for someone with experience or interests in Statistical data modelling -- drop him an email -- he should be visiting us next week for one of the many technical meetups at ThoughtWorks, if you are looking for someone with awesome drumming capability (yes music!), well you can find him too. Talent seems to be a complementary feature of all great programmers. I guess, you can't hone just one skill. Perfectionism and curiosity become a habit. At ThoughtWorks, the recruitment process is stringent, and we are careful about selecting folks who can build, fit and contribute to the ThoughtWorks culture of excellence, fun, and social responsibility.

2. Pairing: Now, this one is very interesting. We pair for all our development work. That means, every code that is written is written by two people sitting side by side, connected to a huge monitor and a pair of keyboards/mouse. Sounds unbelievable to most folks. Its true for ThoughtWorks worldwide. What this means is that obviously silly bugs are caught while programming, it also means I can't get lazy. If I skip a unit test -- or write code that is sub-optimal, the other guy will be like - Dude!! Then I'd go.. you know what.. why don't you drive (means type). The other awesome benefit of Pairing are the little tidbits you pick up from your pair. For instance, I used to use :wq for saving a file in vim. Well one day my pair said.. hey try using "Shift zz". Its faster. And since then its been a bye bye to ":wq". The net output of pairing is -- both folks learn the best from each. That's quite something! If you are weak in Javasript, your pair can help.. and in the end you know stuff you didn't know 10 mins ago. Next time you can teach that to someone else. Also, its bye bye to gtalk, facebook and twitter while pairing.. which means hours of solid productivity, with no distractions --- and to top it, you don't really feel exhausted because you have a pair and a friend to keep chatting with the whole time! And, then there is the concept of Pair Rotation. What this means is that every 2-3 days, you rotate pairs. This helps in ensuring everyone learns from everyone, and everyone learns mostly everything about the code base -- so there are no bottlenecks and module-owners. Everyone owns the code, and everyone can fix anything. Of course needless to say, we still have our strengths in certain areas, but we still know sufficient about other areas as well.  If you feel Gym membership is costly, try open heart surgery instead. Same is the case with Pairing. Its totally worth it!

Note: Even if you just read this post till here, and have never done Pair Programming, I suggest, for now you leave this post alone, and hurry along finding out more about Pair Programming because that's the single most beneficial decision you can take (other than choosing to join ThoughtWorks of course).

3. Linux (a.l.a Unix): Well, I spent 9+ years of my life with a Windows Laptop, thinking - well, Linux is for the die-hard geek, hacker, or for running mission critical server applications. I was familiar with Linux, and tons of its avatars -- thanks to multi-platform testing at IBM. Guess what --- if you are a developer in ThoughtWorks, and you don't work on a Unix/Linux  machine --- something is wrong with you, or you must be writing Windows all over again. In the 3rd week at ThoughtWorks, I wiped Windows off my 8GB Dell Latitude laptop, and installed Ubuntu. All our development happens on Linux machines. And believe me, for a developer, Linux is God-sent. The amount of tweaking, customization, productivity enhancers, and shortcuts you can enable in Linux.. makes Windows feel like crutches. And, yeah -- it helps having folks around you who have mastered such tools. Makes it way easier for you to hop on for the ride.

4. Transparency and Feedback: These words take on their real meaning at ThoughtWorks. There are no walls in ThoughtWorks Pune office. Just one big hall, with large tables (one for each team). No cubicles, for anyone. No exceptions. This means -- you know everyone, you see everyone, you say hello to everyone, and you can hear anyone. Turns out, it's quite easy to work in such an environment. You want to know what's happening on project Z, go and walk up to anyone in its team and he or she will bring you up to speed. You want to attend the leadership meeting, just walk in -- you are most welcome. You want to know if you are gonna be sent abroad on an assignment this year -- go say hello to PSM, and he'll tell you who all are selected and why. You delivered a presentation, and it was not-so-good, people will come and tell you what you could do better. If you rocked, they will tell you that too. You suck in Web Development, no problem, they will tell you, and help you find resources to improve, or better still, pair with you on such tasks. You want to know what's the future projects pipeline -- check out the internal my.thoughtworks portal. You want to know which bid we lost out on, and why, check out my.thoughtworks. Its all out there for you to see, read, learn and share. We trust you, and as long as you live up to the trust, things are much easier to manage and communicate.

5. Social Impact Projects (SIP): Besides the plethora of open source project options, we also have a number of Social Impact project options available for voluntary contribution. This gives me an opportunity to learn new technologies, while making a useful contribution to social causes. The great thing about SIP projects is they seem to be invariably built using the best and newest of open source technologies, cloud platforms, and the works. Most SIP customers want us to build, deploy and manage the whole solution, with no silly opinions like "It must use ESB", or bloated middlewares, etc -- only because someone higher up spent lots of money buying bloatware which now can't be justified. SIP projects are nimble, agile, and very satisfying to work on. ThoughtWorks has special folks identified for driving and helping volunteers contribute to SIP. The momentum on SIP in India is huge. To know more:

6.  Comfort, Fun and Food: Thanks to Extreme Programming (Kent Beck), not only do we NOT have psychotic processes (Agile rocks!), we also have tons of outings, meet-ups, and fun! In fact, after I joined ThoughtWorks, my wife was disgusted with the number of team outings I went out for. Teams are made by getting a bunch of folks together, and successful teams are made by getting a bunch of passionate friends together. ThoughtWorks is made of these successful teams. And successful teams celebrate.

To sum it up: My wife has joined ThoughtWorks last month! :) :)

[Update: 25/July/2013] A really nice video on life at ThoughtWorks:

[Update: 07/Aug/2013] Added snaps I took of Pune office.