When writing extensions for Ruby in C or C++, there are 9 common problems that are often left unaddressed. These issues include security, exception safety, thread safety, GC safety, unit testing, inheritance, callbacks, data serialization, and conversion of the API to the "Ruby Way." Many of these are nontrivial problems, but can often be addressed by following some prescribed patterns/idioms. A short introduction to writing C extensions will be given, after which each of these issues will be briefly discussed. A few solutions will be posed to some of the problems. The mechanism used by SWIG to deal with some of these issues will also be touched on, along with a demo of how to use SWIG in an extension. A demo will also be given of the Rice (Ruby Interface for C++ Extensions) library, parts of which are currently in use in production applications.