First question to ask is always: Do I need to write some code or I can solve this problem using tools already here?
If you decide to write code, then start to think really hard.
What interface should I provide? The smallest the interface the better; and be aware that any kind of configuration your interface use increase exponentially the size of the interface itself.
Now you should experiment, take your time and be sure that the interface you are providing is the smallest possible, try to see the problem from another point of view, don't be afraid to throw away code (don't write test yet if not for experimental purpose, you don't even have the interface to test) and try to keep everything stateless and pure.
During this process is important to gather feedback from your peers, they may see problem that you don't.
Once you have decided what you are going to code, write it down.
Try to keep everything so simple that test will seems pointless, write those anyway.
Be slow, take your time for thinking, don't be afraid to throw code away.