Reset
Things tend to go wrong at home exactly when I am away. Murphy's Law, of course. So last week I was on the other side of the Globe, when the IPSEC VPN connection we run from our house to my Mom's apartment went down. We run this VPN link to have a seamless LAN covering both locations, with shared resources like printers and NAS boxes. I logged on to my router remotely and it was fine. But I could not log on to my Mom's router. The DSL link must have been down then, I thought. So I instructed her to call the service provider asking for help.
They reset the DSL modem remotely, "because it has not been reset for a long time". Unfortunately this did not help.
But I was really alarmed with the "because it has not been reset for a long time" statement!
99,9% of us would not even blink at this procedure. But this is not the way things should be. We consider all software buggy. 30 years of personal computing have taught us to do exactly this. Something wrong? Try reset and it should help.
No!
Software should run better with time, not worse. Well written systems should never be restarted. And even if, before the restart, it should be saving the entire runtime state and restore it first thing when it starts again. Well written software adjusts to the environment. It was doing exactly this 20 years ago when hard drive caches were introduced. And it is doing much, much more runtime adjustments today. Most of them are usually lost after a reset.
But on the other hand there are bugs, especially resource leaks. And a reset is a perfect workaround to those leaks. So perfect, both the engineers and the users have learned to use it on a daily basis. Tight investment budgets and go-to-market rush prevent us from doing software right. So really, we get what we deserve. But may be some will try to change that? Those, who are tired with daily resets and unreliable software? Both users (who will refuse to buy crappy software - powered devices and software applications, no matter how "cool" they are) and investors / engineers (who will opt to spend more time, money and effort to deliver software that does not need to be reset)?
I have always been paying attention to software quality. But recently it has become my obsession. With the product we develop at my little startup, we have already exceeded the time and budget by 150%. And combing all the fleas, we are still far from my goal. My vision of how software should work. It takes a lot to change the mindset of a team. Some of them are tired. Some do not understand why we want to deliver something really good. But when anything goes wrong with our application, I want a reset to be the last thing that comes to mind to fix a problem.
I think, in general, there are two kinds of software. One that runs worse with time and the other that runs better with time. And I think the first one will always prevail, no matter how much more expensive and difficult it was to create. In the long run, of course.
So if you plan for the long run, build software that never requires a reset. It will pay off. Ultimately.
They reset the DSL modem remotely, "because it has not been reset for a long time". Unfortunately this did not help.
But I was really alarmed with the "because it has not been reset for a long time" statement!
99,9% of us would not even blink at this procedure. But this is not the way things should be. We consider all software buggy. 30 years of personal computing have taught us to do exactly this. Something wrong? Try reset and it should help.
No!
Software should run better with time, not worse. Well written systems should never be restarted. And even if, before the restart, it should be saving the entire runtime state and restore it first thing when it starts again. Well written software adjusts to the environment. It was doing exactly this 20 years ago when hard drive caches were introduced. And it is doing much, much more runtime adjustments today. Most of them are usually lost after a reset.
But on the other hand there are bugs, especially resource leaks. And a reset is a perfect workaround to those leaks. So perfect, both the engineers and the users have learned to use it on a daily basis. Tight investment budgets and go-to-market rush prevent us from doing software right. So really, we get what we deserve. But may be some will try to change that? Those, who are tired with daily resets and unreliable software? Both users (who will refuse to buy crappy software - powered devices and software applications, no matter how "cool" they are) and investors / engineers (who will opt to spend more time, money and effort to deliver software that does not need to be reset)?
I have always been paying attention to software quality. But recently it has become my obsession. With the product we develop at my little startup, we have already exceeded the time and budget by 150%. And combing all the fleas, we are still far from my goal. My vision of how software should work. It takes a lot to change the mindset of a team. Some of them are tired. Some do not understand why we want to deliver something really good. But when anything goes wrong with our application, I want a reset to be the last thing that comes to mind to fix a problem.
I think, in general, there are two kinds of software. One that runs worse with time and the other that runs better with time. And I think the first one will always prevail, no matter how much more expensive and difficult it was to create. In the long run, of course.
So if you plan for the long run, build software that never requires a reset. It will pay off. Ultimately.
Comments
Post a Comment