Sounds like you picked a poor contractor.
That's not an isolated case. In those times of real estate bubble expansion the volume was the king, and nobody gave a damn about quality - there was abundance of customers, individual ones didn't matter. Don't know if this changed yet.
That sucks. It's worth getting to know your neighbors and asking if they've got any recommendations for people to employ (or who to avoid!) so as to get someone who actually knows what they're doing.
That doesn't help either - people giving recommendations may be too stupid to give them (oh, and the less they know about the subject matter, the more prone they are to fall victim to smooth operators, and recommend them). Case in point, my neighbor recommended me "an excellent roofer" who, as I later found out, just slapped a lump of concrete onto my roof - which promptly cracked, leaked again and caused even more extensive water damage than original leak. That was the last straw for me. Well, maybe not - maybe it was the "luxury" car dealership that, while replacing the radiator, damaged the fan clutch (failed 4 days later), put a dent in the door, and, while repairing that, broke the center console (someone stepped on it with their knee). Or, maybe it was the body shop which put the swirl pattern on the whole car after fixing the bumper, and somehow managed to kill the transponder key. Or, maybe the bathroom guys that laid the tile with 50mm deviation from vertical on 1.5m of height and tried to convince me that it looked just fine. Which also managed to cut my driveway along with the backerboard.
The best case is if you can get someone who knows what they're doing and takes pride in doing a good job: they might not have the cheapest quote, but they usually do the job right the first time and that's worth a lot.
It's just the same in software development. You get what you (don't) pay for.
No, you get *up to* what you pay for.