Testing patience

This post is work-related, and is designed to capture something of the madness of what I do for a living (Orwell’s intellectuals passionately arguing about whether the full-stop should go in or outside the closing bracket has nothing on this).

Imagine this. To get an idea all you need be familiar with are the columns in a spreadsheet. So: if column A has an ID that starts with an R (as against the other things it could start with), then multiply column B with Column C (but only if Column C has a number less than a 1000), and add the difference between Column F and Column G (but only if Column F is greater than Column G), then represent as a percentage in Column J (but only if Column J is unpopulated, and the month has 30 days in it).

Now imagine warnings (“validations”) can be set to pop up if one, some, or all of these criteria aren’t met. To test this, you must ensure that the validation has been turned on (otherwise it’s not going to fire, right?) and that the criteria for the validation to fire have been met. So off you go to a screen of validations with tick-boxes (so you can tick the one you want, hmm?). A minor catch is that all the validations are similarly worded and may do something only slightly different to the validation you want to test. For example, you might have a validation that does exactly the same thing as above, except only for months that have 31 days in them. Make sure you get the RIGHT validation (and untick the others), or you’re going to look like a silly Billy (and you don’t want that, do you?)

The validation warning will read something like this: “No percentage written to Column J. Some or all of the criteria have not been qualified, or Column J is previously populated”. Clear, succinct, and to the point. Your boss told you this would be straightforward.

So, to our test data (bullet points, please).

  • ID for Column A: R something or other, say R001. Remember, you will need to test the negative: a serial number starting with something other than an R in this case.
  • Column C has a number less than a thousand (1-999). Again, remember the negative.
  • Column F number = 20 (Column G needs to be less than this). Er… remember the negative (I — probably — won’t say this again).
  • Column G number = 10 (so is less than Column F). See above. Our difference is 10, which will be added to the output of Column B times Column C.
  • Column J (currently) has nothing in it (Err…).

For a quick (negative) hit, you meet all the criteria except for the ID in Column A which you start with a P. You run the test. No validation. Uh? You check the validation page (which you have open in another tab) and, sure enough, your validation’s ticked. You refresh. Still ticked. Hmm. You check you’re in the right environment (you’ve been caught by this before, haven’t you?). You are. You run the test again. Same result. Huh! Well, you could just fail the ticket… but maybe you’re missing something. First, let’s see if you can get the validation to fire at all. You put 1001 in Column C and re-run the test.

Eureka: “No percentage written to Column J. Some or all of the criteria have not been qualified, or Column J is previously populated”. Progress. You can get the validation to fire. It’s not firing on the wrong ID, though, and the ticket says it should. Or does it? It suggests it should. Implies it, anyway. Shit, are you over-thinking this? Err… You talk to your boss.

“Ticket V64, you say. Validation’s not firing when Column A ID starts with something other than an R.”

He looks blank. As well he might. But you sit together and look at the ticket. “What’s the problem?” he asks finally.

“The validation’s not firing when the ID in Column A doesn’t start with an R. I thought it had to start with an R.”

He says, “All IDs start with an R. The ticket’s just stating the position.”

“So the ID’s not relevant at all?” you ask. “The fact the validation didn’t fire on a row with a Column A ID that starts with something other than an R suggests it’s happy with the  data row, right?”

“All IDs start with an R,” he says patiently. “The ticket’s just stating the position.”

“Right.” Pause. “Except I entered an ID that didn’t start with an R.”

“It would be an R in the database,” he says. “So the validation didn’t run because you’d met all the criteria.”

“So what if it isn’t — an R in the database, I mean? What I’m really asking, then, is why wasn’t my non-R ID entered in the database? Since the lack of a validation suggests it processed successfully. Or did it?” Should have checked that.

“Only numbers that start with an R can be entered in that column in the database.” His tone suggests this is patently obvious. “There’s a restriction in place to stop other numbers.”

“Right…” I say dubiously. “So, just be clear, my row of data was entered in the database. Or it wasn’t? I mean it didn’t fire the validation.”

“It might have been,” he said. “But maybe not. If the system sees an ID in Column A in the spreadsheet that doesn’t start with an R, or the column’s blank, it looks for a company name in the row and then a location. If it finds both, it changes the non-R ID to something that begins with an R and enters it in the database. If it can’t find a matching company and location, it rejects it and throws an error-warning.” Pause. “But that’s another validation. Beyond the scope of this ticket.”

“Okay. Right. So I shouldn’t be entering non-R IDs for this test. Sorry, the ticket suggested it mattered. Who wrote the ticket?”

“I did,” he says, smiling.

“Well… good. Excellent. Well, I’ll get on and test the rest of the criteria. I have got the validation to fire, so at least we know it’s working.” I smile gamely.

“Maybe we need more training on this,” he says, standing up. “Not just you,” he assures me; “the team.”


Simply Balls

[I wrote this short story ten years ago — eek! — following a software upgrade]

“All foreign balls are checked by default,” my supervisor told me, “so will go through Checker.”

“Right,” I said. “So we’re not using Editor anymore – ever – at all?” Editor was the old software.

“We can still look at orders on Editor, but we can’t do anything with them. We’re still checking the addresses on white box deliveries, but you won’t have to worry about them because they’ll be going through Tweaker.” Tweaker, another piece of software – not a person.

“Unless,” I said helpfully, “they need their balls checked?”

“If they need their balls checked, they’ll go through Checker, and you’ll tidy up their addresses in Checker.”

“So how will we know if they need their addresses tidied?”

“We’ll get the CLOs” – customer liaison officers – “to put something in the notes in Admin.” Admin, another piece of software.

“We don’t check the foreign balls,” I said; “or we never have done. So do we just ignore them when they show up in Checker?”

“Yes, we do. The overseas department check the foreign balls. You just carry on checking the balls you used to check in Editor.”

This conversation took place after the roll-out of an essential software upgrade. No-one had considered the impact on us, there being bigger fish to frazzle. Fortunately for me, I had a few days holiday coming up. No doubt everything would be sorted out by the time I returned.

A week later, I had the following conversation with my Balls Checking colleague.

“We’ve now got a list of clients who want their balls checking,” my colleague said, “and we’ve also got a list of clients who just need their addresses tweaked. Unfortunately, we’re seeing clients who should just be going through Tweaker coming into Checker. There are also some other clients in Checker we can’t account for.”

I said, “Does it matter if stuff that should only be going through Tweaker comes through to Checker, so long as they have their addresses tidied, and are subsequently sent out? It’s surely far worse the other way around. If they go through Tweaker when they should be coming through Checker, that means we’re not checking their balls. Would I be right in thinking that something that appears on one list shouldn’t appear on the other? That is, if something appears on the Tweaker list, it shouldn’t appear on the Checker list.”

“Well, no,” my colleague pointed out. “If it has to be checked and tweaked, it’s going to be on both lists.”

“I don’t see the point of that,” I said. “If it’s on the Checker list, it means it’s ours, whether or not it needs to be tweaked. The Tweaker list is for the tweakers, so that they know what to tweak and send out. If an order is on the Tweaker list and needs to be checked, the tweaker’s just going to assume it’s on their list because it needs its address tidied prior to being sent out. Why would they think or assume that it needed to be checked?”

“I don’t know anything about that,” said my colleague. “There’s a list of orders that need to be checked, and a list of orders that need to be tweaked. What we’ve been trying to do is establish what should and shouldn’t be coming through Checker.”

“So what about the list that’s produced for the tweakers?”

“That’s a different list. It’s got nothing to do with these lists.”

I discussed the matter further with my supervisor that afternoon.

“Do the CLOs actually know what they’re doing?” I asked.

“In what way?”

“I thought we’d established that orders they wanted to go through Checker got a full tick in Admin, and white box orders got a half tick to send them through Tweaker.”

“We had. Or we thought we had. Unfortunately, we’ve also got some other stuff coming through, which we can’t account for,” he said. “It may just be a rumour, but I think the fluffy pink balls automatically go through Checker.”

I said, “Please tell me you’re just being idly funsome with me.”

“No, I’m absolutely serious. We’ve had trouble with the fluffy pinks, so any order with a fluffy pink will show up in Checker. We think.”

“Are you telling me that I can’t believe what I’m being told in Admin?” I asked. “I can’t assume that an order that isn’t ticked shouldn’t be coming through to Checker.”

“I’m afraid not,” my supervisor said sympathetically. “Not if there’s a fluffy pink in the box.”

The following took place the following day.

“Do you recognise any of these clients?” My colleague had approached, holding a list and a pen.

I looked at the list attentively. “Yes,” I said at length, which was true. “Those have to be tweaked and checked, and the Palmer order, which is extremely fussy, is done by Ian. Not only do they want the right colour combination of balls; they also want them in the right order. They claim it makes them easier to check their end.”

“Right,” said my colleague. “So these orders have always been checked.”

“Well, not always, but probably as long as they’ve been tweaked. They’ve been checked for a while anyway.”

“I didn’t know that,” my colleague said.

“No? Well, historically, there’s always been a line of demarcation between tweakers and checkers, so that if a brown box order went on check – that is, one that wasn’t tweaked – then it was done by us; but, if it had to be tweaked in some way, then it was done by tweakers. But there are far too many tweak orders now for specialist tweakers, so basically they have to be done dumb. If they need anything more than tweaking – i.e., checking – then we have to do them.”

“Right,” he said. “Well, I’ll add them to the list.”

“Excellent,” I said. “Hopefully, we’ll soon have something definitive to work from.”

An hour later.

“I’ve just found another order coming through Checker I’ve never seen before,” my colleague informed me. “I checked it in Admin, and it’s got a full tick.”

“Who’s the CLO?” I asked.

“Jemima someone-or-other,” he said.

“I think she’s new,” I said. “Might be struggling with the software.”

“So she might not know what she’s doing?” he asked. “Wouldn’t she have got some help from someone?”

“She sits next to Penny, so not much, no. The purblind leading the blind. Is there anything about the order that suggests it needs checking as well as tweaking?”

“Well, no. All the balls are the same colour, and they take the same amount every time.”

“So it probably just needs tweaking.” I smiled. “Unless we’ve employed a colour-blind packer.”

“I’ve emailed her,” he said. “I cc-ed you in.”

I checked my email. He had, indeed. “Have you had a reply?” There was no guarantee I’d be included in on the reply.

“No, she’s off until tomorrow,” said he.

“Oh, well,” said I.

Tomorrow came… all too quickly.

“I’ve just received a reply from Jemima,” my colleague said just before lunch. “Apparently, this order’s an exception. The balls are bigger than standard for their type, and all the same colour: therefore, they go through Checker.”

“How’s that an exception?” I asked. “There must be quite a few orders with balls of the same type.”

And the same colour,” he said.

“Right,” I said. “So you’re telling me that we don’t have any other orders of the same type and colour?”

“I don’t mean to be rude,” – my colleague sounded pained – “but you don’t seem to be taking any of this in. The order constitutes a consignment of balls bigger than standard for their type, and all of the same colour. So, yes, it’s an exception.”

“Right,” I said. “So we don’t have any other orders of bigger than standard balls of their type, and all of the same colour? Or did you mean they had to be of that particular type and/or colour?”

My colleague regarded me balefully. He said, “Okay. These are orange balls of type B – though bigger than standard for type – and the consignment has no other balls of either type or colour. This order comes through Checker. If we have a consignment of green balls of type G – though bigger than standard for type – then they too would go through Checker.”

“Hmm. Such consignments probably are quite rare,” I agreed. “Do we know why they come through Checker.”

“No,” my colleague said; “and I don’t really care. There’s not going to be enough of them to worry about. Probably just this one. Anyway, I’ve added it to the list.”

Three hours later, and Checker hardly seemed to be working at all. I approached my supervisor.

“Would I be right in thinking that something has gone slightly askew?” I asked.

My supervisor considered his reply. “I’m not going to be all Soviet and Kremlin with you, John,” he said at length: “the rocket exploded on the launch-pad.”