The 'ensembles' identified by the InterLink working group on Software Intensive Systems comprise vast numbers of components adapting and interacting in complex and even unforeseen ways. If the analysis of ensembles is difficult, their synthesis, or engineering, is downright intimidating. We show, following a recent three-level approach to agent-oriented software engineering, that it is possible to specialise that intimidating task to three levels of abstraction (the 'micro', 'macro' and 'meso' levels), each potentially manageable by interesting extensions of standard formal software engineering. The result provides challenges for formal software engineering but opportunities for ensemble engineering.