Hi Aneez,
> Could you please elaborate on Developers can make test automation easier or harder for you?
According to my experience, the best thing developers can do is to assign unique external identifiers (name, id, ControlID, etc. depending on the application type and development tool) to all controls used by the user and/or used for verification. This will make it possible for you to easily and reliably identify and operate such controls in your scripts and ease internal scripts' logic.
Unfortunately, in a lot of case and/or used development methodologies/patterns, developers are either not interested in unique and stable controls naming or such naming is explicitly not recommended by the used pattern. While this might have sense for development, this usually greatly complicates tester's life as in this case you must find the ways how to distinguish, for example, between two grids that are seen in TestComplete's Object Browser as WPFObject("WPFGrid", "", 1) and WPFObject("WPFGrid", "", 2) when both of them are on the same level of hierarchy in Object Browser and when the index value (the value of the third parameter) can change depending on the order these grids were opened on screen by the user. The need to solve this adds complexity to your test code, slows down the actual tests development, usually slows down tests execution speed and increases the chances of test false negatives (or false positives) because of incorrect controls identification.