This presentation will look at the many problems of designing and building high-integrity software and the processes, languages and tools that are currently used. The need to "engineer" our software implies that discipline and reasoning are required, yet most processes and languages seem to obstruct rather than assist such attempts. To help understand why, we consider the history of programming language design, and how this has shaped the way we think about software and constrained our ability to engineer it. In this generally gloomy picture some good news can be found: the emergence of design-by-contract facilities in languages such as Eiffel and SPARK has made a strong impact in some niche areas. In those areas, we have made a rather unusual observation: customers (some having "flirted" with this week's fashionable approach) are "coming back to Ada", recognizing the language's strengths, particularly for high-integrity applications. The presentation will close by considering why Praxis still uses (and chooses) Ada, and the role that Ada has to play in the future of high-integrity software.