Dead and outdated code is a stumbling block to upgrading, refactoring, and maintaining any software project, and at worse could become a security vulnerability. As a rule, we want to remove code and dependencies that just don’t belong in the code base anymore; however, it’s not always clear if and when dead code is really dead. Removing “zombie” code can be disastrous if it is still being used in production. We’ll cover common ways to statically identify dead code, and the accompanying pitfalls. We’ll then cover creating and using code tombstones in our project to definitively identify the living dead. Finally, we’ll discuss some best practices to avoid having zombies in your code in the first place!