Recently a colleague commented that software engineering and high performance scientific computing are incompatible. He claimed that maximising the performance of a numerical computation requires sacrificing core principles of a good software architecture, such as portability and extensibility. Hence, according to my colleague, all software used and produced in a scientific context will always remain a pile of hacks glued together by incomprehensible spaghetti code. My colleague cited Lapack and John Burkhardts page as examples.