What does it take to ensure quality? If I may answer it in one word it has to be time, there is another parameter which I will introduce later. Look at any open source software, it evolves over time. I have recently been working on an open source CMS called Drupal. It's fantastic and things are done in a very simple manner. Drupal has evolved over years and a lot of open source developers have contributed to it. When I look at it's architecture and code I wonder how hard can it be to think simple and keep things simple. I was tested soon, I wanted to make a small change in the Drupal to get the desired functionality. I browsed through the Drupal Support forum for a hack. Soon I got a few ideas, and since I was in hurry as the deadline was approaching, I took one of them and pasted it in my code. It worked really well, I got what I wanted. Then while traveling home I was thinking about the code I had picked from the net, it was a combination of few "ifs" and few "for" loops and it was adding a lot of overhead on the system. Thinking about it more I was convinced that it was not the good way to achieve the functionality. Drupal is a beautiful system and I was spoiling it to make it fit to my needs.

Great software dazzles us by virtue of what it does correctly in the face of everything that could go wrong.

(Picking up line from Charles Babcock's article on Information Week). I was reading his article recently and this line struck me. My Drupal site will not work efficiently if there is lot of traffic on it. Thinking about the problem further and extrapolating it to generalize for IT industry specifically and life in general, we unnecessarily mess things up, and keeping things simple is not that a simple task. When we sit down to write code, we think of complex logic to solve the simplest of problems. Then we don't search enough for the available best practices, we have this urge to solve everything ourselves. While if we look at any open source software it is built with contributions from many developers and they improve over time.I think we make mistakes because of two reasons lack of knowledge and lack of efforts. Knowledge can be gained over time, but lack efforts is a bigger problem and is not easy to do away with. So if you have time you can gain the knowledge, search for right resources, train yourself with best practices and apply then well and keep your logic and code simple, given that you are ready to put in efforts.