Projects are the same.
You build a project plan based on reasonable expectations, and then you execute the plan. You continually measure to make sure you're on task... that the project is progressing as expected, and make adjustments as necessary. It helps to get ahead... where possible. However, DON'T change your commitments, who knows when a new requirement emerges that can't be delayed, that you missed, or another critical resource is impacted to erode any of your unexpected momentum. Successful project management is achieving the desired state... using the expected resources... and at the expected time... or preferably earlier.
No customer will ever be upset if you deliver a product in advance of a deadline. However, if you move your deadline forward because of "unexpected progress", and then have a hurdle to overcome, and move it back to the original date, your customer WILL BE UNHAPPY. You've turned a customer that would have been very satisfied into one that is not... because you changed HIS/HER expectations.
Some basic guidelines when managing a project... all common sense:
- It could rain.. so build in slack... and don't let it go until the end. (Look at your past projects, and figure out what is reasonable... are you usually 10% behind, 20%... 15% early? That's a good basis for your slack factor.)
- People take vacation, get sick, and have other things that pull them off task.. plan for them.
- Know your critical path -- I've posted on this before... it can change as the project evolves, so keep your eye on the project pulse... and manage to the critical path.
- If you're late on a specific task... this can quickly become your critical path, so see #3.
- If new requirements arise, negotiate their impact the project timeline... these, or other tasks may be able to be moved to a future phase, to keep this phase on time.
- Look forward, and act forward. If you know you have upcoming requirements, make sure that they are ready when needed... and that you're ready for them as well.
- Know when to be flexible... and even more important... know and communicate any potential impact. If a project can't succeed without a critical piece of functionality that was overlooked, taking a hard stance is suicide to the project. If you can communicate the impact to the project, your sponsors and stakeholders may find it acceptable to either postpone other tasks, or determine that a slight delay in delivery is acceptable.
Personally, I know that in my dealings, I'd rely a tremendous amount on my instincts for what is realistic both from and effort perspective, and from a slack time perspective. This is from years of planning, managing, and adjusting project schedules for everything from software design, MRP/ERP implementations, new product manufacturing, and building a house. If you can learn the concept in one area... with a little help from someone with knowledge, you can transfer the skills to other areas.
I do find it particularly helpful if you actually manage your resources, or have very willing and committed partners that manage the resources. Never try to make your crisis someone else's, nor accept their crisis as your own... at the expense of your projects... without first making sure that this is acceptable for your sponsors and stakeholders, and then use the situation to further build trust, and bank emotional capital.