What is the "non-software" development aspect in your environment that has helped you in making your software more usable, secure, robust, and resilient (apart from it doing its job)?
I will elaborate on my experience. I am a developer in a country where electricity failure is a common place. I worked in a research lab at a local University few years back during summer. I was developing a code to parellize computations for large chemical systems. I had access to a 32 node cluster with a UPS backup. These computations would easily take days to complete. Electricity failure was a routine. So everytime there was an electricity shutdown/failure, i would log in to each of the nodes, save the state of the running processes. This happened for over a week, and then i was too frustrated to perform this task. It made me feel dumb! Slowly i started building in fault tolerance in the code that i was writing. Thus when the processes would come up (when the electricity is available) they would start executing from the point of failure rather than starting over again. Over a period of few weeks i added redundancy in job execution by spawning off multiple background jobs with low priority on commodity(user) machines. At the end of my project, i was very happy to build a software which was resilient to failure (apart from computation which was THE job).
I really thank our government for not providing us with enough electricity. I was thus able to build a software which can react to situations of high failure and in turn learnt a lot :).
I would love to hear your experience.