Sometimes, the best defense is a good offense. Other times, the best offense is a good defense. And if you’re not sure which is which, you’ll never be a true strategic mastermind.

Tina’s co-worker understands that this is true for defensive programming. Always, always, always catch exceptions. That’s a good defense.

Project getProject() {
    Project projectToReturn = null;
    try {
      projectToReturn = new Project();
    } catch (Exception e) {
      Logger.log("could not instantiate Project")
    }
    return projectToReturn;
}

The good offense is not actually doing anything useful with the exception and returning a null. Now the calling code needs to also go on the defense to make sure that they handle that null appropriately.