“It means impossible. Since no engineer is going to admit something is impossible, they use this word instead. When an engineer says something is “non-trivial,” it’s the equivalent of an airline pilot calmly telling you that you might encounter “just a bit of turbulence” as he flies you into a cat 5 hurricane.”
This quote shows both the difference between the engineer and non-engineer’s conception of non-triviality, and their different definitions of impossible (Flying through a hurricane isn’t necessarily impossible, you just really wouldn’t want to do it).
In Understanding Engineers: Feasibility Charles Miller does an excellent job of explaining what engineers (and by association software developers) really, truly mean when we say a problem is “hard” or “Very Hard” or “impossible”. An excellent read, well worth the time for anyone who has been on the receiving end of a bluntly-delivered “that problem is non-trivial” and been left annoyed and confused, wondering “wtf does that mean???”
Alas Charles doesn’t quite explain why engineers would use “trivial” instead of “already solved… in my head”, use “non-trivial” instead of “impossible”, and use “very hard” instead of “not a chance in hell”.
The answer is simple: we don’t want you to panic. Panic is bad.
To the engineer none of these terms actually mean impossible per se, not in the same sense that the entire rest of the world understands “impossible” anyhow.
Rather these terms are gradations of effort, and of work, and of thought and, oddly enough, the amount of practical engineering or development that will be involved in solving the problem.
(Note that if a developer actually says “no, impossible. Totally impossible, can’t be done” and then starts to walk around in small, worried circles that really does mean it can’t be done. In that case you probably ought to leave them alone for a bit to think about it, just in case.)
The rock climbers out there will instantly get this concept - think of this as the developer’s Yosemite Decimal System. The YDS is a scale by which rock climbers rate the difficulty of a climbing route (a “problem”). A 5.1 is a set of carpeted stairs with excellent hand-rails, 5.14 is restricted to baboons, orangutans and mutants. Most climbers would thus accuse a 5.15 of being “impossible, totally impossible”. A few would then up and send it, which of course does absolutely nothing to reduce the problem’s total impossibleness. It remains impossible.
A non-rock climber would look at that same rock wall, hear a climber moan “impossible” and assume that the climber actually means “nope, can’t be done, ever, no sense in even standing about gazing at it, might as well go have a beer” which of course is completely perpendicular to what the climber actually means. Except for the the beer bit. That’s probably still correct.
What the climber is really saying is:
“I’m going to stand here staring at this blank wall for a few hours, doing a strange little slow-motion dance, looking a bit like a mime trying to climb a ladder, while muttering under my breath. Then I’m going to go home and dream about this place. I’m going to wake up, re-christen it ‘my project’, sucker a friend into coming back here to suffer on belay, bash away at it for hours, swear a lot, call it ‘impossible’, curse its name, and come back and do the very same thing again next weekend. Let’s go have a beer.”
So, the next time you hear a developer use one of these terms know that they do so not to confuse but rather to mitigate worry. What they’re really saying is “Let me think about it”.
chris on July 17th 2007 in /dev/random