Good developers know what to do.  Great developers know what not to do.  I also find that great developers have an almost sixth sense about solving problems.  They don’t make a lot of mistakes that take time.  Good developers make mistakes and then learn from them.  Great developers never make the initial mistakes.  But great developers are often situational.  A Great developer in one situation is sometimes only a good one in another.