Please note, these are rules I use and apply. You may want to adopt them in your way. Only you rule your rules, not me :)
Is this waste of money, is this waste of time? No. Quality is priceless.
Programmers keep an eye each other, they work faster, quality of their
work is higher,
the software written is just better than software written by two
separate programmers.
..
So, write the test as you would be somebody else using your code.
Think what you need to use your code for, how do you expect the code
will work, what will be results of using the code?
Write the code from higher level, take a little further look
at the code.
Then write as many tests as you can. Check as many possibilities
of using your code. Compare results of your code to expected
values.
Then write the code. And step by step make more tests working.
Of course do it in pairs
With Cruise Control one can do this automatically!
There are some steps made by IDE authors to help with test-first programming. Some modern programming environments, like: IntelliJ IDEA or Eclipse support test-first. It is for real and you can use it now. Just write code which uses non existing classes, methods, parameters and IDE will make skeletons for you.