I work on bids for my own business (thousands) and for a company I work for (hundreds of thousands).
Experience will tell you how long it will take to do a job. The more experience, the easier it is to estimate. But new materials, new techniques can throw a monkey wrench into that mix.
Hours to accomplish: Have a shop rate and know how long it takes including coffee breaks, plumbing leaks and all the rest of things that happen in your shop.
Materials: Not just the list price, you have to price in tax (if you don't resell), time to order, time to pick up or price of delivery, unloading and stacking and prep.
Expendables and other expenses: router bits used for the job, tape, glue and cokes.
Get that number and then add at least 10 percent. That's your bid number. Big businesses make money by being very specific about the work to be done and then charging for add ons/change orders at a higher rate with both material and labour. In my experience, going with the low bid on a job usually ends up costing much more than the actual bid. That's an opportunity to educate your client. They typically learn when they go with the low bid.
If you are in business to make a living, to make a profit, you must realize that your customers value your service, speed and quality. There are jobs that you will not get. But if you can't make a profit on them why do them?