A language that is &quot;write it right the first time, refactoring is painful&quot; is a poor fit for most problems. Requirements change, if your software can&#x27;t be adapted easily your project will fail. The general failure of waterfall-style software development is a strong indicator that finding the &quot;right&quot; design up front usually doesn&#x27;t work out.