Design with failure in mind

Whenever you design anything, you should design with failure in mind. What does this mean?

It means that building something, either physical or software etc, you should always design it in a way, that you expect things to go wrong at some point, but why? You’ve build something, why should it ever go wrong? Because things fail, doesn’t matter how awesome you built something, if you don’t assume that it will fail, because at some point it will.

Building software can be easy, but at some point it will fail, people use software in a way, that you didn’t expect, if you expect the user to do an action, but they actually do something else, and it breaks, do you take care of this? Most people don’t, that’s why you should always build things, in a way, that you know it will break.

This can be boring to do, but in the end, it will save you for a lot of time. Because when you find an issue that doesn’t work, and people don’t know why, they will start complain. Tell the user that something went wrong, and if possible, tell them what went wrong. In a way that people understand.

If you do a specific action, where you rely on other services, or tools, or even functions that is important for making your thing work, make sure it’s done, and if not, take another action.

I’ve learned it the hard way, implementing stuff afterwards is hard, and it makes it hard to debug in the beginning, if something doesn’t work, and you assume it should work, you fail because at some point it won’t.

Always check if you get the result you want, it makes life easier.