Recently I was assigned to a project which was already in its midway. It was TDD environment. Everyone was following right principle of Code Unit Test First and Implementation
Testing before implementation is always encouraged. Aside from actually fixing bugs that may have been existing in your software it helps weed out what bits of your code are necessary as an engineer may have the tendency to 'over code'.
What I always tell myself "If i was writing software for a plane auto-pilot, what would I do to make assure myself that that piece of software would never fail?" Would these people doing it in reverse put their family on auto pilot before testing the software? Thinking like this helps give a disciplined approach to software engineering.
Writing the tests first and implementing after ensures that you are writing implementation code that is definitely going to pass the tests. Implementing first and writing the test code after runs the inherent risk that you will have to refactor (sometimes significantly) your implementation code to ensure correct testing coverage, which can become expensive depending on how late those tests are written.
Personal experience, I've seen the best productivity/medium come from developers doing the tests concurrent to the implementation, doing enough up-front to ensure the boundaries of the interface contracts are correctly locked in and test-worthy, leaving tests that would not cause redesign/major refactoring toward the end, but not considering the component complete until a complete set of unit tests were delivered.
If it isn't obvious enough, test-first FTW!