Though, I am quite busy with new product development nowadays at client site; feeling compelled share with you these quotes I came across recently.

"Programmers are in a race with the Universe to create bigger and better idiot-proof programs, while the Universe is trying to create bigger and better idiots. So far the Universe is winning." - Anon

"If debugging is the process of removing bugs, then programming must be the process
of putting them in." - Edsger Dijkstra

Well even though there are less examples of bug free software; we see around many softwares/systems which have outlived their lives and ages. These systems are still in use and popular and of course most of them are bunch robust software components or product of some ingenious designs. I guess we all strive to build such systems.

So how to build bug-free, stable, usable and successful software?
What is it that is lacking to achieve this - skills, technology, process, discipline or all of them in different percentages.
I guess there are many theories, articles, journals, and books addressing best practices.

@ the risk of sounding boastful (very very very rare moment for me)
After having created many stable software components, I have realized that the first step to better systems is to create a precise and clear "vision" and communicate it across all stakeholders. Without it in the first place things are more likely to go haywire ultimately. So if you are starting upon some new development, just say to yourself the line below and rest of things shall begin fall in place.

"I'm gonna create a robust, stable, usable, precise and efficient system".

Sounds simplistically simple? How tough can it be to begin with this line?
I have seen many good people starting with "I'm just gonna get it done".

It reminds me again of another quote by the famous author
“If you don't know where you are going, any road will get you there.” -  Lewis Caroll
Having worked with enterprise application products as well as mission critical embedded applications; I am deeply into the C family of language - I mean the trio C, C++ and C#. Though I also know many other 'languages' Javascript/HTML/ASP/PHP/XML/Shell Scripts/VB/Java and most of my needs remained pretty satisfied with the trio.

I believe that language and technology are the barriers which architects create for themselves. A open mind can solve problem faster, easier and cheaper.
Who would have thought a generation of scripting / web scripting languages like python and perl could automate your tasks, parse xml and html,  handle interupts, run periodic programs, provide regular expression and scripting engines to your programs.

Architect should break the language barrier and select something most suitable for the task. If a task demands something to be done by multiple languages so be it.

Recently devising localization architecture for client user interface (web pages) the need for parsing HTML arose. Optimal solution led to "python" (a programming language - to those uninitiated) which can make the task achievable in few hundred lines of code. Most importantly I could find that the HTML parser was in-built and sample  code available to use.