In my limited experience of QTP one thing I've picked up is that it will save a lot of time and energy if when writing a new QTP script to disable SI.
Almost every time I write a test script for a web page, I will find some unusual behaviour that baffles me because I can't see any logical reason why QTP is doing it.
For example, a test script will run fine and then suddenly it will fail but when looking at the test results I will see that QTP has somehow clicked on a button that isn't even in it's repository and then it's trying to run the next action on the wrong web page.
What went wrong? After much digging I found that the button QTP was supposed to press didn't load because of an error but rather than QTP flagging this as an error it instead decided to click a different button, which is my view was completely random as the buttons were very different although there might be some similarity between HTML tags.
Another example is I have a script that makes a purchase on a webpage. In this webpage there are two different drop-down boxes "Dropdown A" and "Dropdown B" but only one is displayed so I just want QTP to tell me if it was displayed and if it is select an option.
On the run where I expected "Dropdown A" but not "Dropdown B" the results told me that both dropdowns were selected, even the debug events specifically specified the name of the dropdown boxes. So I'm thinking there is a defect since only one dropdown box should be displayed.
What happened? Smart Identification thought it was smart to assume that "Dropdown B" must be "Dropdown A"!
Simply, SI has never been useful for me. It has only added something that doesn't normally exist in programming languages and that is to take away the strict adherence to logic and replaced it with apparent unpredictable and illogical behaviour.
The best approach from my experience is just to disable Smart Identification before it has chance to cause you any grief.