Thursday, July 02, 2009

The human factor in Software Project Execution

"If you want to build a ship, don't drum up the people to gather wood, divide the work, and give orders. Instead, teach them to yearn for the vast and endless sea." --Antoine De Saint-Exupery

Traditionally, software project execution had always been a lesser discussed topic than Project planning. While planning is essential for Project Success, the ground realities of software development seldom matches the "ideal" world documented in the Project Plans. Too much of upfront planning and processes often failed to yield the expected ROI in the dynamic world of modern software development. In my experience, most of the high level project planning is performed by Senior Management who either do not have a good understanding of the actual complexities of project execution or lack the will and commitment to do so. Unrealistic expectations set during project inception often doom a project to a death march right from the very begining. It also creates lots of stress and demotivation to the development team that has to fight the battle in the trenches. The net result is that development team has no choice but to "mechanically" follow the "process" on a journey to nowhere.

The Agile Manifesto stresses more on the ground realities of Project Execution vs. Planning. Since, actual results are produced by people, agile stresses more on "people" over "process". While processes and tools are an integral component of team collaboration and success, individuals drive success more than the processes and tools do. Prior to agile, the human factor did not get its due recognition. I think most of the traditional processes failed to address the human factor in software development. In my experience, humans do not work very well when asked to work under too many constraints. Too much processes and beaurocracy dilutes individual accountability and responsiveness. The irony is that the many traditional process that were originally designed to help teams succeed, actually turned out to be impediments to real progress.

However, I would also like to caution that Agile in no way advocates "ad hoc" development. It requires more "process maturity" on the team compared to traditional (process heavy) methodologies where people are expected to work like robots and the process is expected to magically take care of everything! As we all know that with more power comes more responsibility. In Agile, every team member is more empowered to do his/her job but needs to be more responsible and committed for the actual outcome.

No comments: