Another mini work-related rant. The names, projects, and task names have been changed to protect the innocent.
phb: "Please work on project X, which incorporates tasks Y and Z."
me: "Hey, how about we split those up into two separate projects? Z is pretty straightforward, Y will take some doing. Y and Z aren't really related other than the fact that they show up on the same web page."
phb: "No, as long as task Y doesn't take more than a few days, please do them together."
me: "So, what datasource do you want for those Y items?"
phb: "Oh, just pick the most recent Y items per category."
a few days pass, where I do the lions share of tasks Y and Z
phb: "Oh, by the way, some categories don't get new Y items very often - we want to have the one that gets displayed change more often. Can you build in some capability to do that?"
me: "Hrm, nothing in the database lets me select different Y's based on date updated or anything. I'll have to change the database, and the module that interacts with the database, as well as the internal application system that produces all these things..."
phb: "So, we've thought about it, and let's cancel task Y out of this project."
me: "You're kidding, right? I've already done Y and Z, and let me tell you - I put in a lot of effort into figuring out Y, but making it so that Y and Z show up when a user logs in, and have the old look when a user isn't logged in, that was tough. Not to mention that not even part of Z can be used (again which I've already done), since if you remove Y, that part of Z is now worthless, too."
It started out simply enough: implement a new design which pulls in new datapoints. In figuring out where the datapoints come from, the initial guess was wrong, which was to use the most recent data items for each category. It seemed likely enough, but once the business owner was asked about the source of the data, it turns out that guess was wrong - he wanted to be able to dynamically choose which datapoint was displayed per category.
Normally, this isn't a problem - in fact, that's what web developers do all the time. However, this project was for modification of a legacy application, which in a rather complex way, displays one of these datapoints dynamically - but without being from a specific category. In order to accomodate the new request, a lot of the backend of this system would have to be changed - the database, the perl modules, the content management system, the XML files.
And of course task Z is under intense deadline pressure.
Let this be a lesson to make sure all the requirements have been at least thought about before beginning a task.
Or perhaps, if a developer notes that tasks should be separated, he probably knows what he's talking about.