To a heavy bottom sauce pot add flour, sugar, salt and arrowroot powder. Use a whisk to thoroughly combine the dry ingredients.
Add 4 cups of milk to the dry ingredients and whisk to combine.
Heat the pudding mixture over medium low heat until the mixture thickens enough to coat the back of a metal spoon. Stir frequently, making sure to scrape the bottom of the pan to prevent the mixture from sticking and scorching. Don't rush this process, it can take around 8-10 minutes.
While the pudding is cooking, add 6 whole eggs to a separate bowl and make sure to beat them well.
Temper the eggs by slowly mixing in 1/3 cup of hot pudding into the eggs while whisking the eggs constantly as you pour. Continue adding pudding a little at a time until the egg mixture is nearly the same temperature as pudding.
Add the warm egg mixture back into the pot of pudding and cook on low for 2-3 minutes, just to cook the eggs through stirring frequently. Do NOT bring the mixture to the boil.
Once the pudding has cooked for a couple of minutes on low, turn off the burner.
Place a fine mesh strainer or sieve over a clean bowl.
Pour the pudding through the sieve. This ensures a fool proof creamy pudding! And if you happened to scramble any eggs in the process, this ensures no egg bits make it into your final pudding.
Once you have worked all the pudding through the sieve add in a tablespoon of butter and two teaspoons of vanilla to the bowl and mix to combine.
Serve warm or chill the pudding in the fridge.
I think the absolute best way to serve this pudding is chilled, but my family also enjoys it warm. I find the sweetness of the pudding really comes through once chilled. Either way you serve it, once you make your own pudding you will never go back to store-bought pudding mixes!