How many times did you have been pressured because you need to reach a milestone quickly?. I think that most programmers have suffered similar situations where you must use overtime to meet a milestone or similar stuff. So, I can guess some facts about your situation, the first one is about money, you are not receiving the complete payment of your working hours. The second one is the fact that you are suffering pressure and being affected by quick milestones on more than one project per year. The third one is the fact that usually you are not able to complete your tasks in the estimated time. And the latest fact, is about how bored are you with your current job position.
Why all those facts can be conjugated in your daily programming tasks? The answer is probably easy to reach: bad management. Please have a look in your environment. You are working on a company, so that company have some competitors, mainly if your company is finding the same goal as other companies in the same market. How companies are competing?, price and efficiency, that means cheaper price and shorter schedules. Who offers less development time and more quality — where less time also means less price — usually is the company that earns the project.
But there is a real life problem which is not being handled properly: software changes. Software is not a physical product, and it is being subject of constant changes, so the main problem is how your managers are handling the amount of changes that is suffering the product that you are developing. If the manager fails on the negotiation of the price of making changes on the product, you will not receive the proper payment. Also, if the manager fails on the negotiation on charging the proper price and milestones for a given amount of changes that will suffer the product, you will be working overtime, for both cover, that cost — less paid time — the incorrect negotiation of the milestone itself.
Each time that you are being pressured to cover a milestone is probably caused by a bad negotiation of a milestone in both aspects, cost and time. So, a good manager should be able to negotiate the proper milestone and the proper cost, without scarifying your time and your money. Also, if your manager is not able to convince the customer that the real milestone requires more time that they claim, the lack of doing business of your manager is almost clear.
If you find your customer complaining about the project cost, he is not a good customer. Phrases like «why are you charging that amount of money?» is not a good sign. The manager should be able to negotiate the proper cost of the project, without falling in the mistake of underestimating the milestone, that will lead overtime usage and you can be sure that your development will have bugs due to the pressure. So, a good manager should be able to negotiate the right price and the right estimation of a project.