The 2nd main cause of buggy software (time pressure is #1), is laziness and boredom.
Every job in this life consists of a “core”, which is the most challenging and most exciting part of the job, and a “chore”, which is the boring and tedious part.
Let’s take a chef as an example; he is an artist whose art is producing quality food, a process that involves mixing precisely-scaled ingredients, perfectly stirred on a period of time, or fried on the grill with an artistic movement…all are actions that the chef consider as crucial part (core) of the process producing the magnificent product of his.
On the other hand, the chef sometimes has to chop onion into xxx-small size of chops, a task that may be really boring to him (I wouldn’t blame him!). Being such a boring task, the chef is tempted to getaway with just xx-small size of chops; after all 95% of the meal preparation is there! So he ships the dish to the customer.
The customer tastes it, he generally likes it, but something is wrong…”ah!”, the customer discovers, “I am chewing pieces of onion!”. He almost rated the restaurant 4.5/5, but just that last bit ruined it!
3/5 is the final rate.
Ok maybe I dwelled a lot in that example, but to some extent this is exactly what is happening with the software developer. The task consists of exciting bits of code (core) that itself is the crucial part of the solution that solves the business problem; challenging, exciting, and fun to do.
On the other hand, the developer has to do some boring and tedious coding along (chore): arranging resources, validation, checking for nulls, breaking code into concise functions, cleaning up removable bits, or disposing resources.
All these tasks are not inherently part of the core solution, but if not done properly… if the developer thought he could just getaway with xx-small chops of onions, … if he does that the software might still generally work, but it will be buggy and less of quality, which will increase the chance of customers’ disappointment, or even abandoning it for good.
Finally, it is pretty safe to say that all the developers whom I thought were the best developers, they all did their chores ALL THE TIME, no excuses; all the tedious work mentioned above is done AND sufficient unit-tests is put to ensure it is done. Their joy of delivering bug-free software is higher than the joy of just solving the mind-stimulating core problem.
Don’t be lazy
Well, when i read “and a “chore”, which is the boring and tedious part. ” i thought you will be talking about documentation, filling time sheets, writing minutes of meetings, and well the boring stuff, as for validation, null checks,,,, i enjoy it, not as much as designing a solution or implementing a new feature, but you will find me checking old code and making sure its clear, validated, and tested, although i never worked in a company that require developers to write unit tests, and so i didn’t do more than a couple, i like to test the code manually and make sure all is working, for me the #2 cause of buggy software is lack of focus.
That’s very good Mahmoud! U will have no problem producing quality code the :), but why not try to introduce unit tests where u work? I can’t emphasize it importance!
so far the reason is…. Yes!, time pressure, with barely enough time to work on new features, because of support, or performance and maintainability enhancements,because of the low priority, add to that the lack of motivation, and focus with overloaded schedules, at those times i would push against it because it will only mean more work, however i really like idea of unit tests, and the integration with build servers, maybe i will do it in the next project.
The Chef in your amazing post, spent a very long time chopping onions into xxx-small size with high probability of being the only task (s)he is responsible for, so that Chef who is leading a staff responsible of doing those tedious tasks, taking the risk of serving a low quality dish unless the Chef himself tries one of the dishes (Unit Testing), taking care of those tiny, minor, and tedious things in any job and task is the way to the perfect results (Bug Free). Talking about software now; knowing that there is a Quality Team who is going to test and validate the implemented code, considered the major reason why some software developers are ignoring those tedious tasks, buying some time till the Quality Team feedback is provided and communicated.
Sorry for late comment, just read the post.