I have seen two engineers write an application for about a year. They managed to deliver the project with great difficulty. No comments, no code formatting, no version control, no tests, no docs. After they completed the said project, they learned a whole lot of software engineering. Now these engineers use version control, adhere to coding standards, have API documentation, maintain end user documentation in docbook, write unit tests, use design patterns, read security books, attend lot of conferences, etc. They are now so much more confident about the quality of the software they develop.
They are scared as to when the old customer will come back and ask for a feature addition. The only choice they have is to rewrite the application.