A lot of people who know me knows that I use a bunch of productivity tools (I’ve blogged about many of them several times). I still hear all sorts of comments on why NOT to use tools like that. I haven’t bought into any of those arguments, and probably won’t. 🙂
Here’s one of the ways I look at it:
I hire some guy to do some work at my house. I want the work to be done quickly and with quality. Part of the work involves loosening and tightening up a bunch of screws, but that’s not the core of it. I see the guy using a regular screwdriver. It’s obvious the the work is going to take a lot longer; using a power driver would make it a lot faster. All I know is that the next time I won’t hire this guy.
What does that have to do with software development? Well, if I were to hire some company to write software for me, I’d like to go see how their developers work. If I see them building software without using any “power tools”, I’ll have a tendency to think they aren’t going to be productive working on my product, so I would be an unhappy customer.
Let’s take a Visual Studio power tool as an example: it could be either CodeRush/RefactorPro, ReSharper, or any other similar tool. I hear the following comments from people not willing to use something like that:
- It is not free!
At PDC, DevExpress/Microsoft announced CodeRush Xpress for C#, which is free. It’s a subset of the features available in the commercial version, but still, it gives you a lot more than what you get from VS out of the box.
Regardless, those tools cost something like 250 bucks. That gets paid off real quick for a developer that uses the tool effectively. If I worked tightening up screws, I’d buy a power driver in a heart beat.
- It gets in my way!
Like any other tool (such as a power driver), one must learn it in other to use it. Some of these tools try to predict your next move, and it’ll take action for you (like moving the caret – the blinking cursor – to the place you’re likely to go next). Of course, not knowing about this behavior, one may start to struggle with the tool, defeating its purpose.
My suggestion is: take the time to learn it! But don’t do it all at once. Try learning one thing a day, or a couple every week, and make sure you use the things you’ve learned. You’ll get to a point where you’ll do things without even thinking about, which is great because it allows you to concentrate on the task at hand (say, create a Customer class), as opposed to thinking (type “public class Customer”, press enter here, move the caret there, don’t forget the braces, etc.).
- I won’t use it because sometimes I work at a machine that doesn’t have it
Yes, I know, it sucks when you use these kind of tools and have to sit at a machine that doesn’t have it. I know I feel like that. Am I totally unable to work in such a situation? Definitely not; I’ll just have to work slower than I do in my normal environment, and that’s fine.
With that being said, here’s something that has happened to me many times before: if I have to sit at somebody else’s machine for a long period (say a day, or a week…), and the machine doesn’t have the tools I use, I’ll just tell the owner: “hey, I use a bunch of tools in my regular environment that allow me to be more productive. Do you mind if I install them on your machine? Some of them are free, and the commercial ones have trial versions. As I use them, I’ll explain to you how they help me save precious time; before leaving, I’ll remove all of them, unless you tell me not to because you’d like to play with them yourself.”
A lot of people who I’ve done that with ended up embracing the same tools I use and they thank me for having brought that up.
Part of my work duties include mentoring developers and general consulting. Say I didn’t use any tools and I get to a client who happens to use them. The client sees me being unproductive on her machine, spending her time, and probably thinking “why have I hired this bozo? He’s supposed to save me time; not to waste it…”. I can’t tell you how good I feel when I come out of a client and they tell me a lot has been accomplished while I was there.
Just finalize this though, my common answer to the “I won’t use it because sometimes I work at a machine that doesn’t have those tools” is: Well, that’s like working at the 102nd floor of the Empire State Building and taking the stairs up and down every day, just because “sometimes I go to buildings that don’t have an elevator”. Of course, that may suit you just fine (that is, if you’re King Kong!).
I’m glad to see that Visual Studio 2010 is going to get a couple of features available in tools such as CodeRush/RefactorPro and ReSharper, such as features that makes code navigation easier, as well as features to better enable developers who practice Test-Driven Development. You can read more about that here, and there’s also a video showing off these features here.