The fact that many project managers and account managers are not able to handle milestones because many of them are not able to negotiate their schedules is real as the fact that without C — the language that Dennis Ritchie invented — we cannot have almost anything about the computer technologies that we know today. You as developer must assume that you should be leaded by people that is able to manage the schedule without falling in the need to use overtime and similar stuff, among including more developers into the project and requiring more resources.
You should know that including new developers in any project requires developers with a very quick learning curve, skilled reading documentation and reading the specifications provided by the team leader. Someone skilled managing projects is able to negotiate the schedule to finish the project with well planned milestones and deliverables. He should be able to stop any requirement change, or should be able to move the delivery date on any strong requirement change and negotiate a new price for the project because the final product requirement are changing.
In some manner, that is why I am currently charging worked hours instead of charging fixed price on any project that I handle. Usually project managers are not able to manage requirements, falling in overtime requests, with a strong lack of negotiation skills. So, for those projects with fixed price I say «sorry, but I cannot work for free». Mainly when software is subject to many changes, rather than physical products, where you cannot change the design many times as you want if you are not able to pay sequential builds of the product. So, on any requirement change, if the project price remains intact, I can clearly see that the project manager is not good enough and skilled enough to generate earnings for the company, with subsequent implication that I will not receive more retribution for doing an extra effort on building that project. So, «no compensation, no more work».
Receiving a compensation on any additional work, should be a must for any project manager. Otherwise they can start searching for another job, or you must simply leave the company — as I have done on my last work as employee — because you must not work underpaid, and you must not work doing extra effort if that effort is not compensated. So, «lift up the hearts, drag down the pants» do not works with me. I cannot work with project managers that keep saying «the customer has the true, even if they are not technically skilled».
a short illustrating story
I was working for a very big — I really mean very big — social organization, an international organization. Everything was going fine I think, deliverables were really delivered at time, and I was doing telecommuting. The project was based on PHP. Along the time, I have clearly detected that most people working on that Big Social Organization was not skilled as I was expecting from an organization like that.
For me, as a good developer, I have no problems to use version control systems, including continuous integration systems, because they allow me and my project managers to measure the real effort of coding. But that big organization kept using tarballs to send project updates. That big organization was not able to configure the server properly using written instructions — was that big organization capable to read technical documentation? — seems that they did not read the documentation. Me as freelancer, who can work with C, C++, Lisp, Haskell, Python, Perl, PHP5, C Sharp, Java and Visual Basic .NET, cannot have any excuses to do self-taught learning among reading documentation and reading Math books and similar stuff.
A was in front of people without good technical knowledge, so they were not capable to measure effort related to software development. The system was made from the beginning using object oriented programming, based on a LAMP stack and Zend Framework. From one day to another, we received the requirement to build everything from zero, using a procedural approach, without objects and classes, and everything should be finished in one month. So, migrating an entire platform from OOP approach to procedural and structured programming approach was not measured correctly. As result of my denial to rebuild the application, the payment was cancelled, a very «carrot and stick» approach on work.
Because payments were made using the famous «salary based on the market» for PHP5 development I was not receiving a good compensation as Java, C, C++ and Python developer, so I was considering the job only as a social benefit. That was great, but making less attractive the job position just because that big organization was having a big name and was able to cancel the payment because the project manager has changed his mind about how the project should be made was very bad decision I think. So, «no compensation, no more work», no matter how big is your company. Among the inherent problems that carry the lack of using version control systems, continuous integration systems and the proper coding style normative, without the proper knowledge of the best programming practices.
it is only today that people have become so materialistic and money minded that they have started charging for the knowledge also.