Beware enterprising users...
Several geological ages ago, it seems, I was contracting for a major financial company writing a VB4/Access2 (yep, MANY years back.. 1996 my CV says) reconciliation system which involved users typing in data from an ever-inceasing stack of paper Traveller's Cheque slips and my code trying to make sense of the input, reconciling each record with theoretically matching data from an imported text file and producing a bunch of reports.... mmmm.... Crystal Reports... lovely.
It went live and worked pretty smoothly for a couple of months, then suddenly one day the numbers stopped adding up, dates were going haywire and all-sorts. Journals didn't add up any more and reports on data that shouldn't have changed for weeks had altered dramatically.
By then I was working on another project for a department upstairs, I'd not changed the code for some time and there were no other developers that might have (all the other techies in my old team were writing code for the ominous AS/400 - IIRC, something black and TARDIS-like anyway - standing in the corner) so this was most puzzling. I tested and retested, inputting data and nursing it through the process, running the reconciliation, producing reports and all was fine every time.
The machine it ran on was OK, running repairs on the db file produced nothing scary, no other programs used the database at all, my program didn't even have an 'edit this old record from weeks ago' screen anyway, how on earth was this happening ?
After much head-scratching and somewhat in desperation, I tried to get a handle on what point in the process everything was going awry, I added a function to store record counts and totals of various fields from important tables into another table and had this function run on startup, shutdown and various key points in the workflow.
All worked fine from that point, classic 'add diagnostics, problem goes away' scenario, I was wary of touching anything so left the row counter code in, executed the time-honoured 'walk away slowly backwards' procedure and things were peachy... for a while, then the problems came back as before.
I was called back downstairs to sort things out again, checked my meta-numbers table and was surprised to find that some pretty dramatic changes in record counts were happening between two key points, namely the program closing down and the program starting up.
In that order.
The data was changing when my program wasn't actually running.
Some swift investigation resulted in a confession by one of the more enterprising users that in order to not have to wait until that PC was free, and to save time with pesky stuff like data validation, he was typing his pink slips into a spreadsheet on his own PC, copying it to a floppy disk and using the Access import wizard to insert the data on the application machine.
Of course, this was just MS Access on a local drive so credentials ? - pah - anyone could get at it if they could get their bum on the seat. Local machine, no internet connection, LAN just for printers, super-secure room anyway with all the foreign currency lying around so what's the problem ?
He had reverted to boring old manual input when the sirens went off and kept his head down while I was running around with my hair on fire, but then started being enterprising again, when things had settled down, one would hope with some fixes applied to his process.
He was told in no uncertain terms not to do that again by his manager but I tidied up the new 'DetectEnterprisingUser' functionality and left it in just in case, and added some choice comments to explain why it was doing this; and walked away slowly again.
Several months after that I was called downstairs again, not by a phone call from the users as before, but by my current manager telling me my old manager had most sternly requested my presence at a specific time in his office that afternoon. Curious. I turned up as requested and found him, my old team leader, a suit from Personnel and a stranger waiting for me, all having clearly been there a while already.
It turned out that the stranger was a new contract developer they had hired to make some changes to my system and he had read my 'choice comments', which included the expletive 'c*nt' in close proximity to the christian name of the enterprising user in the explanation about the record counting. He reported me for my potty fingers and it was only my old team leader pleading on my behalf that stopped it being fatal to my contract.
Sheesh... reporting your predecessor for rude comments... that's simply not cricket !!
That same team leader chap once fell foul of the super-secure nature of the Traveller's Cheque room, the door opened by card access and required a card to exit as well as enter. After a particularly fraught evening out, one morning he was at his desk and felt the need to ah, dispel his breakfast. He got up, ran for the door, realised his card was on his desk, made it half way back before decorating the carpet right in the middle of the room, in full view of the entire technical team and a dozen admin workers - a great boss, and still a good friend :)
Holmes icon, because it was an investigation, and that's what I'm reading right now.