And added to the good advice Derek gave...
20L tank is a wee bit too big for a baby ball python, so you can clutter it up with fake vines or even just crumpled newspaper to get the "ceiling" covered up and make it more cozy.
You can achieve naturalistic vivarium in a simplified manner. The thing I always consider when decorating my vivs is that I can take everything out and put everything back in at least once a month (I do mine once a week). This allows you to completely clean out your tank from feces and urates. Moving water is really cool, I've tried it before but it presents too many problems when cleaning the tank out so I ditched it.
Here's an old picture of when my ball python was a baby in a 10 gal tank:
With that vivarium - I can take everything out, dump the cypress substrate, wipe the glass down with reptile habitat cleaner, and put new substrate and everything else back in, in under 30 minutes.
And as you can see, everything is cramped in there - with a background that blacks out the glass from the back and hanging vines that blocks the sides and a block of wood that provides "ceiling cover" when she wants to take a drink or transfer from one hide to the other. Gets the baby feeling very secure.
It is heated by a heat mat taped to the outside bottom of the tank with a temperature inside the hide that is sitting on top of the heat mat set at 90. The room temp is 80. Humidity runs around 50-70% with the big water bowl sitting halfway on the heat mat.
I feed my snake in a feed box, not to minimize cage agression (that's a myth), but because I feed live rat - I can't have the rat running around in that set-up pooping all over and finding good hiding spots. So, I feed my snake in a separate container at the same time that I clean out the viv.
Hope this helps.