I have to add to the cons, COTS (Commercial off-the-shelf) products are often designed badly and perform worse. They are designed to sell features such as flexibility but generally in my experience they use the database incorrectly (often due to sticking to ansi sql rather than faster performing database-specific SQL because they could have any number of database backends and generally having a database design that shows they had no one with database expertise on their design team) and are performance hogs.
The flexibility (that is almost never used much as it is usually so difficult to actually do and often requires you pay very expensive company contractors to be able to see the added fields in reports, etc.) usually comes with a huge price tag in performance, awkward design and general dislike. These products almost never take the time to properly define the requirements (relying instead on their problematic "flexibility") and thus you get project management software that doesn't even have a field for client (what company big enough to need project management software that costs over 100K doesn't have internal and external clients that you need to be able to filter on?) and other such nonsense.
The last COTS product we bought was so bad that our developers offered to fix our old company-designed product on their own time to give it what they thought they were getting (but actually didn't get) in this very expensive PM software we bought. 100% of the users of this system hated it because of the bad design and worse performance. It did not provide anyone in the company what they needed in terms of reports or documentation and we could not get rid of this piece of trash because we had spent too much money on it. We now have less documentatio of our devlopment process and what we do put inthe system takes devs longer to actually put in and takes managers exponentially more time to manage.
Another COTS product it was my misfortune to support caused the call takers at a call center to have to wait minutes to go to the next screen while talking to the already irate customers (we handled product complaints). Timeouts were so frequent we weren't even supposed to report them anymore to the help desk.
Another COTS product was created by a French company and while it seemed to work ok, writing custom reports was a real fun job since the database schema was in French even though the user screens were in English.
Then there was the horrible HR COTS product to do timesheets with that we couldn't even get the people entering the orginal data to figure out how to change a supervisor when the person moved to a new boss or the old one left. Kind of hard to get my leave approved when the person who was two supervisors previous to my current one and who left the copmany over a year ago is my approver and no one can figure out how to fix that. And the equally bad performance review software that lost the mid-year reviews and that wouldn't print a version where you could see your rating on each item next to your boss's rating (who would want to see both?) and which didn't actually give enough space to list your accomplishments for the year (why ask me what they were if I can't list them?). Of course those HR products were so badly designed our web developers were laughing at them when we were trained on how to use them.
I have almost never used a COTS product in an Enterprise organization that worked well or did the job it was supposed to do according to it's marketing. And I've seen alot of these products through the years. The exception would be Red-Gate's products (great products and stellar support and no I don't work for them) and a few small specialized tools, but never a big enterprisy-type thing.
Reinventing the wheel (writing your own version rather than using one of these products) is fine when the wheel is misshappen and wobbly to begin with.
Do not buy one of these products without a trial period. You can't tell what they are like to work with until your actual users try to use them.