Preheat your oven to 180°C (350°F).
Grease a baking dish (approximately 20x20 cm or 8x8 inches) with butter or cooking spray.
Cut the stale bread into cubes or tear it into small pieces. Place the bread cubes into the greased baking dish.
In a mixing bowl, whisk together the eggs, sugar, vanilla extract, and ground cinnamon until well combined.
Heat the milk in a saucepan over medium heat until it's warm but not boiling. Remove it from the heat.
Gradually pour the warm milk into the egg mixture while whisking continuously. This will temper the eggs and prevent them from curdling.
If you're using raisins or sultanas, sprinkle them over the bread cubes in the baking dish.
Pour the milk and egg mixture evenly over the bread cubes. Press down on the bread cubes to make sure they soak up the liquid.
Let the bread pudding sit for about 15 minutes to allow the bread to absorb the liquid.
Place the baking dish in the preheated oven and bake for 45 minutes, or until the top is golden brown and the pudding is set. You can test for doneness by inserting a knife into the center; if it comes out clean, the pudding is ready.
While the pudding is baking, you can prepare the optional sauce. In a saucepan, melt the butter over low heat, then stir in the sugar and heavy cream. Cook, stirring constantly, until the sugar has dissolved, and the sauce has thickened slightly. Remove from heat.
Once the bread pudding is done baking, you can serve it warm with the sauce drizzled over the top.Enjoy your delicious homemade bread pudding!