What do sending a text, making a phone call, or receiving data from a space shuttle have in common? In each of these cases, noise introduced between the sender and receiver may cause the message received to differ from the message that was sent. A common solution to this problem is the use of error-correcting codes. These codes add redundancy to the message so that if errors are introduced when the message is sent, the receiver can decode the result and still determine the original message. Creating an error-correcting code is not particularly hard. However, creating a good error-correcting code can be a challenge, starting with defining what good means. One tool we can use to evaluate how good a code is is the complete weight enumerator. MacWilliams identity can be used to compute the complete weight enumerator for some codes. In this talk we will discuss MacWilliams identities for codes over fields and abelian groups as well as a new MacWilliams identity for codes over non-abelian groups. No background in coding theory will be assumed.