What do a warning, a comment, a test and your backlog have in common?

#warning This is going to be a nitpicky post.

There was once a developer who marked his code with TODO’s.

// TODO does not handle case X
public void Handle()

// TODO clean this up
var ugly = ...

// TODO re-enable after Y is implemented
// if (bla)
// {
// ...
// }

Another developer used warnings.

#warning still have to write test for this
switch (something)
case a: i = 4; break;
case c: i = 1;
default: throw new InvalidOperationException();

I’m writing this blog post to illustrate subtle but significant differences between four mechanisms that can be used for a shared goal: To mark what still needs to be done.