Please, do not make any evening plans until the end of the sprint
I remember being a member of a project that was obviously going to miss the promised deadline and the project manager’s reaction was to try to extend our working hours to the point of not having any free time at all!
During a daily scrum session, the PM announced that we were falling behind and we needed to work around the clock, spending the next weeks following an extremely exhausting schedule in a desperate attempt to catch up with the unrealistic time requirements..
Of course this ‘managerial’ decision, led the team to frustration, fatigue and desperation, the quality of the code decreased dramatically, bugs were multiplied and a lot of tension was created among the team members.
What finally happened, is that the project was delayed by a few weeks and when it was finally delivered, it was far from what we had originally promised and a prime candidate for reverse engineering, something that from what I found out later, is exactly what happened, multiplying the original cost by a factor of 3 or even more.
Sales people imply deadlines based on inexperienced developers estimates
One of the main reasons for this kind of sweatshop working conditions, I described above has to do with wishful thinking and the fact that ,due to optimism, developers tend to favor the assumption that there will be no surprises during the implementation phase which will go through under optimal conditions.
Usually a project is decided by sales people who are trying to close a deal, virtually at any cost, without taking any serious consideration of the suggestions and estimates of the developers who will build the system. My experience is that sales people, are playing a dual role, not only trying to oversell to the client, but also to underestimate the magnitude of the work to be done. In many occasions, they manage to influence the opinions of the developers, who reluctantly are finally signing off, to something that in most of the situations, is going to become a heroic task, with many hidden requirements, unknown factors and fuzzy specifications that will only be clarified during the implementation phase.
Of course reality has proven to us, that this type of optimism is almost never justified, as unexpected obstacles and sources of delay arise during the implementation phase most of the times.
One of the most important characteristics of a Senior Developer can be found in his ability to successfully estimate a deadline.
Inexperienced developers, show a tendency to be on the optimistic side when they try to estimate the necessary timing for the completion of a specific project; this approach can become the source of a lot of frustration as the deadline is approaching and the project remains incomplete.
Eighty hour weeks are not unknown in the industry of software development and there even exist companies, which consider extended marathons as their norm and part of their corporate culture.
Software is originally conceived as an abstract concept, constituting of ideas and generalizations, in an attempt to cover domain’s needs as thoroughly as possible.
The original design, as exists in the mind of the developer, is usually incomplete and generalized and these inefficiencies are usually discovered during the phase of implementation.
Top quality wine takes many years to be created, this process cannot be accelerated no matter what kind of barrels of cellar conditions will be employed. Most Software development falls in the same category, as it fits more a linear model rather than a parallel one.
Software development involves experience, knowledge, learning and discovery, analysis and synthesis. The coding part is just a fraction of the whole process which requires all its aspects to be equally good
High level constructs might seem clear enough to allow for sufficiently accurate completion estimates, but experience proves that implementation complications are almost always underestimated and discovered in an on going fashion as the solution is materialized.