For the base, melt the butter in a saucepan, stir in the flour and cook for a few mins, stirring all the time. Now, using a whisk or spatula, carefully stir in the milk, a little at a time, making sure the sauce stays smooth. Bring the mixture to a simmer and cook for a couple of mins until it thickens – it will be very thick. Turn the heat right down and keep cooking for 5 mins, stirring often.
Meanwhile, heat the oil in a non-stick frying pan and fry all of the chicken in batches until it starts to colour lightly at the edges. Scoop out each batch of chicken and put it on a plate. Add the onion to the pan if you are using it, and cook over a low heat until soft. Add the chicken and any juices and the onion to the white sauce, fold it in and cook the mixture for a further 15 mins or until the chicken is cooked through. If you're making the base ahead of time, you can leave it to cool at this stage then freeze in an airtight container for up to a month. (Defrost fully before using in the next step.)
Heat oven to 180C/160C fan/gas 4. Cook the potatoes in boiling water for 10 mins, then drain and cool a little before slicing thickly.
Meanwhile, cook the broccoli until tender, then drain. Heat the chicken base with the stock in a pan until it is just beginning to bubble, then stir in the tarragon (if using) and the mustard. Fold in the broccoli and peas. Tip the chicken mixture into a dish and arrange the potato slices on top, then dot the butter over. Bake for 30-35 mins or until golden.