Count out your graham crackers. You’ll need about 16, but it’s good to have 20 for taste testing purposes.
In a saucepan, off heat, whisk together the sugar, cocoa powder and cornstarch. Whisk in the milk gradually, then whisk in the egg yolk. Whisk until everything is evenly blended.
Put the mixture on the stove over medium heat and cook, whisking constantly, until mixture begins to bubble and thicken. After it starts to boil and thicken, continue boiling and stirring for 1 minute, then remove from heat and let cool slightly.
Stir in the vanilla and butter, then scrape into a bowl. If you need it to cool faster, you can scrape it onto a plate. Cover directly with wax paper or parchment to prevent a skin from forming, then let cool at room temperature for about 20 minutes before transferring to the refrigerator.
Prepare the whipped cream. With an electric mixer, beat the cream until soft peaks just start to form. Beat in the sugar and vanilla and continue beating to stiff peaks.
Set aside around ⅓ of the whipped cream, which will be used as your final top layer.
Lay 8 graham crackers in the bottom of an 8 inch square dish. You should be able to lay 6 squares, but you’ll have to break the other two in half.
Starting in the middle, spread half of the pudding mixture over the crackers leaving about a half inch margin between the crackers and the dish. You’ll have just barely enough. Don’t worry about spreading it perfectly. Sprinkle 2 tablespoons of chocolate over the pudding, then spread about ⅓ of the whipped cream over the chocolate.
Add a second layer of crackers and repeat, spreading with remaining chocolate pudding and sprinkling with more chopped chocolate. Spread another ⅓ of the cream over the chocolate. This layer can be a little messy, so don’t worry about dragging pudding through the cream. You will cover it with the reserved cream.
Spread the reserved whipped cream over the messy layer. Sprinkle more chocolate on top, then cover and chill for at least 6 hours to soften the graham crackers -- preferably 8 hours.