I use this pattern across my codebase for the "critical functionality missing" scenario:
#if DEBUG
#define TODO(msg)
#else
#define TODO(msg) #error msg
#endif
Works like a charm. I've got another PRERELEASE() macro that lets you do an unofficial preview build, but would break an official stable release.