Sad, very sad is to hear some people saying that good software is equal to late software, even worst is to experiment late and bad software. Robert C. Martin points to a very good way to afford the need to produce software quickly.
A well tested and clean detailed design (aka source code) is an enabler for a speedy cycle to delivering good software. Going well then, is also associated with a well educated group of software professionals. Often, the term education is related to degrees from institutions but that is just a circumstantial part of education and it is not conclusive to say a person actually is well educated; of course we all know that.
The actual education needed is that of higher levels of consciousness observable on professional behavior that is directly connected to the experience of users and customers of software products and services.
Such behavior is for example, good decisions in the course of designing software components that behave well accordingly to their specification (correctness) and also behave acceptably in conditions out of their specification (robustness) -that is to say- bringing in reliability into software. But how reliability is related to quick delivery of software? Reliable software takes time -no doubt- but the point here is that knowledgeable professionals actually get it fast in comparison to non-knowledgeable ones.
Another example: there is some information stored in a XML file that needs to be processed by a .NET application with a user-friendly interface allowing the user to edit the information and the save it back to the XML file. Who is going to deliver good software faster? A designer that just know about the basics of XML and Windows Forms or a designer that also knows about XSD, XML Serialization and Windows Forms’ data binding mechanisms?
Being knowledgeable is a never-ending story; there is a popular saying among university professors:
When you get your Bachelor’s degree, you think you know everything.
When you get your Master’s degree, you realize there are some things you don’t know.
When you get your Ph.D., you finally realize just how little knowledge you actually have.
I read from James A. Whittaker on How to Break Software: A Practical Guide to Testing:
“Knowledge is a strange thing. The less knowledge you have, the less you know about the vast amount of information that you have yet to learn…As you gain knowledge, you also gain insight into everything that you don’t know. Having enough knowledge to realize your ignorance can be an enlightening and humbling experience…Once you stop learning, your knowledge becomes obsolete very fast…, you must commit to continuous learning.”