4 ms·
I've often said that the hallmark of good engineering is designing your error cases: of the cases where something goes wrong being pleasant and non-disastrous.
by pavpanchekha 15y ago
I've often said that the hallmark of good engineering is designing your error cases: of the cases where something goes wrong being pleasant and non-disastrous. The issue is that optimizing some known quality, even one as subjective as aesthetics, is a lot easier than optimizing unknowns, which is what designing failure cases requires. That's why it's hard, why it requires deep and broad domain knowledge, and why it requires knowing your users. It's hard, really, to point to software or hardware that does this well, but it's easy to point to bad examples, such as the OP. But consider things like undo, version control and versioned file systems; think about TCP's recovery abilities, about the fact that Google 2-factor auth gives you lock-out codes and application-specific passwords, the X~ and #X# files Emacs dumps all over your harddrive (they've saved me more than once), and the recovery page you get when Firefox crashes. Or consider the HTML5 parsing algorithm, character set detection, and Google's spelling suggestions. Each of these required identifying a class of problems and specifically designing in features that protected against them.
Please, when designing a project, think not just about your features, usability, and similar features. They're important, crucial even. But also spend time thinking about what problems users will have. What bugs are you likely to have, what misbehavior of your program will be most damaging? Implement a common format because that'll make debugging and workarounds easier, add a little diagnostic console or log in case your users have a problem you didn't expect, make backups of data you destructively modify, and so on. We all idolize Mac Airs now, for beautifully-designed and slick software. But there's something to be said for hardware and software that works through thick and thin, where there's some workaround or safety measure for every failure.