As stated in many places in SO "hardware/software is cheap, people is expensive".
Tools, like the ones listed here can really make a difference. Now I am stepping out of the cave and I am realizing that i must update myself.
I started studying "theory", I have a busy schedule for reading books on Refactoring, UnitTest, OOP Patterns. But all this is a lot of theory.
It is very good to do refactorings, write tests and apply patterns. But doing this simply in Delphi IDE (copying and pasting code/using the buggy built in refactorings) it is good for understanding the concepts, but for being proficient I feel tools are a must. Without a UML tool, I think it is impossible to refactor complex classes (or, even worse, legacy software where classes are just containers for procedural code). I am not experienced yet in OOP, but I translated in Delphi and followed step by step chapter one of Fowler's Refactorign. Yes, I see the great benefits, but I also realized how easy it is to get lost as many methods start to be added to classes (for good OO design). In those theoretical books there is almost never a reference the a CASE tool, or they say (I read this on Ambler's Object Primer) that CASE tools won't change your lifes. I agree that a CASE tool is not the starting point, first one must master the idea, and then use a tool (somehow we learng writing a language on paper and the we move to word processors). Sticking on that first chapter example. I never used a CASE tool with advanced refactoring optinos, but I am sure it would have taken 1/3 of the time to do those refactorings with a tool.
And the same applies for all other cases: UI testing for example. One test I need to do in one application is to push all the buttons to see if errors occurs. If a tool allows me to do this, even if it costs 500$ it is worth.
Another example DUnit. Yes it is free but many things are left to the develoeper. If a tool like TestComplete makes me save time and money and headache, why shuoldn't I go for it?
Then a problem comes from choosing the tools. I see these problems:
1) etherogeneous tools that has great features can be comlpex to learn and master, while a suite of tools with may be some less feature can speed your way up. (for example buying 3 tools from same vendor, or a tool that does 3 things is maybe better than buying the 3 best tools from 3 different vendors)
2) Make a priority list: which tool do I need first? Buy only that one, master it then go to the next? The only tool I am using now is proDelphi profiler, may be it is not the best profiler on the world (now AQ is even built in in Delphi XE) but anyway being able to use it it helped me in finding bottlenecks I couldn't guess.
3) buy it or code it? I often read on forums about "buying dataabstract vs write your own libraries for 3-tier developement". Coding everything can be ok for a huge organization but for a small one as mine I think the solution is investing in 3rd party libraries (picking of course the ones from companies that seems not near to bankrupt). Let's make the dataabstract example. It costs around 1000$. Let's say the cost of a developer is 2000$ per month (just to have an idea). Anyway you get the library at less then 1 developer month work. Buying upgrades is like maintaining the libraries. The cost is much less and the features and performance are better.
4) I don't see a point of dimishing returns with tools/libraries, but may be I am wrong.
Somehow to step out of the cave of procedural programming and enter in the world of effficient programming there is monster jump to do. Doing OOP on simple "book examples" projects is nice. But putting it into practice in wide systems is scaring, expecially because I don't have an expert with me, I have to do it on myself.
Final thought: using tools, buying libraries... I think this is necessary to delegate to tools/libraries some tasks and focus only on what I really need to do. Anyway I am confused a little, scared too. May you please comment on what I wrote and give suggestions that can help me?