Melt half the butter in a small saucepan, then transfer it (or half the olive oil) to a large bowl and mix it together with the lamb, salt, tomatoes, onions, garlic and all of the spices. Cover and leave refrigerated for at least a couple of hours – overnight is ideal.
To cook, put the marinated meat in a large heavy-bottomed saucepan. Add the remaining butter or oil and cook the meat over a moderate–low heat, uncovered, for 20 minutes, stirring from time to time.
Meanwhile, halve the orange or lemon, squeezing and reserving the juice from one half and reserving the remaining half to cut into wedges later, to serve.
After 20 minutes, add 400ml of water to the saucepan, along with the honey, orange or lemon zest and the juice, and the dates or apricots. Stir to combine and reduce the heat to low, then cover and simmer very gently for about one to one and a half hours, or until the meat is melting and tender. Check the tagine from time to time to ensure it doesn’t catch, adding a splash more water to the pan if you think it needs it.
Check the seasoning, adjusting with salt and pepper to taste – you want a heady mix of savoury, sweet and spice, with the lamb and its sauce in perfect balance. Refrigerate, or freeze, to take camping.
To serve, heat the tagine over a moderate heat until piping hot and serve topped with the almonds with couscous and orange or lemon wedges on the side.