I offer this as a how-to for anyone out there that has to deal with vendors in their day-to-day job. Specifically, vendors that you are a client of. Hopefully ones that are not quite like the one in this howto!
- Your boss asks you to implement something that depends on the vendor’s product (I should mention — the vendor’s product is something that we have bought-and-paid-for, and while we still have a support deal with them we are also allowed to make code-changes to the product ourselves).
- You investigate the vendors’ product and find that it will be fairly easy to implement, given one small change in said vendor’s product.
- Send an e-mail to the vendor, asking for the small change (as part of the support deal).
- Receive a response from vendor, telling you why the change is not necessary and a work-around that makes it not necessary… a work-around that will take longer to implement, require more code, and has the added bonus that it will create an implementation that is half-as-fast (using two API calls in the place of where you currently use one).
- Being thoroughly sick of this vendor, thoroughly unwilling to argue with them until they see the light, and on a very tight deadline to implement said feature that your boss asked for, respond with “Fine, I’ll do it myself.”
- Do it yourself, create patch file (of the 10-line code change necessary to the vendor’s product), and send it to the vendor.
If your vendor is anything like my vendor they are ridiculously angry now and will spend the rest of the day building mountains out of molehills. Before anyone starts pointing out that vendors have very good reasons for not changing their products, etc… just allow me to point out that the change was a stunningly trivial one that had no impact on the core functionality of the product and only modified one error message.
Specifically, the change split the error message “Either X does not exist or is not configured.” into the two distinct error messages “X does not exist.” and “X is not configured.”, so that it is possible to tell the case “does not exist” from the different case “exists, but is not configured”.