Like many niggling details in grammar, the difference between "good" and "well" is both simple and complex. Basically, "good" is an adjective, while "well" is an adverb, but the usage of these words gets much more complicated than this, thanks to a little detail known as linking verbs. If you've been tormented for saying “I'm good,” you may be pleased to know that this usage is actually correct, and that the difference between these terms is often oversimplified by pedantic individuals.
"Good," like other adjectives, is used to modify a noun, providing more information about it. For example, one could say "Bronwyn's dog is good" or "It's a good house, very solidly built." "Well," acting as an adverb, is used to modify verbs, like this: "he sings well," or "the cat hunts well." When thinking about whether to use "good" or "well" in a sentence, a speaker should think about whether he is describing an action, like playing the piano or hitting a baseball, or an object, like a garden or an anvil.
There is an exception to this simple rule of thumb, however. "Good" can be used in sentences like "I'm good" or "the pizza looks good," because the verbs involved in these sentences are linking verbs, connecting a subject with information about it. A number of words can be used as linking verbs, including "seems," "appears," "looks," "grows," "tastes," "becomes," and the various conjugations of "to be," including "am," "is," "are," "was," and so forth. Some of these words can also be used as action verbs, but when used as linking verbs, they do not imply action, they simply connect subjects and information.
If you're starting to feel confused about how to use "good" and "well" when linking verbs are involved, there is fortunately a very easy way to tell when a verb is being used as a linking verb, and that is to replace it with "am," "is," or "are," as appropriate. If the sentence turns into gobbledygook, the verb is being used as an action verb, in which case "well" is appropriate, but if the sentence still makes sense, the speaker should use "good."
For example, "the pasta looks good" sounds perfectly normal when you replace "looks" with "is" to make "the pasta is good," so "good" is an entirely appropriate word to use. In the sentence "the bunny smelled the grass but decided not to eat any," however, when "smelled" is replaced with "is," the sentence doesn't make sense, so "smelled" is not being used as a linking verb in this case, so someone would say that the bunny smelled the grass "well," not "good."
Many people tend to over-correct when struggling with the usage of "good" and "well," but this isn't necessary if they can remember that "good" goes with nouns and "well" goes with verbs, unless the verbs are being used in a linking capacity.