I was having a discussion with my colleagues about using the automated refactoring tools in IDEs (Eclipse, NetBeans, IntelliJ, Xcode, Visual Studio, etc) and was surprised that many of them were uncomfortable using such tools. One of them is a seasoned developer (Smalltalk, C/C++, Java, Javascript) for 20 years and he seldom uses an IDE and even when he does, he doesn't use the automated refactoring tools. He does a lot of refactorings, but he does them all by hand.
Personally, I rely a lot on refactoring tools. Whenever I work on a project, I try to pick an IDE that supports automated refactorings and use those refactorings whenever possible.
I am interested in finding out if professional developers here at Stack Exchange use automated refactoring tools. And, if you don't, why not?
To get things started, here are some reasons why my colleagues don't use the automated refactoring tools:
Trust - Sometimes they don't trust what the tool is doing especially if it is a complex refactoring like Pull-Up which might affect multiple files; they are worried that the tool might introduce subtle bugs.
Discoverability - Sometimes they don't even realize that such a refactoring is available in the IDE because it is not immediately obvious
Flexibility - Sometimes the tool is too rigid and they always feel like they have to configure it too much to get it to work the way they want.
Updated - summary
Based on the responses so far, I think I can summarize three things:
Developers don't have the time to try out all the different refactorings available. And because they can't try them out, they are suspicious of what they will do to the code (all the corner cases). This suspicion is warranted for production code under time pressure (even if you have tests to check). Perhaps better UI tools can alleviate this.
Developers have also been frustrated by the limitations of the refactoring tools especially when they use metaprogramming/reflection or have external files (xml, configuration, properties). Automated refactoring tools keep on improving but there will always be limitations. Sometimes the limitations are acceptable and other times they are not. I've spoken to several other colleagues and some of them are more tolerant of the limitations. For instance, if rename refactoring doesn't rename all the files but does a good job of renaming 90% of it, they are still happy to use the tool and fix up the remaining 10% by hand because it still saves time and effort.
[In my opinion from what I have gathered], developers feel that refactoring tools are nice-to-have features so if it doesn't work the first time (or does something unacceptable), they seem to be more incline to abandon them and make changes by hand. Compare this to other tools like compilers/debuggers which also have limitations and bugs. Developers are likely to stick with them despite their limitations because they are essential features that you can't just abandon in your workflow.
Thanks for all the responses. If this topic is of interest to more people, I suggest turning it into a Community Wiki.
It would be interesting to find out whether the size of the project, the availability of tests, the maturity of the IDE affect people's decision to use automated refactoring tools.
