You may be accustomed to Scratch, in which custom blocks's definitions are part of the always-visible scripting area.
In Snap!, we don't show custom blocks' code unless you specifically edit one. There are several reasons for this:
Scratch custom blocks belong to a particular sprite. In Snap!, you can make sprite-local blocks, but the usual thing is that a custom block is available to all sprites. So it doesn't make sense for it to "live" in one sprite's scripting area.
Our idea is that once it's written, using a custom block should be just like using a primitive block. You shouldn't have to know that it is a custom block. In particular, custom blocks can be added to any of the palette categories.
We expect writing custom blocks to be an ordinary, common event. If we showed all custom blocks in the scripting area at once, it would be super cluttered. One purpose of custom blocks is to reduce the size of scripts by replacing commonly used chunks of code with a single block.
You can always see the implementation of a custom block by right-clicking on any copy of the block and choosing "edit."