Karachi   ->   Sweden   ->   Karachi, again   ->   Dubai   ->   Bahrain   ->   Karachi, once more   ->   London and Leeds

Saturday, May 15, 2004

Software Development Practices: Part I - Phases

Does any one really know software engineering here? I regret to say that in my experience of 3.5 years, I have come across only 4 or 5 good developers - who really know how to develop software. Yes, this field is new and there are many orthogonal schools of thought in software process. But let me tell you the simplest possible definition of a good process: if it sells and gets used, your code is perfect and your development methodology is the best in the world. On a more realistic note, your code and design are perfect if code maintenance is easy.

Software development is complex because nevertheless, it's engineering and secondly, software by definition is flexible (read "soft") as compared to other engineering disciplines. The most difficult part of the development cycle is to have good project managers. You can't put non-technical managers on top of technical people that easily. Nor you can expect good management skills from coders who don't learn anything in their life except punching keys.

The development phases of a software project taught in university courses are Inception, Elaboration, Construction and Transition/ Deployment. I and my friends usually put a "Rambo" phase just before deployment - when everything is a complete mess and somebody from outside is brought in and asked to re-work on the already lost situation. The Rambo has a reputation of doing incredible things single handedly and more often than once he successfully does what a team of 5 or 10 people couldn't do!

It is an established fact that some developers are 10 times more productive than others. But it's rare to find a significant difference in the wages given to the best developers at a particular level of hierarchy. Additionally, many companies say that they give stock options, employee referral bonus, twice an year technical-financial reviews, etc. but do not hold to their promises. This with other factors effectively results in exporting our best people to developed countries; what's being left behind isn't being properly trained and mentored - resulting in a complete chaos.

Mujtaba Karim, a senior FASTian whom I worked with in CresSoft, says that the real-life phases of software development are Project Kickoff, Wild Enthusiasm, Incomplete Requirements Gathering, Disorientation, Complete Chaos, Promotion of Non-performers and Resignation of Key Resources.

Unfortunately, this is not the story of one particular project or company, some players in the global market and almost all of the local software industry are repeatedly making the same mistakes and have adapted a habit of not learning from the mistakes of others.

"We're going to QueryInterface the object for a magical IGeoff interface that will allow us to do wacky, incredible things. But I don't understand how it works yet because Geoff hasn't told me."
(Someone from Visual Studio Team)