This may appear to be a rant, maybe it is, or maybe it is just a state of mind. Maybe I have hit a wall as I complete close to eleven years as a programmer but one thing I fail to understand now in the software world is the culture of deadlines. Maybe I will find it hard to get a job in India after this article but who cares. I like analogies, let us start with an analogy -
Engineering Company A was building a bridge, the project was shutdown mid-way due to (lets say) financial problems. After a year the government got some funds and decided to complete the bridge with some modifications, they wanted to extend it ten kilometer north-west instead of the original plan of going north. Engineering Company A was nowhere to be found so Engineering Company B (ECB) pitched in its proposal, put together at the very last moment since ECB sales team works on multiple proposals at any point of time and is usually overworked.
Their logic was simple, since the last built ten kilometers of the bridge took ten months the next ten will take more or less the same time. So they propose a fee and estimated time of completion of one year (adding some buffer). ECB got the contract but midway (after building a few kilometers) they realized that the earth on the north-eastern side was not very stable and they needed to reinforce it to erect the columns of the bridge, this would take four more months. The government meanwhile had made some other plans and had publicly announced the opening of the bridge in six months.
Now what does ECB do? Since this is a construction project with probably human life at stake (what if the bridge collapses) they will ask the government for an extension and most probably get it
This is the situation in a lot of software projects, however, since there is rarely human life involved, ECB will usually ask its engineers "to do anything" to get the project out of the door. Heck, maybe they can even charge more money later to "maintain" it.
Usually this "do anything" attitude involves lowering the quality of the code drastically and getting it out somehow. No one cares about SOLID principles and test cases when they are working on a Sunday night on a project they no longer believe in.
And whose fault is it? Probably no one's, things change constantly, maybe the Operating System released a new version on which the system under development will break, or maybe a new open source technology is released which will dramatically improve the project quality if adopted or any other hundred reasons one can think of.
So the important question on my mind is, why do we need deadlines? What is a deadline trying to solve?
If someone asks me, when can we release this software? I would answer, when I think it is good enough to be released. In turn I would consider the code quality, the feature set, the performance and the usability of the software before releasing it upon the world.
So again, what is a deadline good for? In my mind -
- Maybe it is a hangover from the management emotion that workers are inherently lazy and unless given a deadline they will not work hard.
- Maybe it is because a date is needed in a contract.
- Maybe there is this "market force" which wants us to release before a date, for example releasing a game just before Christmas.
For issue one - worker mistrust. I think this should not even apply, most good software companies I know of have a rigorous and extensive interview process. Why would you hire a great programmer and expect him to be lazy or fraudulent with the work that he / she is doing. Specially in an Agile world, where there is a daily standup for peer review and a sprint demo every 2-3 weeks (sometimes even every week) with updates on progress made. In an Agile world I see absolutely no place for deadlines.
For issue two, do you really want a product from an external vendor that has somehow been released without anyone being comfortable about it? I know there are some bad stories about software outsourcing and is it really a good idea to push a vendor and ask them for a delivery no matter what? Personally, I find this whole contracts business very shoddy, the request for proposals are usually badly written ambiguous bullshit with more legal parlance than actual software requirements and the response for these proposals is the same. Why not just discuss the software requirements face to face with a few trusted vendors and use the Agile approach of incremental delivery.
Lastly, the "market forces", this is why most movie based video games suck. They have the words "rush job" written all over them. The most successful Batman games actually had nothing in common with the Batman movie cycle. I think most video game producers and consumers have now realized this. Plus, there are ways to deal with this as well. Instead of releasing a full fledged rushed product once, one can release a MVP with good quality code and add features incrementally. This way the consumers feel happy rather than being cheated with a low quality product which can never be upgraded.
I know of tons of software that were thrown out of the door to meet the deadlines but they suffered from numerous bugs, poor performance, bad UI and consequently extremely poor adoption rates, so much so that either much more money was spent on improving them or they were simply binned after a short while, wasting the entire effort.
Anyways, I will be happy to hear what productive purposes do deadlines solve. But if you ask me today and if I ever run my own organization it will most probably be deadline free.