Foreword:
I started to write this post immediately after reading Dreaming In Code. The book forced me to think why developing software is hard and I decided I need to write a post about it.
Frankly, even after reading that book I couldn’t figure out what really went wrong with Chandler. Was it too much up-front design ? Was it going for a desktop application instead of trying to develop Chandler as a web app ? Was it lack of initial time pressure? Was it some internal politics not documented by the book? I cant say for sure. After writing a little on this I saved it for future elaboration. I wanted to collect my thoughts and analyze the data which I got from the book. After several weeks I still don’t have any additional point worth writing about. So I just posted it.
Here you go :
Why is software development hard ?
I think it is a tad unfair to think that Software Development is the only thing that we don’t know how to do. A lot of people, mostly management assholes, seem to get all fired up when talking about software development. Why aren’t we delivering on time? Why are there so many bugs? Why isn’t our zero defect program not working? Why isn’t the CMMI process(or insert your favorite software development process here) helping us do better? Why is all this so hard? Haven’t we doing software development for years? Why aren’t we learning from our mistakes?
After working in the software industry for 5 years, I really don’t know why software development isn’t getting any easier. Certainly the tools have improved. But the increasing complexity of applications, security issues, the development model in a flat world, an increasing amount of people choosing to be developers just because there is more money in it, etc might be reasons why there is so much bad software out there.
People have been raising kids since time immemorial. Still we haven’t figured out the best way to raise our kids. Should we let them be or should we discipline them as we wish ? Should we let them make the decisions or should we make it for them ? Should we teach them life’s lessons or should we let them learn it on their own? A similar argument can be made for the field of personal achievement. What makes a person successful? His genes ? His environment? Can the traits of a successful person be cultivated? Can I copy a successful person and be successful myself? Successful people come from well-to-do background and also from ghettos. There are hard workers and then there are take-it-easy types. There are short ones and tall ones. There are PhD s and high school drop outs. If we really think about it, there are no easy answers and no reliable patterns for this.
If we cant figure out the answers to one of life’s most common happening repeating itself over every generation from the beginning of human life, then why are we so frustrated about being unable to know how to develop useful, quality software on time?After all, software development is only a few decades old.
If you think that the above mentioned cases are not science or engineering related, I should say that the most critical parts of software development are not really Science but Art. Team co-ordination, Estimation and Design are examples.