Engineering complex numerical software for high performance is expensive and leads to compromises – in flexibility, productivity, and performance portability. In this short talk I will reflect on our experience in building tools which generate such code automatically. We have been building tools that start from a very high level representation of a problem, and automate the best known performance optimisations for different platforms. For us the performance portability problem lies in the design of the generator – we build different back-ends. We use experience from a range of problem instances – different PDEs, different discretisations, to refine our back-ends. We pool the resources and expertise of a community of stakeholders. The challenge is to make this ecosystem sustainable, open and composable – by architecting open compiler infrastructure.