If you’re a software developer for long enough, you’ll hear certain things throughout your career that almost never, ever, ever turn out to be true. Here’s a partial list of some of the more popular lies and simply wrong things you’ll hear.
- “Every bug fixed will have a unit test demonstrating that it is fixed.”
- “All APIs will have complete and accurate documentation.”
- “We always write a complete spec before beginning the implementation.”
- “The feature set is frozen now.”
- “100% backward compatible!”
- “We have included time for writing tests and debugging on the schedule.”
- “If the code you’re working on has some completely minor and unimportant detail that I personally disagree with, everything will completely break and the world will end.”
- “Remember that time six months ago when I said it would break the world if you did it your way and you gave in and did it my way? We just got a bug from a customer, and it turns out we should have done it your way in the first place. Can you rewrite it that way by Friday? Thanks!”
- “Yes, I tested that code, which doesn’t compile, before I submitted it.”
- “Purify is too expensive.”
- “This error is an unlikely corner case, so we don’t have to handle it.”
….any others? Add yours below. It’s also worth mentioning the following somewhat related topbot lists: worst commenting practices, new Windows API features, and the ever-popular (and accurate!) all software sucks list.
// FIX: this currently seems to work, but we should eventually revisit it
This is the last slip we’re taking to our schedule
“This is _the_ critical time”. Don’t worry, there will always be another “the critical time”.
I think it’s more like “See, if we’d just LISTENED TO ME and provided unit tests for everything, by gum we wouldn’t have any of these bugs!”
“Works on my machine!”
(Scattered around Pittsburgh, several of my former QA managers just twitched violently for no discernible reason.)
If it compiles without errors, it’ll Just Work.
“I’ve determined that this bug should be assigned to your component, mostly because that means it won’t be assigned to _my_ component.”
I know its not my bug.
% cvs upd
P foo.pl
U foo.pl~
U #foo.pl#
U .#foo.pl
U foo.pl.log
U foo.pl.log2
U foo.pl.out