I think they aren’t.
Unit tests help me to think about what I want exactly from a method (for example). But there are times when I know what method should return me, but very aproximately. For example, there are several acceptable results, but I just do not know what is the best in my case. Unit test will not solve this problem. Even more, if I choose one way from start and create unit test, I may miss a better way, so unit test may suppress my creativity.
This may sounds strange, but think a bit about this. A possible solution in this case is prototyping. Try several approaches without unit tests and the choose the most appropriate. Any other ideas?
UPDATED Jan 28:
I really do write tests first, but sometimes I wonder if this is always good for system architecture. Well, in most cases it is. The basic flow is like that:
1. write a code (for example, controller). And just realize that existing API is insufficient.
2. think a bit about possible extension and make a decision
3. write a test for this new desired method.
4. write a code for this test.
5. review the code and refactor on a “lower level” (rename, extract method, …)
6. after awhile, review API and refactor on a higher level (new interfaces, classes)
I don’t think that this process really suppresses my creativity. Refactoring is a key.
Discussion about this topic at Artima