Ravi Mohan's Blog
Monday, May 28, 2007
FAQ (from my mail-box) #3 I am just starting out in the sw industry/I am still in shool. Can you give me some advice?
Sure. Giving advice is easy. Following it is hard :-) If you like coding (and technology in general), seriously consider if you want to study further. A B.Tech from most Indian Universities is utterly useless. A good MS or PhD will get you the good technical jobs. If possible get some deep grounding in science or maths. Or if you are the non tech type consider an MBA. Even if you can't study further, start specializing in a "tough" sub domain of software. If you are working in Java, learn C and assembly. If you are wrestling with java and xml on the job , acquire some expertise in algorithms or networking stacks. which brings me to Decide on whether you want to be an "enterprise" programmer early. Pros = fairly easy work, easy to get that first(and subsequent) job, plenty of travel. Cons = ultimately unsatisfying if you are a seriously technical person (you may need to move up to be a manager if you want good work or money, but being a manager is not a technically intensive job), it is too easy to get into an endless grind of developing the next website for an arbitrary series of industries. If possible, join a startup/small company/technically sharp company (like Google) vs one of the behemoths (like Wipro or Infosys). [Useful heuristic - if the company is an ISO/CMM./other process heavy company, run for your life!]. You'll learn more in a shorter period of time. You can always join Wipro or TCS after a couple of years when you are ready to "settle down" (and be mediocre). Be prepared to work like crazy for the first couple of years. Be prepared for intensely political environments (the more so if you join a big company). I am not saying be political, just be aware of politics. Politics is a part of every human endeavor which incorporates more than one person. Either scrupulously stay above it or learn to play the game well. Don't get caught in a "middle path" where you play sufficient politics to get hurt but not enough to use it get more money or power. Be aware that a job is not a continuation of college. It is surprising how many people make this mistake. (Some companies even encourage this in a ludicrous attempt to be "cool". If the company HR asks you to play Dumb Charades on a company outing, or if the company workforce is divided into "houses" which compete against each other in "skits" or "Dance competitions", you are probably in one of these companies) Seriously consider leaving. There is a subtle distinction between a job that's fun and a boring job with pseudo hip "activities" layered around it. Above all if you don't enjoy coding, for God's sake move on. Do something interesting with your life. There are enough doofuses in the Great Outsourcing Destination without you adding to it.
Thursday, May 24, 2007
This is a question that comes up a lot. My answer to questions of the form "Hi , I am ... my experience is ..... Do you think I should apply to Thoughtworks?" ( i can't imagine writing a letter like this to someone I've never met, but many people seem to think it is ok, so .. ) is I have no clue! It is up to you to decide what your career should look like. In general, TW is a good company to work for if (a) you want to work on "agile" (b) you like to travel (more so if you are applying to the TW offices outside India) (c) you like working on enterprise systems (d) you are very good at whatever you do (coding, analysis, dba whatever). TW is very un hierarchical (less so these days than before but still largely true) and if you are the type who measures your status by what your title says or how many people report to you then you should NOT apply. Oh yeah, you'll find the interviews either very tough or very easy. (Folks who are really good at what they do find the interviews easy. Those who are not, find them correspondingly tough or "unfair"). There are way less idiots in TW (India) compared to almost any company in Bangalore I know of (Google excluded), but there ARE a couple and if you face them in an interview that's your bad luck. Just move on. In a nutshell, I will **not** reccomend people I don't know (It is amazing how many people ask me to do this). Just for context, I have reccomended exactly one person to TW (needless to say he is very very good) in the last 5 years (hi Sheroy!). I left TW almost 3 years ago and have no inside information (and if I did I wouldn't share it with people I don't know). If you *have* worked with me in any capacity, please feel free to ping me and I can talk to you about whether TW would be a good fit for you (you'll have to buy me dinner/beer). PS: the Thoughtworks India recruiting page is here. I would like to point to the recruiting pages for the other offices , but some moron of a web developer has changed the Thoughtworks Home Page so it redirects to a "Select Country" page (wtf!). So I can't be bothered to find all of them and point to them, but in general, go the appropriate country's hiring page and apply online.
Wednesday, May 23, 2007
[context] I get all sorts of questions in my email every day. I try to answer all my mail but I am getting tired of answering the same questions again and again. So I am going to post these common answers here and not answer by mail anymore [/context]. The minimum cost of a developer(aka a "coding body") in Bangalore is about 20-25 $/hour. This is the rough rate charged by Wipro/Tcs/other "outsourced enterprise" bottom feeder companies, for a "standard" development project. Of course most of these projects are seriously overstaffed, but that's a different issue. The hard part here is getting a good team who can deliver good code vs process documents or whatever, but at 20-25 $/hr you will get a pool of candidates. If you need *really good* developers (the situation for folks who are trying to optimize time to market or trying to do something unusual, say a startup (vs crank out umpteen jsp pages or make minor bugfixes to a legacy app or whatever), the cost (in Bangalore) is 40 $ +. How much that "+" represents depends on a lot of factors. I've seen rates of upto 200$/hr for truly exceptional coders/projects, but that's (very very) rare. 40 $ is a good baseline. It is VERY VERY hard to find good developers in Bangalore, just as is true elsewhere in the world. So the ability/willingness to pay the above rates does NOT guarantee you good developers. 95% of the software "industry" in Bangalore is staffed by people who shouldn't be coding. Think carefully before you spend your money in "outsourcing". Bangalore is one of the most expensive cities (if not the most expensive city) in India. If you can find good developers in less expensive parts of India, like say Trivandrum or Bhubaneshwar you can expect to pay about 25$/hr for a really good developer and about 15$/hr for a "coding body" type. The density of good developers is much lower in such small cities, but if you can find good people, good for you. Ok that's one question I don't have to answer by mail anymore.
Sunday, May 20, 2007
After some travel (and more to come soon) I am back in Bangalore. On Saturday, I went to the Thoughtworks "MasterClass" conference. Overall this year's MC was an improvement over its predecessors, because it focussed on people who actually code on a daily basis and instead of high flown abstractions about "agile" etc , the talks were very focussed and drew on their expriences. Less "consultant speak" and more "programmer speak". Nice. Pramod Sadalage demonstrated database refactoring. Vivek Prahlad,, author of Frankenstein, gave a competent lecture about Evolutionary Testing. Srihari Srinivasan described how his team had created a mini language ( I won't use the over abused "DSL" -- to quote Alan parsons from a comment he made on reddit "It seems anyone with 2 minutes ruby experience calls a method with a inline map, and no brackets, and calls it a "DSL" " :-) ) and then build some IDE like screens around the language. The interesting thingwas that instead of the usual ruby DSL fanboy froth, this was a very sober presentation about an "external DSL" with a proper grammar, parser etc. There was a bit of "reinventing compilers" flavour to the talk but I enjoyed it nonetheless. Overall fairly interesting and the organization of the conference was top notch. I thought the presentations were somewhat basic , but I was not obviously part of the intended audience. To illustrate, Vivek asked the crowd how many people had *heard of* Selenium and about 6 people (of maybe 250 or so) raised their hands! 6! Considering they are all "working professionals" that's .... scary. I also used the conference to poll some of the best programmers in TW about what they thought of "Behaviour Driven Design". I was never very impressed with either the people or the ideas in "BDD", but Dan North seems (from his writings) like a thoughtful fellow, quite an aberration fornm the usual BDD crowd. All the people I asked, dismissed BDD with varying degrees of amusement and derision (think "that'a bull****" to "It doesn't make sense. people are just making noise"). Meanwhile here is something I thought of but can't summon the energy to do. Download JUnit, change the name of "TestCase" to "Context", the part that looks for "testXXX" methods to look for "shouldXXX" methods and "asserts" to various forms of"expect" , or.shouldDotBeDotPseudoDotEnglish methods. (With JUnit 4 one would need to hack the annotations , but the principle is the same). hey presto (almost) "BDD" on the cheap. I've always thought "BDD" was about consultants trying to create new material out of old to write new books and get a few consulting assignments. It is good to know that most of the capable developers in TWI are equally unimpressed. The audience questions were dumber than usual. I am not talking of questions that arise because the questioner is ignorant of the subject. Those are all right. No one knows everything. These were questions that came from not listening to what the speaker was saying. In addition, they were thinly disguised statements trying to prove that their half baked "opinions" had some technical merit. (roll eyes). Vivek in particular handled these ultra stupid questions extremely well. His strategy (which I've noted for future use) seems to be along the order of "acknowledge the question, ignore its latent stupidity, say something useful that benefits the crowd and conclude with a "That was a good question" . I would simply have said something like "duh... is that a question or your untested opinion?" or something equally nasty. I wish there were some kind of gathering place in Bangalore for people who actually write code, because they LIKE to write code (vs because they want to get paid). I have a suspicion not many of these idiots would attend. And the conversations would be of a higher quality. Speaking of which, the best thing about the conference was that it enabled me to touch base with an old college mate of mine, Peter Thomas. (In college, Peter was one of the good guys while I was more .... ummm.. radical). Peter is pretty unique in that he is a manager (with an MBA from one of the top institutes in India) who gave up being a suit and is focussed on writing code. Very impressive. He is the author of JTrac and his blog makes compulsive reading. As the conference wound down, Peter I and Siddhartha hit Koshy's for some conversation over beer. We talked of code, music, wargames, etc till Siddhartha had to leave to catch his flight to Chennai. I also managed to get a sneak peek at Thoughtworks's agile project management app, Mingle. the folks manning the booth mostly weren't developers (or at least they didn't sound like developers) so they couldn't answer some technical questions, but overall I think it's a very good attempt. If they make it free for Open Source projects (as I heard one of the TWers claim) I'll give it a whirl. All is not sweetness and light. Now that I'm in town,I have one of those "meaning of this relationship" talks coming up with the girlfriend (a force of nature is probably a better description). Urrgh! I'll never understand women! I do NOT intend to marry anybody. do NOT! NOT! Thanks! (end ramble)