The best way to avoid this type of dispute, is to do not allow any money to change hands or work to begin before there is a written agreement, signed by both parties.
Within the agreement, make sure there is a clear cost for all services, potential variables on delivery, date of completion, and an objective statement for what services will be provided. Most disputes are based on a misunderstanding on what work was going to be done and what the cost would be.
For example, if the company is providing roofing services, the agreement should specify what type of shingle would be provided. If the contract just says "roof replacement," your shingle expectation may be different from the customer's expectation. This protects both sides and sets a verifiable expectation of services.
As with all Agreements, the best practice is to have the terms reviewed with legal counsel.