It is said,
Being a programmer is one thing, but being a developer is quite another.
Same thought is valid for being a good developer or a great developer and in my opinion there are some skills and a good practices that makes a difference between the two. Maybe the most important practices of a great developer are the following (in no particular order):
A great developer should be aware of the details.
A great developer keeps, always, the details under control throughout the programming process by maintaining an accurate daily activity log.
A great developer documents his code.
A great developer don’t leave a future programmer guessing at his intentions. A simple, and natural rule is to expect to forget, that’s why great developers always include adequate comments in their code.
A great developer supports and teaches peers.
A great developer helps others learn how to produce great code.