You should not need to know the coding language to be able to understand what the code is doing. Readable code is easier to maintain, because it is easier to determine what each section is doing and therefore identify quickly what needs to be modified. Also it is then easier to make that modification because time is not wasted trying to work out how the code is working. The rigour required to craft readable code tends to lead to the development of robust systems, because the process focuses the mind on understanding what each element of code is doing. An application that does not respond as quickly and reliably as users expect, will not continue to be used. And an application that is not used, is of no use to anyone. Out and out speed rarely corresponds to good performance, as it tends towards making shortcuts which sacrifice readability. Thereby, they make the code harder to maintain, and bugs become harder to fix. A method that returns the wrong answer in 1 milliseconds is never as good as the method that returns the right answer in 2 milliseconds. Keeping things simple, using and understanding the best techniques, and staying abreast of technology developments, all help in achieving good performance. Clean simple code tends to lead to good performance and therefore should always be the starting point. Refactoring is key to ensuring that code is continually improved and that the introduction or removal of elements does not adversely effect the rest of the application. Without refactoring, code does not get better each time it is worked on. In fact, the opposite happens. Code that is not refactored as it is developed becomes confused and difficult to maintain. Without a good test suite, refactoring becomes difficult as an application grows. If a developer knows they can rely on their tests to identify the adverse effects of any change, they are able to make changes and know the scope of that change. Thereby, they can make the modifications needed to successfully accommodate the refactor. Refactoring is essential to the development of good code, and therefore, developing a good suite of tests is also essential.