A pet peeve of mine are arbitrary deadlines.
Project Deadline: the problem
Project estimation invariably leads to a date which becomes an implicit deadline. Missing that date, regardless of cause, often feels like a failure if it is not outright characterized as such. When you give a date you set expectations and when those expectations are not met it is natural for people to feel somewhat cheated or deceived. Team morale often takes a hit.
Project Deadline: blunt team management and it's cost
In my experience people want arbitrary dates because they want to use project management as a blunt tool to try herd developers into what to work on and how hard to work. So, the best case scenario is the team works to a deadline and get's it done early. The same performance you would generally get without a deadline.
The worst case scenario is, as anyone who has ever had a project go over a deadline knows. The closer you get to a deadline, the more shortcuts are taken. The more quality of code suffers. And generally the more morale suffers. It is idiotic to try and force people to work to an arbitrary date when you look at the cost. The outcome is you've produced bad code and made morale worse. You may even have some turnover as developers seek other places to work.
Just to reiterate:
- Best case scenario is the same performance you get from the team without a deadline.
- Worst case scenario is bad code, bad morale, and a bad experience all around.
Projects Without Deadlines: a better way
I don't give dates unless there is a hard deadline. The release has to align with a marketing campaign, a particular event, etc. However, the question then becomes how to we (the development team) interact with others? How do they know when their requested piece of work will get done?
Frequent Releases: Vertical Slices and Velocity
Firstly we track all the work that is done. No work is engaged in that is not feature or a bug fix. Everything is done as a vertical slice. So when a feature is completed, it is releasable. We release biweekly currently, but have in the past released weekly. The result of this is everyone sees not only progress and completed work, but they get a sense of rate of work as well. Indeed we even have a weekly velocity (we use the idea of continuous weekly Sprints), along with a 14 week mean, standard deviation and median.
Public Priority List
Second we have a priority list that is public and we only work on the highest priority work. I manage the list, and make calls about priority informed by various factors. I double check with my manager.
So people get to see there work in relation to others, and they get to see each piece as it is complete released (on the biweekly release). So far it seems to work, and best of all no arbitrary dates.