When I watched Star Trek as a kid, I was amazed by the technology. Talking to the computer, the touch screens, the handheld communicators. We have most of those devices now, without the space travel. Hopefully that will start to change with all the efforts being made by various organizations.
One of the things that always bothered me was the chance for mistakes. A mis-spoken (or mis-heard) command to a computer that didn’t verify things as a human might. The chance to hit the wrong part of the screen as the starship moved. It seemed as though soft buttons would have allowed more mistakes than hard ones. Certainly humans make mistakes with physical switches, but I think I make more mistakes trying to hit a part of the screen in my Tesla than using one of the (few) buttons or wheels to change something. Interestingly enough, my 23 year old decided on a slightly older car because it had more physical buttons and fewer soft ones.
We are human. Frail and faulty. We make mistakes. Some are small (I ran a SELECT query on the wrong database), some are bigger. A mistaken copy paste error sent US$36 million away. That is the type of mistake that could happen to any of us, though hopefully not at this scale of financial loss.
This type of mistake is a main reason why I think DevOps and automated flows for development, testing, and even for production updates are a good idea. This doesn’t prevent human error, but it does serve to limit it and reduce silly mistakes. Often these types of errors are caught when we force someone to work through a bit of a process. An easy and quick process, but still a process.
In the case in the article, you would hope that someone looking to make changes would write an update that can be tested in a second environment before applying to the production blockchain. Perhaps with some idempotent wrapper and a pre-check that verifies the target. That might seem like overkill, but it’s the type of care that most of us take when we know we aren’t going to be the one executing the code. If you submitted a script to a DevOps process, you’d want to be sure the process running your code made the proper decision of whether to run the code or stop because of some error.
We won’t prevent all errors, but a lot of automation and light DevOps process is designed to limit simple, silly human errors because we are tired, distracted, or otherwise unfocused. I am a proponent of having humans design systems and processes, but then letting the computer handle the drudgery of following the process over and over on a regular basis.
Listen to the podcast at Libsyn, Stitcher, Spotify, or iTunes.
2 policies I adopted many years ago were to
1) always use Beg/Try for any DML commands
2) always use individual updates instead of bulk updates and include the previous value of all columns being updated. This way any change can be rolled back
UPDAT TABLE A SET Col1 = 0 WHERE Column B = 1
NON-BLUK (hID = Primary Key for table, X = current value of Col1):
UPDATE TABLEA SET Col1 = 0 WHERE col1 = X and hID = 1
UPDATE TABLEA SET Col1 = 0 WHERE col1 = X and hID = 2
UPDATE TABLEA SET Col1 = 0 WHERE col1 = X and hID = 3