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.