Some people find the diagram below very funny: it basically says that there is no way to write good code. Of course I do not agree with this. The diagram implies that writing well is a slow process, and that the requirements will have changed before we finish writing our code. I claim that we should write Adaptable Code, so that when the requirements change we will not have to “throw it all out and start over”, as appears in the box in the bottom. In this sense, Good Code is synonymous with Adaptable Code. Now the question is: how do we write Adaptable Code? My answer is: Adaptable Design Up Front, an Agile approach to Software Design.