Alright, you're gonna think I'm looking for something new to slag on - but this really happened.
And
I
get
to
b!tch
about
it.
* * *
Rewind to a several months back. Noddy's webform is only three months late, and it's barely a form. Scratch that - it's barely the idea of a form. Noddy's written up a story for the devs that says basically, "put some text boxes and dropdowns on a web form. Oh, and give them labels, too." No validation, no function - a dead end of a feature that mimics the same old schlock in the rest of our app.
Which is sad, because Noddy has been given a gift - and was blowing it. All the webforms in our app were built with a common engine. A common engine that was built before we thought about UX at all. As a result, all our forms are uniformly terrible. Improving one form meant doing the heavy lifting of overhauling the entire engine.
But not Noddy's form. Noddy got the greenlight to be a standalone new form. Which means Noddy is free to do all the modern UI they want.
And they're replicating the same old schlock.
Runner has noticed this and is trying to browbeat some quality into Noddy's up-till-now lame-@ss feature. Runner's been appointed the guardian of the style guide and there are so many things that need fixing in our forms - they cannot bear seeing the same crap happen all over again.
Our forms have many problems but two of the newly fixable problems are our multiple required indicators and lack of conditional display.
Our forms have two kinds of required indicators (field is required to save, field is required if you want to mark the document as 'finished'). This is bad enough, but is compounded by the fact that we don't have an indicator for fields that are required to submit the form to Nachen.
Mind you, the whole reason you fill out our forms, is to send them to Nachen. And we don't have required indicators on fields that Nachen requires.
Beyond insane.
If we just add more required indicators, we would end up with THREE different required indicators.
Which simply cannot happen. Since whatever solution we come up with could influence other forms, we call a UX huddle to agree on a first step. Runner, Noddy, myself and Ahhh end up in a room and spell out the problem.
Required to save seems like the easiest indicator to lose. It turns out only two fields of data are required to save a form. One is prefilled, and the other is just a date field.
I've seen other forms with this problem and rather than make you read little symbols on the page to see what needs to be done, they frontload some prerequisite fields and don't let you see the rest of the form until you fill them out.
So, let's put the two required to save fields on a mini form before the main form. Fill out the date field and hit "continue" and we'll show you the rest of the form. Then, once you get to the actual form, you can save at any time. *Poof* 1 less required indicator.
We come up with a conditional display of the Nachen indicators that seems good.
The team seems okay with this as a first shot, and Ahhh (true to form) wants to have a wide ranging discussion of how we will come up with a design language for validation going forward. Ahhh is just compelled to make discussions larger and less fruitful - we call a halt for now and I send out the meeting minutes.
From a possible 3 indicators, we're down to 1, with an option to turn on a second. Not bad for an hour meeting.
* * *
Let's skip to a few weeks later. Noddy's demoing the form with the mini form up front and Ihaq is laying in like a buzzsaw. "I've never seen that before. I'd like to have a discussion about this."
When Ihaq says things like this, you can tell they are not pleased. True, this is a new UI element, but Ihaq is the same SME who thought our previous required indicators were for Nachen fields. This is our Subject Matter Expert - who as worked here for years, misinterpreting the standard interface of our App.
There is no better proof we have a UI problem with required fields.
But back to the UI - the SMEs get to weigh in on their field of expertise, but they don't get to design the interface. That's our job. If the SMEs have a specialist objection to the workflow, like they know the user won't have the required data up front, then sure - we'll listen to them and adjust. But if they just don't like the button, tough bounce.
Post showcase, Gumby asks after the UI, "did we test this?" No, I say, this was a decision that came out of UX. I can tell Gumby is still smarting from being called out in the stakeholder meeting, but there's not much to do about it.
Later, Runner, Noddy, Gumby and Ahhh meet with the SMEs about Nachen work - and Ahhh pulls a reversal. They denying playing any part in making the mini form, despite being in our meeting and agreeing to the approach. Despite the fact that progressive disclosure was something Ahhh had suggested in prior meetings.
I'm irritated and dig up the meeting minutes that show our decision to use the form. I don't send it to Gumby, but I show Runner so they know that Ahhh is full of it. Standing up to the SMEs can be hard, and I can see the pressure to please them - but you can't just surrender the role of UI design. SMEs inform the design, they don't draft it. Ihaq doesn't like the progressive disclosure of the mini form - because it is new. Not because it is a real problem, they just were unprepared for it.
Gumby wants us to vet the entire form in a user test - and our new guy, Dash is supposed to put that together. Heck, at some point I was going to be doing it - but Arwafn blew up and put that to rest. Dash would be great - they are a veteran user tester and completely outside of the design.
A designer should not test their own design. Bad things happen if you do.
Somehow, the test doesn't manage to happen. I'm eye-deep in the Arwafn hairball and forget we were even thinking of testing the form.
* * *
So, a few days ago at standup, Ahhh mentions that they are working on a user test. I'm like great! I love user tests - they are awesome. Sure, sometimes they kick your ass, but they are so worth it. Normal run of things back at CorpWorld was invites would go out to the full team to observe - so everyone can learn from the test.
A test has a primary and a second. Primary runs the show and writes up the findings, with final edit. The second is pretty much there to help with the metric ton of work that a good test requires.
A good test should look effortless to the participant, but getting credible task scenarios is not easy. Getting a working prototype to test those scenarios is pretty frickin hard. And notetaking, and analysis, and on and on....
I don't know who is leaping on all of that, but I'm glad that we'll finally get some user testing done at Nerdhaven. Whoo! Heck, if things calm down in a week or so, I might have time to help out.
The next day, I get an email from Ahhh "I can't get the form to load and I've got a user session in a few hours."
I'm headed out the door to pick up the kids (it's my early day) so after I figure out what they are asking I get QA to help Ahhh out.
User session? WTH?
But I'm out the door.
* * *
Day after that, Ahh is talking about the next user test they're setting up, and there's still problems with the form loading. I can't help myself, I fire up IM: User test? Can you forward the webmeeting link? I'd love to observe? I back off a bit. Or are you recording?
Ahh takes awhile to respond. All the while I'm thinking: How is it that they are holding tests and haven't emailed the team about it. No one else on the team even knew this was happening.
This is weird. Somebody should be helping Ahhh with the test. Not only is this the first user test that Ahhh is doing for NerdHaven - this is the first user test that's been done at NerdHaven. Period.
How is this being done by one person? And our newest UXer, to boot?
Ahh responds with "I'm recording. I'll get you the link." The implication is, I'll get back to you. Now, I don't need to observe in realtime - observers don't get to ask questions normally anyway - too much pressure on the participant. But the tone was bothersome.
Ahhh was at the point of having participants in sessions and nobody had heard a thing. Asked for access, Ahhh has basically said I'll tell you when it's over.
Later that day, Dash sits back from their desk - and snorts.
"I tried to get a hold of Product and they say they are busy because - get this - they are observing Ahh's user test."
WHAT? Okay, people on your team - whose interface you are testing (Dash's prototype is also being tested) have not been allowed to observe - but Product is sitting in.
Nice.
I have a quick client call and end up debriefing with the account Rep on how it went. The Rep's like "No problem, it went fine. I was on that user study with Ahhh earlier and that was a little rough, but it all works out."
I can't help myself - "Can you send me the link to the recording?"
That's sh!tty of me, but Ahhh said they'd send the recording, and they haven't. And really, the recording is made by the rep, so I'm jumping past the middle man.
The rep - in an act of karmic payback - totally forgets to send me the link. They are good people, and I believe this is so - but it is right that I should not get this from some back ally maneuver.
I should get it from Ahhh - directly. And Ahhh is pointedly not giving me, or any other UXer access to their tests.
* * *
I cannot stress enough how bizarre this is. Designers can get pretty prickly about their pet designs, but any designer worth even half a hoot knows you are going to get better design with collaboration.
More to the point, any designer worth considerably less than that knows their own bias is going to hang them if they don't have regular contact with opinions outside their personal bubble.
Ahhh makes much of their history in UX. They have an MBA, they've been doing user research for almost twenty years. I have heard this ad nauseam pretty much every time our team is asked to introduce themselves to some guest. I get it, Ahhh. I do. You are not wet behind the ears when it comes to UX. So why the F*&k are you doing user research in secret?
The ENTIRE POINT of research is to share findings - and while convincing people with research is nigh impossible - it is absolutely impossible if your audience thinks your research came from some black box process.
Erika Hall gave a talk on design research that just blew my mind - not because it's some previously unthought hunk of wisdom, but because it perfectly reveals wisdom that is hiding in plain sight. Research that comes from the mountaintop in the hands of some sage is trivial to dismiss. Sages...amIright? Research that tells a story can resonate. Stories you participate in are far more compelling than stories that are told to you.
If you give a crap about research, watch Erika make it make sense - or buy her book - or both - because I'm going to get back to griping about work.
* * *
So...
Whisky Tango Foxtrot, right? I do not go to the boss, because this is not a discussion that needs management. I haven't confronted Ahhh about the situation, I'm merely asked and not gotten much of a response. I've vowed to be direct about things at this job, and I'm going to do this if it burns every bridge around - because dammit, direct communication should not be a last resort.
I'm neck deep in some Arwafn stuff, when Ahhh gives her standup update as, "I have user testing session today."
What?? Still no upfront notice? Okay, we'll talk, you and I.
I call Ahhh out at standup and ask to be able to observe the test. Ahhh's on the video conference, in front of the entire team. Rather than look petty in front of all of us, they hedge, "If you want to... I guess..."
I do. And I make it known again, that I do. I corner Ahhh on IM and ask them for the web conference link, and book a room on our office to invite the entire UX team.
Ahhh becomes very prickly over IM when I mention that I'm grabbing a room.
"WHO is going to be attending?"
I am upfront to the max. I'll send you a list of the attendees and everyone in the room will understand that we are *observing* not questioning or interfering. We know the drill.
I'm starting to get the sense that Ahhh is afraid they will have some higher up observing them, and they are all kinds of on guard. Which I would understand if we were back in CorpWorld, but this is NerdHaven - we don't do that kind of bullsh!t here. I'm not ambushing you by videoconference, jeezus.
Most of our client contacts are managed by Reps, who maintain client relationships far better than anyone on our team could - so I ask who Ahhh's Rep is on the test.
"Does it matter?" is Ahhs response.
Well, yes - actually. I'd like to invite them to the room I'm booking for the other observers - in case they want to be there.
A lot of Reps do all their conferences from their desk, but some find value in being in a room of people who are also on the call. I'm amazed this has not occurred to Ahhh, but I spell this out.
They icily give me the name of their Rep and sign off.
Well...
So, now I've got a conference room with Runner, Heater, Dash, and the Rep, and we're finally going to observe the test. Irritation aside, I'm actually excited, because tests are exciting. Real users, doing stuff.
w00t!
The session starts up, and Ahhh - twenty years of UX/research etc - is H-O-R-R-I-B-L-E. I don't know any other way to say it. I mean, typically if you have a test, you have scenarios with test data that the participant uses to attempt each task. There are success criteria/ fail criteria. There's a notetaker, there's...
Ahh has nothing. They have the live system and a participant, sure, but "Hey, try to fill out this form" is not a valid set of instructions. Our users - like most users - are truly bad at making up a set of data to fill an ill defined scenario. I'd actually say our users are worse than most, because our users are highly trained, detail oriented, and used to working in incredibly complex environments.
They sweat every detail and anything out of place will have them derailed and talking about bogus data for twenty minutes. They - as a rule - do not make up data. They want to know details before they proceed.
Ahhh has started a 'test' by loading up the mini form and saying 'have at it.'
'Oh, and tell me what you think of what you're seeing....'
The participant is looking at the mini form which is asking for a specific date. They are like 'you want me to make up a date?'
Ahhh is like 'oh sure'
So the participant types in the current date and hits the button to go to the rest of the form.
Ahhh does not ask them what information they would start the task with, nor have they supplied any. They don't ask why they chose today's date, if that would be representative, or where they would get a real date if this were an actual scenario.
What Ahhh does ask about - is the mini form. 'What did you think of that - not seeing the rest of the form until after you put in the date?'
The participant is confused 'uh, it was fine.'
Ahhh asks about this a few more times, phrasing the question differently each time. I'm looking over at Dash like what the...? until I get it.
Ahhh doesn't like the mini form - and they are really hoping that the participant will find fault with it. When that doesn't happen, Ahhh gives them a few more chances, in hopes of hearing what they want to hear.
Which is RULE NUMBER ONE as to why you don't test designs you've had a hand in making if you have any way of avoiding it.
I'm shaking my head when Ahhh asks about a piece of form UI that they designed - and believe is crucial to the workflow. "What do you think of that?'
The participant is confused. They hadn't noticed Ahhh's pet piece of UI until now. 'uh, I dunno.'
Ahhh repeats the question, gets a similar response - then tells the participant what the UI element is and what it is trying to do.
At this point, I'm about to roll my eyes when I catch Dash shaking their head. This is another thing you just DO NOT DO in a user test - if you have any way at all of avoiding it. You do not tell the participant what the interface is, or what it is doing. You let them tell you what they think it is doing. This way you can learn if if it's intuitive or not. As soon as you tell them the answer, you've lost the chance of learning more about the participant's point of view.
Now, there are lots of research techniques for lots of different situations, but this is a user test. The participant's unadulterated behavior is the entire point of the exercise. They may falter, but you do not give them assistance until you've learned what their perspective was without assistance.
Ahhh wants their pet UI validated by the test, and they cannot stop themselves from interfering. They do this repeatedly until Dash and I are absolutely disgusted.
There are no success or fail criteria, no test scenario, so the participant gets to the full form and basically stops doing anything and waits for more information. Ahh pokes them a bit by asking for their thoughts about the form, what they are thinking - typical UX probing techniques. But there is no task, so this is just an airy, off the cuff discussion.
This is not a test. This is a walk in the woods.
"What do you see?"
I see trees. I like trees...
The entire session is just a colossal waste of resources and time. I've worked hard to get access to see this so I can learn more about our users - and all I've learned is that Ahhh is really, seriously bad at testing.
A lot of what Ahhh did in the session would have been fine if it was just an informative interview - "hey, tell us about this" but this was set up to be a test - more to the point - this is being *represented to the organization as a test* and it was nothing of the sort. I'm not confident that the organization is ripe to receive test findings yet, but if they were to get a report based on this load of... crap - I'm not sure what would be worse: accepting it at face value, or tearing into the method.
* * *
And I want to be clear - the mini form is not a design I'm terribly fond of. This is not about pride of ownership - if the participant had trouble with the mini form, I'd cheerfully bin it and move on. Never mind the fact that Ahhh had suggested progressive disclosure like the mini form to solve our validation issues to begin with - then dropped it like it was leprous as soon as Ihaq came out against it.
Ahhh's behavior has me seriously questioning Ahhh's professional integrity. For all appearances, it looks from the outside like Ahhh has kept the UX team outside of their research, while they have been - evidently - seeing what they want to see.
There is no doubt in my mind what Ahhh's conclusions will be at the end of their 'tests.' They will reject the mini-form and completely validate their pet UI element.
And that is just sad. Because that means NerdHaven's first round of user testing has been performed by someone who cannot be trusted to do user research.
And now, having discovered this problem. We are left with the problem of what we are going to do about it.
Showing posts with label Bad UI. Show all posts
Showing posts with label Bad UI. Show all posts
Sunday, October 25, 2015
Friday, May 22, 2015
Derailment, part III
Continued from Part II
I literally go from the airport, to Gumby's office, and thence to G's house to watch basketball. I'm absolutely shredded and a long weekend away from it all could not be better timed.
Hoops with the gang is sacred. I know next to nothing about basketball, but the gang puts up with me anyway. We eat a lot, drink a lot and loaf a lot - which is good for your mental state.
And my mental state needed a helping hand. I'd booked my PTO back when the West Virginia trip was not a threat - then the trip was moved to be right on top of Hoops.
Not cool. I ride out the weekend and soak up the camaraderie. Then I slouch back home to deal with Arwafn.
First there's the anxiety tag: Nerdhaven, like any business, has factions - and the loudest faction at present is the SMEs. The SMEs are frontline staff, up to their eyes in subject matter expertise, but also expected to perform a slew of customer contact, sales & support.
Since they have real jobs, they're not deeply plugged into what goes on back at Nerdhaven, and a lot of the work that our UX team does seems (to them, at least) to come from outer space. There are a lot of reasons for this: distance, iterative design, and a long history of unsatisfactory dealings with UX.
We don't build exactly what they ask for. Largely because every request out of the SMEs starts with a solution. They are smart people, and they know what they want.
Being in UX, we know that any solution causes more problems - and the trick is to look for root causes before you "just build what they ask for." It doesn't mean that UX folks have the answers (lord knows we don't) but our approach is to get more data to see if we can gain enough insight to make a 'big win' kind of solution.
The SMEs don't have time to wait for that kind of thing. They need answers yesterday - and are confident that their chosen approach will begin paying off immediately. They may be right - but one of the things we hear from our end users is classic alert fatigue: the users have more warnings then they have time to respond to. And a lot of the requests from SMEs amount to 'gimme a new alert option.'
Its difficult, and frequently frustrating for both UX and the SMEs and I don't see a good way out of it.
* * *
With that bit of background, you can appreciate the amount of anxiety tag that is ripping through the SMEs after the launch of Arwafn. They've done demos of the report in front of clients. They've described its many features and clients have oooohed and aaaaaaahed. And now the product has been flipped on for their clients and the result is a big, wet, thud.
And it's the SME on the horn or in the room with the client having to take the abuse, not me. Nobody in UX is on the phone with a baffled customer trying to explain why their numbers don't add up. Historically, the SMEs have to run with whatever features make it out of UX and they quickly share the skinny on what they've seen so they can go into client contact forewarned and forearmed.
I'm eventually cc'ed on a series of messages between the SMEs "Did you hear? This filter is a failure across the board!!" and that SME tells the next one, and the next - and soon you have a whirlwind of anxiety making its way to the higher ups.
The higher ups have seen this movie - and they rapidly direct their power on various minions who are ordered to bring them clarity about what the hell is going on. One of the higher ups is Gumby, new to Nerdhaven and that means I'm getting pulled into their office and other meetings to explain everything I know in detail.
I spell it out over and over again. I state my mistakes and assessment of where the product is at the moment. I spell out the issue with TURN codes and list out a half dozen other things that could be made to work better.
Then I do it again in front of the the execs. I have to go before the Wizard, who is mighty, but never really says much. I live in mortal terror of having to go before MGM, who is mightier still, but those fears are thankfully not realized.
Airing the TURN issue in front of this crowd means we are going to fix the issue. HockeyOne will be happy, Ajax will be relieved, and our client's data will at last be made whole.
And the exec level folks will make our lives an unending hell until all of this is done.
Product is leaving the company - completely unrelated to this situation, they just got a VP gig elsewhere, so this 'fix the Arwafn' effort is going to need a point person.
Absolutely no one volunteers. So, after a loooooong pause, Gumby raises a hand.
As the newest manager at Nerdhaven, Gumby has a free pass in the situation. They had nothing to do with what has happened up until now. Their role is enthusiastically endorsed by a roomful of cowards.
* * *
The boss is in this up to their neck, and UX is now on the hook in a larger sense. Gumby has to prevail.
And Nerdhaven has to fix Arwafn. All of it.
I literally go from the airport, to Gumby's office, and thence to G's house to watch basketball. I'm absolutely shredded and a long weekend away from it all could not be better timed.
Hoops with the gang is sacred. I know next to nothing about basketball, but the gang puts up with me anyway. We eat a lot, drink a lot and loaf a lot - which is good for your mental state.
And my mental state needed a helping hand. I'd booked my PTO back when the West Virginia trip was not a threat - then the trip was moved to be right on top of Hoops.
Not cool. I ride out the weekend and soak up the camaraderie. Then I slouch back home to deal with Arwafn.
First there's the anxiety tag: Nerdhaven, like any business, has factions - and the loudest faction at present is the SMEs. The SMEs are frontline staff, up to their eyes in subject matter expertise, but also expected to perform a slew of customer contact, sales & support.
Since they have real jobs, they're not deeply plugged into what goes on back at Nerdhaven, and a lot of the work that our UX team does seems (to them, at least) to come from outer space. There are a lot of reasons for this: distance, iterative design, and a long history of unsatisfactory dealings with UX.
We don't build exactly what they ask for. Largely because every request out of the SMEs starts with a solution. They are smart people, and they know what they want.
Being in UX, we know that any solution causes more problems - and the trick is to look for root causes before you "just build what they ask for." It doesn't mean that UX folks have the answers (lord knows we don't) but our approach is to get more data to see if we can gain enough insight to make a 'big win' kind of solution.
The SMEs don't have time to wait for that kind of thing. They need answers yesterday - and are confident that their chosen approach will begin paying off immediately. They may be right - but one of the things we hear from our end users is classic alert fatigue: the users have more warnings then they have time to respond to. And a lot of the requests from SMEs amount to 'gimme a new alert option.'
Its difficult, and frequently frustrating for both UX and the SMEs and I don't see a good way out of it.
* * *
With that bit of background, you can appreciate the amount of anxiety tag that is ripping through the SMEs after the launch of Arwafn. They've done demos of the report in front of clients. They've described its many features and clients have oooohed and aaaaaaahed. And now the product has been flipped on for their clients and the result is a big, wet, thud.
And it's the SME on the horn or in the room with the client having to take the abuse, not me. Nobody in UX is on the phone with a baffled customer trying to explain why their numbers don't add up. Historically, the SMEs have to run with whatever features make it out of UX and they quickly share the skinny on what they've seen so they can go into client contact forewarned and forearmed.
I'm eventually cc'ed on a series of messages between the SMEs "Did you hear? This filter is a failure across the board!!" and that SME tells the next one, and the next - and soon you have a whirlwind of anxiety making its way to the higher ups.
The higher ups have seen this movie - and they rapidly direct their power on various minions who are ordered to bring them clarity about what the hell is going on. One of the higher ups is Gumby, new to Nerdhaven and that means I'm getting pulled into their office and other meetings to explain everything I know in detail.
I spell it out over and over again. I state my mistakes and assessment of where the product is at the moment. I spell out the issue with TURN codes and list out a half dozen other things that could be made to work better.
Then I do it again in front of the the execs. I have to go before the Wizard, who is mighty, but never really says much. I live in mortal terror of having to go before MGM, who is mightier still, but those fears are thankfully not realized.
Airing the TURN issue in front of this crowd means we are going to fix the issue. HockeyOne will be happy, Ajax will be relieved, and our client's data will at last be made whole.
And the exec level folks will make our lives an unending hell until all of this is done.
Product is leaving the company - completely unrelated to this situation, they just got a VP gig elsewhere, so this 'fix the Arwafn' effort is going to need a point person.
Absolutely no one volunteers. So, after a loooooong pause, Gumby raises a hand.
As the newest manager at Nerdhaven, Gumby has a free pass in the situation. They had nothing to do with what has happened up until now. Their role is enthusiastically endorsed by a roomful of cowards.
* * *
The boss is in this up to their neck, and UX is now on the hook in a larger sense. Gumby has to prevail.
And Nerdhaven has to fix Arwafn. All of it.
Thursday, May 21, 2015
Derailment, part II
Continuing from Part I
Arwafn is coming undone. And for a reason I first started hearing about a month after I came to Nerdhaven.
One of the base data elements of Arwafn is something I'll call TURN. TURN is a series of codes that factor into the key datapoint of the Arwafn report. Calling it the lynchpin of the report would not be overstating it. The customer sends Nerdhaven TURN codes and we group them, count them, and make them look beautiful.
Classically, a TURN code is a single character value. Like T, or U, or R, or N. And Nerdhaven's process is built on this standard.
Single character come in, single character go into database. Arwafn is happy.
But what if TURN comes in as multiple characters?
Instead of T, let's say it comes in as T<*
Then what?
This question had been posed and answered for me by Noddy. Noddy had raised an issue about multichar TURN codes in their usual manner: Airily, arrogantly "raising a concern" via email to a slew of senior staff. Runner and I were cc'ed so we would be aware of his brilliance.
Look at me!
That's Noddy, and the truth is - its hurts their message, since the resulting eyeroll drowns out the content. But the issue sounded serious.
According to Noddy, when a multi-character TURN code came in to a system I'll call Dragon, it would get truncated. Dragon would take just the first character and bin everything else.
T<* would become simply, T.
And that didn't sound so bad, and really wasn't bad, until new values were added to the TURN code like NO and TDD. These were values that were distinct from T, U, R, and N.
But if Noddy was right, Dragon would take an incoming code like TDD and convert it to T. NO would become N.
And that really would be a problem. Because now our system would be adulterating client data - and that is not cool. Arwafn would be inaccurate, and other features in our product would be wrong as well. TURN is deep, deep in the works. And Noddy wants us to know he's found this problem.
I remember Heater responding to Noddy's initial email. Heater had a few stories written up to deal with this issue - they'd never been given priority before, but maybe now the time was ri-
Dragonman kills that noise almost immediately. Dragonman is lead dev on the Dragon system, and his response took the wind out of Noddy & Heater.
Here's a count of all the incoming TURNs we've received in the past two months: out of millions of messages, we're only gettting a few hundred N values. Even if all of them were really 'NO' values, its a negligible amount of data.
In other words, Dragonman was saying this is not a problem.
Heater lives in fear of Dragonman, and Noddy never follows up on anything. So that was enough to make them drop the issue.
I'd remember talking with UXDir and they were frustrated that we weren't fixing this issue. "We shouldn't treat this like a tech support call! Who cares if there isn't a lot of volume now? We should make this right, so we future proof the system!"
I also remember talking to Product & suggesting that supporting longer TURN values might be a selling point for our product. Product said we didn't have any data to support that it would be worth it. Between that and the technical pushback, the idea was buried.
Yeah, we truncated the TURN codes, but it didn't matter enough to warrant allocating dev resources to fix it.
* * *
That answer became the party line: We truncate, but so what?
Months later, even I used that line to shoot down Suit when they tried to grandstand on the discovery that OMG, we're truncating TURN values!
Suit was engaging in that same chicken little exercise where "lookee everybody! I found a problem (and gosh, aren't I smart?)" and I was in no mood. I forwarded Dragonman's original response on TURN to Suit and cc'ed about everyone. This is a crap issue, leave it alone.
I felt proud of myself, too. I knew what was going on under the hood with TURN. It's no big deal.
* * *
Rewind to about five months ago. I'm on the phone with Goldeagle, one of our beta testers, and they are looking at their version of Arwafn and they are confused.
The numbers for this item just look wrong. It's way too high, and I think the count is off.
I'd seen this before, but it had always been a setting problem. The user had misconfigured things and broke the output. But a quick check showed that Goldeagle had the settings right. The numbers were just wrong. I told them I would figure out what the problem was.
This was weeks after Arwafn went live to over 100 customers. And this was definitely not good.
I asked BigDog to give me the under the hood data for Goldeagle's report. I do the math and everything adds up to the same crappy numbers Goldeagle was wondering about. And I notice a pattern in the data: the calculation is based on the occurrence of T's out of the total of T's, U's, and R's.
And there are no R's at all.
Which is odd, because Arwafn is report that spans a year or more. In the course of a year, for this particular datapoint - there should be at least an R here and there.
I check again. None.
As all the data I'm looking at is in the Guardian database, I wonder if we're screwing things up somewhere upstream: in Dragon, maybe.
But Dragon doesn't hold data, they take incoming values and slot them into our Guardian db. True, Dragon would be the place where we are truncating TURN codes, but truncating still passes something and I was seeing no Rs at all. Was there a process that was eating the Rs?
And why was it only for this one record? Arwafn has dozens of record lines, each crossing columns with other values. And only this one combination was showing this total lack of Rs.
What the hell?
At this point, I trot over to the other side of the building and visit HockeyOne. They are a code slinger, an expert on incoming client data, and they're one of the folks that are always asking me painful questions when I'm showcasing new features.
HockeyOne lives and breathes in another system that is upstream of Dragon. It's called Lizard. And Lizard is very low level stuff, grabbing up massive volumes of text files sent by our clients and flinging them into the jaws of Dragon.
HockeyOne is a guru of all things Lizard and I start asking them if they have any idea what could be happening to my missing Rs. HockeyOne looks at me with a sort of amused smile and says "have you looked at the KIM fields?"
No. KIM fields are not TURN fields, why the hell would I look there?
"Because if the TURN is too long to go into Dragon, we'll append it to the end of a KIM field and pass a blank TURN value."
Shut
the
front
door.
HockeyOne goes on to explain the problem. Lizard wants to pass all TURN values to Dragon, but it will get an error if it tries to pass a TURN that is longer than 1 character, since Dragon will only take a 1 char TURN code.
Rather than give up, Lizard will look for a neighboring field, KIM, and append the TURN value to it so the data has somewhere to go in Dragon. Lizard doesn't truncate the TURN, it puts it elswhere and passes nothing at all to the TURN code in Dragon.
I start to sweat. "Can you run a query to show me what kinds of extra noise is getting tacked on to Goldeagle's KIM field?"
HockeyOne says "sure!" and writes up byzantine query in a few minutes. They show me a list of values that are in the KIM field, but supposedly came in as values in TURN:
Whiskey Tango Foxtrot? I've never heard of these values coming across in TURN. I ask HockeyOne to make sure - absolutely sure - these values exist in the client's messages to our system. HockeyOne goes deep into the weeds to show me - that these are real values Goldeagle is sending to us AND that they are sending to as as TURN codes.
I ask for samples that prove this, so I can show them to others. HockeyOne has just demonstrated that we are NOT truncating TURN codes, we are moving them elsewhere. Which to downstream features like Arwafn, is essentially the same thing as deleting them, since Arwafn is looking at the TURN field, which ends up blank every time one of these multicharacter values bounces off Dragon's front door.
HockeyOne is excited. They've always hated the fact that Lizard was shoving data in weird places, and they've asked repeatedly for Dragon to take longer values and store them. They give me all kinds of examples of what is going on in Goldeagle's incoming messages - and I find front end examples of this data mangling so I can sell this as a real issue.
Then I get back with Goldeagle, and ask them what is going on with these other codes. What do they mean? and why are they being sent in a field that should only have 6 discrete values?
Goldeagle tells me that their system uses those other values to track TURN as well as an entirely different dimension called BLES. In their system, the code BLES = R and also has some additional meaning as well. UB is also the equivalent of R.
Which means I've found my missing R values, they are being sent as multichar values in TURN, which means Lizard isn't putting them into our db as TURN values, because Dragon won't let them.
Which means Arwafn is pretty much screwed at this point, because Arwafn only sees TURN values in the Guardian database. If multichar TURN values aren't landing in Guardian's TURN field, they might as well not exist - because to Arwafn - they don't.
I ask HockeyOne how often Lizard would move TURN values into KIM and send a blank value in TURN to Dragon. I mean, I'd always been told we truncate.
HockeyOne is pretty sure that we do this for a majority of our sites. Which means that Goldeagle has a lot of company. And a lot of our Arwafn customers are going to be missing data.
I flip out and go to Data and Heater and declare that the sky is falling. Data tells me that what I am saying is inaccurate. "We truncate."
I show them the messages. "No, we don't. At least not for this site."
My equivocation doesn't help my case. I may have just found an outlier. I email a wider group and provoke an exasperated response from Ajax, who is the sheriff of these kinds of data issues. Ajax is a supremely competent person and they tell me that I'm describing the situation wrong. That any moving of data into different fields would require changes that they would be aware of. And they have seen no such changes.
I take this as "murph, you are full of sh!t" and as I have only one site as a datapoint, I can't press much further. I get more data by hitting up OneTwentyEight to run HockeyOne's byzantine query against all of my beta sites.
More long TURN values show up, noisier ones like "NEG" and "POS" and a slew of things that look like equations. I run this past Data and Sprint and start to get some traction.
Sprint (who is awesome) runs ahead and sorts out a list of what chunks of work would need to be done to get these longer values into our system correctly.
We get Dragonman into the fold and a reasonable solution is proposed. Dragon will create a path for longer values to make it into Guardian. We draft up a list of work to present to Product.
We're on the verge of pitching this plan when all hell breaks lose on Arwafn.
I'm in West Virginia getting an alarmed email message from Product asking what the hell is going on with Arwafn. I'm wrung out from a long day of client visits yet completely unable to sleep - and so I lie in bed and type an epic mea culpa with my thumbs. We didn't go under the hood enough when we were in beta. This is over and above the TURN problem, but this starts the crazy train rolling.
I fly back home and drive straight to the office from the airport and see Gumby and Atlas clearly having a strategy meeting. I make myself available and soon we are in stage one of responding to an epic managerial sh!tshow.
The executives have heard that Arwafn isn't all it was cracked up to be and they are demanding answers.
The execs are flipping out about filters on the report not working - and they are pissed.
And at this point, they have no idea about the issues with TURN.
Its about to get a whole lot worse.
Arwafn is coming undone. And for a reason I first started hearing about a month after I came to Nerdhaven.
One of the base data elements of Arwafn is something I'll call TURN. TURN is a series of codes that factor into the key datapoint of the Arwafn report. Calling it the lynchpin of the report would not be overstating it. The customer sends Nerdhaven TURN codes and we group them, count them, and make them look beautiful.
Classically, a TURN code is a single character value. Like T, or U, or R, or N. And Nerdhaven's process is built on this standard.
Single character come in, single character go into database. Arwafn is happy.
But what if TURN comes in as multiple characters?
Instead of T, let's say it comes in as T<*
Then what?
This question had been posed and answered for me by Noddy. Noddy had raised an issue about multichar TURN codes in their usual manner: Airily, arrogantly "raising a concern" via email to a slew of senior staff. Runner and I were cc'ed so we would be aware of his brilliance.
Look at me!
That's Noddy, and the truth is - its hurts their message, since the resulting eyeroll drowns out the content. But the issue sounded serious.
According to Noddy, when a multi-character TURN code came in to a system I'll call Dragon, it would get truncated. Dragon would take just the first character and bin everything else.
T<* would become simply, T.
And that didn't sound so bad, and really wasn't bad, until new values were added to the TURN code like NO and TDD. These were values that were distinct from T, U, R, and N.
But if Noddy was right, Dragon would take an incoming code like TDD and convert it to T. NO would become N.
And that really would be a problem. Because now our system would be adulterating client data - and that is not cool. Arwafn would be inaccurate, and other features in our product would be wrong as well. TURN is deep, deep in the works. And Noddy wants us to know he's found this problem.
I remember Heater responding to Noddy's initial email. Heater had a few stories written up to deal with this issue - they'd never been given priority before, but maybe now the time was ri-
Dragonman kills that noise almost immediately. Dragonman is lead dev on the Dragon system, and his response took the wind out of Noddy & Heater.
Here's a count of all the incoming TURNs we've received in the past two months: out of millions of messages, we're only gettting a few hundred N values. Even if all of them were really 'NO' values, its a negligible amount of data.
In other words, Dragonman was saying this is not a problem.
Heater lives in fear of Dragonman, and Noddy never follows up on anything. So that was enough to make them drop the issue.
I'd remember talking with UXDir and they were frustrated that we weren't fixing this issue. "We shouldn't treat this like a tech support call! Who cares if there isn't a lot of volume now? We should make this right, so we future proof the system!"
I also remember talking to Product & suggesting that supporting longer TURN values might be a selling point for our product. Product said we didn't have any data to support that it would be worth it. Between that and the technical pushback, the idea was buried.
Yeah, we truncated the TURN codes, but it didn't matter enough to warrant allocating dev resources to fix it.
* * *
That answer became the party line: We truncate, but so what?
Months later, even I used that line to shoot down Suit when they tried to grandstand on the discovery that OMG, we're truncating TURN values!
Suit was engaging in that same chicken little exercise where "lookee everybody! I found a problem (and gosh, aren't I smart?)" and I was in no mood. I forwarded Dragonman's original response on TURN to Suit and cc'ed about everyone. This is a crap issue, leave it alone.
I felt proud of myself, too. I knew what was going on under the hood with TURN. It's no big deal.
* * *
Rewind to about five months ago. I'm on the phone with Goldeagle, one of our beta testers, and they are looking at their version of Arwafn and they are confused.
The numbers for this item just look wrong. It's way too high, and I think the count is off.
I'd seen this before, but it had always been a setting problem. The user had misconfigured things and broke the output. But a quick check showed that Goldeagle had the settings right. The numbers were just wrong. I told them I would figure out what the problem was.
This was weeks after Arwafn went live to over 100 customers. And this was definitely not good.
I asked BigDog to give me the under the hood data for Goldeagle's report. I do the math and everything adds up to the same crappy numbers Goldeagle was wondering about. And I notice a pattern in the data: the calculation is based on the occurrence of T's out of the total of T's, U's, and R's.
And there are no R's at all.
Which is odd, because Arwafn is report that spans a year or more. In the course of a year, for this particular datapoint - there should be at least an R here and there.
I check again. None.
As all the data I'm looking at is in the Guardian database, I wonder if we're screwing things up somewhere upstream: in Dragon, maybe.
But Dragon doesn't hold data, they take incoming values and slot them into our Guardian db. True, Dragon would be the place where we are truncating TURN codes, but truncating still passes something and I was seeing no Rs at all. Was there a process that was eating the Rs?
And why was it only for this one record? Arwafn has dozens of record lines, each crossing columns with other values. And only this one combination was showing this total lack of Rs.
What the hell?
At this point, I trot over to the other side of the building and visit HockeyOne. They are a code slinger, an expert on incoming client data, and they're one of the folks that are always asking me painful questions when I'm showcasing new features.
HockeyOne lives and breathes in another system that is upstream of Dragon. It's called Lizard. And Lizard is very low level stuff, grabbing up massive volumes of text files sent by our clients and flinging them into the jaws of Dragon.
HockeyOne is a guru of all things Lizard and I start asking them if they have any idea what could be happening to my missing Rs. HockeyOne looks at me with a sort of amused smile and says "have you looked at the KIM fields?"
No. KIM fields are not TURN fields, why the hell would I look there?
"Because if the TURN is too long to go into Dragon, we'll append it to the end of a KIM field and pass a blank TURN value."
Shut
the
front
door.
HockeyOne goes on to explain the problem. Lizard wants to pass all TURN values to Dragon, but it will get an error if it tries to pass a TURN that is longer than 1 character, since Dragon will only take a 1 char TURN code.
Rather than give up, Lizard will look for a neighboring field, KIM, and append the TURN value to it so the data has somewhere to go in Dragon. Lizard doesn't truncate the TURN, it puts it elswhere and passes nothing at all to the TURN code in Dragon.
I start to sweat. "Can you run a query to show me what kinds of extra noise is getting tacked on to Goldeagle's KIM field?"
HockeyOne says "sure!" and writes up byzantine query in a few minutes. They show me a list of values that are in the KIM field, but supposedly came in as values in TURN:
- BLES
- UB
- CLAB
Whiskey Tango Foxtrot? I've never heard of these values coming across in TURN. I ask HockeyOne to make sure - absolutely sure - these values exist in the client's messages to our system. HockeyOne goes deep into the weeds to show me - that these are real values Goldeagle is sending to us AND that they are sending to as as TURN codes.
I ask for samples that prove this, so I can show them to others. HockeyOne has just demonstrated that we are NOT truncating TURN codes, we are moving them elsewhere. Which to downstream features like Arwafn, is essentially the same thing as deleting them, since Arwafn is looking at the TURN field, which ends up blank every time one of these multicharacter values bounces off Dragon's front door.
HockeyOne is excited. They've always hated the fact that Lizard was shoving data in weird places, and they've asked repeatedly for Dragon to take longer values and store them. They give me all kinds of examples of what is going on in Goldeagle's incoming messages - and I find front end examples of this data mangling so I can sell this as a real issue.
Then I get back with Goldeagle, and ask them what is going on with these other codes. What do they mean? and why are they being sent in a field that should only have 6 discrete values?
Goldeagle tells me that their system uses those other values to track TURN as well as an entirely different dimension called BLES. In their system, the code BLES = R and also has some additional meaning as well. UB is also the equivalent of R.
Which means I've found my missing R values, they are being sent as multichar values in TURN, which means Lizard isn't putting them into our db as TURN values, because Dragon won't let them.
Which means Arwafn is pretty much screwed at this point, because Arwafn only sees TURN values in the Guardian database. If multichar TURN values aren't landing in Guardian's TURN field, they might as well not exist - because to Arwafn - they don't.
I ask HockeyOne how often Lizard would move TURN values into KIM and send a blank value in TURN to Dragon. I mean, I'd always been told we truncate.
HockeyOne is pretty sure that we do this for a majority of our sites. Which means that Goldeagle has a lot of company. And a lot of our Arwafn customers are going to be missing data.
I flip out and go to Data and Heater and declare that the sky is falling. Data tells me that what I am saying is inaccurate. "We truncate."
I show them the messages. "No, we don't. At least not for this site."
My equivocation doesn't help my case. I may have just found an outlier. I email a wider group and provoke an exasperated response from Ajax, who is the sheriff of these kinds of data issues. Ajax is a supremely competent person and they tell me that I'm describing the situation wrong. That any moving of data into different fields would require changes that they would be aware of. And they have seen no such changes.
I take this as "murph, you are full of sh!t" and as I have only one site as a datapoint, I can't press much further. I get more data by hitting up OneTwentyEight to run HockeyOne's byzantine query against all of my beta sites.
More long TURN values show up, noisier ones like "NEG" and "POS" and a slew of things that look like equations. I run this past Data and Sprint and start to get some traction.
Sprint (who is awesome) runs ahead and sorts out a list of what chunks of work would need to be done to get these longer values into our system correctly.
We get Dragonman into the fold and a reasonable solution is proposed. Dragon will create a path for longer values to make it into Guardian. We draft up a list of work to present to Product.
We're on the verge of pitching this plan when all hell breaks lose on Arwafn.
I'm in West Virginia getting an alarmed email message from Product asking what the hell is going on with Arwafn. I'm wrung out from a long day of client visits yet completely unable to sleep - and so I lie in bed and type an epic mea culpa with my thumbs. We didn't go under the hood enough when we were in beta. This is over and above the TURN problem, but this starts the crazy train rolling.
I fly back home and drive straight to the office from the airport and see Gumby and Atlas clearly having a strategy meeting. I make myself available and soon we are in stage one of responding to an epic managerial sh!tshow.
The executives have heard that Arwafn isn't all it was cracked up to be and they are demanding answers.
The execs are flipping out about filters on the report not working - and they are pissed.
And at this point, they have no idea about the issues with TURN.
Its about to get a whole lot worse.
Wednesday, April 29, 2015
Derailment, part I
All at once, work is exhilarating and terrible.
Arwafn is rolling out to the world, and while the internal reviews are good - the only score that counts is the one you get from the end users.
The early reports are the worst. Not because they are bad, but because they usually represent incomplete opinions, initial reactions - delight in something new. They are passed along by hopeful co-workers who want to believe the same thing I do: that it has worked. That our customers are pleased with what we've done.
Somehow, I always manage to fall for this. I supposed to be dispassionate, but after a year of working on the project, I want success. I want happy customers.
And so I flatter myself to think that this time, we did it right.
And then the second round of reviews roll in.
Second round is usually polite, deferential even. "Hey, I'm wondering about this bit here..."
By the third round, you know you have problems, and you start looking for patterns. This is not a drill. You'll need to fix this.
Bin the ego and lean into this, because it's going to hurt.
There is no worse feeling in UX than watching a customer delight in seeing what they wanted to see - and then watch them realize their mistake.
Oh...I guess that isn't working.
* * *
The flaw in Arwafn that managed to make it all the way into production is the most maddening of all. Arwafn relies on customer supplied data - in the form of a data feed.
Data flows from a client's system and flows into Arwafn. Arwafn turns the tidal wave of data into an intelligible grid and allows the user to manipulate it in several ways. We've checked the design against the industry standards, we've verified that the added functionality was wanted by the customers - we've set up beta testers with their live data in Arwafn and let them play with it to get their responses.
And we've had QA try to beat it to death with everything short of a tire iron.
Arwafn came through all that. The board was green.
But we'd missed something - something that was admittedly pretty hard to quantify, but something that we could have noticed earlier.
The client data feeds are crap.
We were like engineers building a colossal aqueduct across miles of countryside and then aiming it at a dry lake.
Or, more accurately, a bog.
Some customers follow the agreed on specification for supplying the data and - for them - all is well. But for a still to be determined group of customers, they send us garbage - and for them, Arwafn is smelling pretty foul.
And it's no good pointing the finger back at our clients. We told them Arwafn was a new feature - we did not tell them it might work if your data isn't godawful.
Nor did we design the report to degrade gracefully. That principle I began learning with regards to crap browsers ages ago was noticeably absent when I baked out the stories to build this report.
It's a basic idea - and yet I'm re-learning it for the umpteenth time:
Okay, it works when A, B and C are present. What if I take away A?
Easy. It looks like it's still working - but isn't.
What if I take away B?
Same thing.
And so on. Any of those questions getting some real thought would have resulted in what NerdHaven is now rapidly deploying to the field. Switches to enable the functionality dependent on A.
Don't have A? We'll shut that off for you.
No B? We'll turn that off, too.
The rest will still work.
That's how it should have been designed from the get go, but in my naiveté thought "Of course, they'll all be sending us this information. How could they not?"
And they're not. Or rather, I wish they just weren't - that would have been easy to spot.
When we did beta sites, no data would have resulted in obvious failures. But that didn't happen. We had data flowing into our UI, and the dependent features worked as expected.
Did we ask users to go through our report line by line to ensure accuracy?
We did not.
Did we ask our internal experts to crawl around under the hood of our beta sites?
We did not.
All of this, every new expression of the problem, slams home into whatever professional pride I'd managed to save up. Three weeks ago, Runner and I were heroes. Now, I'm being forwarded emails from our SMEs where they are describing Arwafn's failings in scathing terms. I'd have hoped I would have been included in those messages when they were sent, but I get them secondhand. After they've been routed through management.
Atlas has been unfazed by this - they point out we've had data issues in the past, and the scope of the issue is being overblown. I feel genuinely ill. Atlas and Gumby finished up my performance reviews before this all blew up. I came out really well in their eyes. I was proud.
And now this. The folks who sang my praises are now being hauled in front of the executive leadership team.
And there is something else. Something that goes beyond a customer sending us crap data.
Something I'd heard about and went after.... just way too late.
Arwafn is rolling out to the world, and while the internal reviews are good - the only score that counts is the one you get from the end users.
The early reports are the worst. Not because they are bad, but because they usually represent incomplete opinions, initial reactions - delight in something new. They are passed along by hopeful co-workers who want to believe the same thing I do: that it has worked. That our customers are pleased with what we've done.
Somehow, I always manage to fall for this. I supposed to be dispassionate, but after a year of working on the project, I want success. I want happy customers.
And so I flatter myself to think that this time, we did it right.
And then the second round of reviews roll in.
Second round is usually polite, deferential even. "Hey, I'm wondering about this bit here..."
By the third round, you know you have problems, and you start looking for patterns. This is not a drill. You'll need to fix this.
Bin the ego and lean into this, because it's going to hurt.
"Customer has some questions about this filter. It doesn't seem to work"
"...numbers aren't adding up. They want to know why..."Third, round - the co-workers have stopped being nice. They want to know what the problem is. And how those problems managed to make it through QA and beta testing.
There is no worse feeling in UX than watching a customer delight in seeing what they wanted to see - and then watch them realize their mistake.
Oh...I guess that isn't working.
* * *
The flaw in Arwafn that managed to make it all the way into production is the most maddening of all. Arwafn relies on customer supplied data - in the form of a data feed.
Data flows from a client's system and flows into Arwafn. Arwafn turns the tidal wave of data into an intelligible grid and allows the user to manipulate it in several ways. We've checked the design against the industry standards, we've verified that the added functionality was wanted by the customers - we've set up beta testers with their live data in Arwafn and let them play with it to get their responses.
And we've had QA try to beat it to death with everything short of a tire iron.
Arwafn came through all that. The board was green.
But we'd missed something - something that was admittedly pretty hard to quantify, but something that we could have noticed earlier.
The client data feeds are crap.
We were like engineers building a colossal aqueduct across miles of countryside and then aiming it at a dry lake.
Or, more accurately, a bog.
Some customers follow the agreed on specification for supplying the data and - for them - all is well. But for a still to be determined group of customers, they send us garbage - and for them, Arwafn is smelling pretty foul.
And it's no good pointing the finger back at our clients. We told them Arwafn was a new feature - we did not tell them it might work if your data isn't godawful.
Nor did we design the report to degrade gracefully. That principle I began learning with regards to crap browsers ages ago was noticeably absent when I baked out the stories to build this report.
It's a basic idea - and yet I'm re-learning it for the umpteenth time:
Okay, it works when A, B and C are present. What if I take away A?
Easy. It looks like it's still working - but isn't.
What if I take away B?
Same thing.
And so on. Any of those questions getting some real thought would have resulted in what NerdHaven is now rapidly deploying to the field. Switches to enable the functionality dependent on A.
Don't have A? We'll shut that off for you.
No B? We'll turn that off, too.
The rest will still work.
That's how it should have been designed from the get go, but in my naiveté thought "Of course, they'll all be sending us this information. How could they not?"
And they're not. Or rather, I wish they just weren't - that would have been easy to spot.
When we did beta sites, no data would have resulted in obvious failures. But that didn't happen. We had data flowing into our UI, and the dependent features worked as expected.
Did we ask users to go through our report line by line to ensure accuracy?
We did not.
Did we ask our internal experts to crawl around under the hood of our beta sites?
We did not.
All of this, every new expression of the problem, slams home into whatever professional pride I'd managed to save up. Three weeks ago, Runner and I were heroes. Now, I'm being forwarded emails from our SMEs where they are describing Arwafn's failings in scathing terms. I'd have hoped I would have been included in those messages when they were sent, but I get them secondhand. After they've been routed through management.
Atlas has been unfazed by this - they point out we've had data issues in the past, and the scope of the issue is being overblown. I feel genuinely ill. Atlas and Gumby finished up my performance reviews before this all blew up. I came out really well in their eyes. I was proud.
And now this. The folks who sang my praises are now being hauled in front of the executive leadership team.
And there is something else. Something that goes beyond a customer sending us crap data.
Something I'd heard about and went after.... just way too late.
Labels:
Bad customer service,
Bad UI,
Being a dork,
Gobsmacked,
Growing the hell up,
UX
Friday, March 28, 2014
Accent on the 'We'
Okay, Great Grandpa George is gonna have to wait.
I'm gonna let go with some sh!t.
I'm gonna let go with some sh!t.
And I want to start this off by saying that my current job is - by far - the best job I have ever had. Challenging work, a noble cause, outstanding UX support, and free coffee.
I'd also like to say I've been there long enough to say this isn't a case of being in love with the honeymoon.
I work on a team stocked with rockstars. These are people worth going to the mat for.
My UX role is backed up by management. I own the problem, study it, design a solution - and then my devs build it.
Note the curious absence of corporate bullsh!t
As I said, It's a killer UX job.
But I am now going to hurl a co-worker under the bus.
...because they so effing deserve it.
Back when I interviewed for this job, the only sub-awesome bit was the UX guy. A veteran designer, but clearly somebody who thought an awful lot of themselves.
This post is about them.
Let's call them Noddy.
Over two months ago, the UX director called us into a room and asked each of us to take one of the many projects on Product's to-do list. Immediately after doing this, they informed me that I would be working on a report with a funny name.
The UX director has a way of doing this. I think it's their way of cutting the crap.
Fair enough. At the time, it's not like I would have known enough to make an informed choice - so they chose for me.
UXDir then drove the point home by asking "What do you know about [A Report With A Funny Name]?"
Having decided to be honest at this job, I said, "If I think about it awhile, I might be able to spell it. ARWAFN."
UXDir grinned.
Okay, we're all friends here.
The rest of the UX team got their marching orders. Noddy got a pair of reports, Sprint and WatchMeType already had serious project work - which they kept, and Runner got the dashboard that held all the reports.
Work these problems.
So, off we went. And I spent a pornographic amount of time learning about Arwafn. What it is, what it does, why people use it, how people use it.
In all former lives, this luxury of time was unheard of. You need to be done two weeks ago. Go.
At Nerdhaven, so long as the devs had stuff do, you could take the time you needed to solve your problem.
Awesome!
We all plunged into our assignments and started ramping up.
In the meantime, Noddy was still keeping our devs busy by giving them features and fixes so they had stuff to do - AND they had to work their reports.
Sprint and the Professor kept their devs working on their project work.
All was well.
I started writing up things for our devs to do, a lot of Arwafn was stuff people had been asking for for ages, so writing requirements for it was a lot like transcribing our customer's broken dreams.
For the love of God, give us an Arwafn that works!
Doesn't take a genius to write specs for that feature.
1) Make an Arwafn report that works.
2) Also, make it not suck.
I write these up - give it to the devs, aaaaand - they pause.
They hem. They haw.
The existing Arwafn is not in our code base.
Ramping up for my Arwafn work will take time. They will do it, but all my work is the same to them: Stuff they cannot start now.
The Devs are hungry for work, and my stuff doesn't help them. Runner's still ramping up to make stuff, Noddy's stuff is all they have.
And... Noddy's stuff is pretty thin gruel.
I mean, we work in two week sprints, so you don't give a dev a slab of work that takes more than fourteen days. But still...
Noddy writes up stuff like "add a value to a dropdown menu," or "change this text label." These are things that need to be done, but if I was writing up the work, I'd do a bunch in an afternoon and move on to real work.
I'm sure the devs think of them the same way. Developing even simple things takes longer than you'd think - particularly if you do it well, and our Devs are awesome. So, I can't help but think they are uninspired by the work they are getting.
But Noddy's the only one giving them stuff they can do, and they're on two other projects. Runner and I need to step up.
Runner connects with our Subject Matter Experts, and starts getting a list of things that need to get better in report-land. This is something I'm bad at as a noob. I have all kinds of research materials at my disposal, my first inclination is to use them - not schedule a conference call.
Runner does the right thing - they get the SME's on the phone and Noddy shows us the ropes on Nerdhaven's version of virtual meetings.
Aside: Virtual meetings suuuuuuuuuck.
But Noddy shows us how to record our sessions so we don't miss stuff, and facilitates the introductions to the SMEs and generally gets us rolling. I spend the entire call waiting for someone to talk about Arwafn, and I don't think anyone did.
Afterwords, Runner reviews the recording and writes up a summary/partial transcript with timestamps. At the time we're both looking for guidance for what we should be doing and Runner's wondering if they're wasting their time with the transcript. They send it to me and Noddy for review and I forward my edits.
Noddy never forwards any edits. To Noddy, this is a waste of time.
I believe this is not a waste of time.
We had a session full of good info, but all of it was stored in our fragmented memories - and a video recording.
Months from now, when someone asks what we came up with in the meeting, we'll all have forgotten the call and we'll be left with the video.
A two hour video.
PRO TIP: You cannot skim video.
If we wanted to know what was in that file, it would take 2 hours. And if we didn't write anything down when we watched it, we'd have the same problem a month later.
This, I learned, from Sensei.
Sensei wrote up notes on some conference calls that saved me a ton of time. A summary I can skim and learn "This two hour video is all about reports." If I want more, I can read in detail, or (last resort) watch the video.
Moral: Write the damn notes. If you never find a use for them, someone will.
Also: Thanks, Sensei.
Anyway, our Devs are starving for work. Our team lead, BigDog, is trying to be patient, but wants us to give his devs work.
Soon.
I write up more stuff for Arwafn. Because it's what I've been told to do. The other UX folks are going to land stuff soon, and after those are done - the devs can take my stuff.
Noddy lands a few more appetizers, but nothing resembling real work. The devs sigh, but when all you have is fritos, you eat the fritos.
Fast forward a sprint.
We're reviewing work for the devs and I proudly call up my specs for more Arwafn stuff. BigDog is straining to be nice, but they can't eat Arwafn yet. I've got a seven course meal of inedible.
I feel like I've let the BigDog down. I go to UXDir and ask if there are things I can give our devs to work on that they can do right now. They aren't on our goal list, but there are literally a *ton* of things we could improve in our UI.
UXDir is polite, but firm. "No."
Noddy is no help. This time around, they don't even have appetizers.
What we end up with is pretty much a typo correction: Remove Reports 1 & 2.
What we end up with is pretty much a typo correction: Remove Reports 1 & 2.
Dead simple features. Not even features, really. Delete some things. Whoo...
Dev's gotta eat...
So, we're deleting Reports 1 & 2. Maybe a hour of code time for each. Twice that to make sure nothing else got broken in the process.
But it's a joke of an iteration. Devs are meeting to figure out how to spool up for Arwafn work and a bunch of other things we have in the pipeline - but when we show our clients what we've been doing lately, we should expect a yawn.
At Nerdhaven, we do Agile - and Agile means you stand in front of your work and show your clients what you've been up to. When you land big slabs of awesome, you and your team look awesome.
When you take a bow in front of a heap of nothing - you and your team look stupid.
Agile is about forcing that realization upon people and using it as motivation.
We don't want to look stupid, ergo, we will get our sh!t together.
We don't want to look stupid, ergo, we will get our sh!t together.
Yesterday, we took our bow in front of nothing. Noddy was the MC, and tried to put the best spin on it they could. "We'll have you out of here in two minutes, end to end."
Noddy shows the clients that - in the past two weeks - a room of highly-paid professionals has succeeded in deleting two reports.
And then things go wrong. And not in the way you'd think they would. Our SMEs are on the conference call asking why in the hell we've deleted Reports 1 & 2.
Noddy's ready with the pat answer, "Reports 1 & 2 have been replaced by newer reports and are no longer needed."
I vaguely remember this, and something about having never removed the old reports. We were just fixing this. Why was this a question?
I'm almost relieved no one is giving us the business about the scant offerings, but the SMEs aren't done.
"Reports 1 & 2 have functionality that do not exist in the newer reports. Why did you get rid of them?"
Noddy mentions the earlier meeting with the SMEs about reports. "We'd agreed we could get rid of these reports. But if you need them back, we can certainly roll back the changes."
QA weighs in - Reports 1 & 2 have some benchmarks that are unique.
This is news to Noddy.
This is news to me - I paid no attention to these stories. I'm the Arwafn guy. I know nothing about Reports 1 & 2.
All three UXers in the room look dumbfounded.
In front of the clients.
Awesome.
Noddy assures everyone that the SMEs had agreed to this change, but we can revisit the decision.
We end the meeting promising to follow up with the SMEs.
Back in the room. BigDog has had it. He gives Noddy an earful "I can accept that the reports need to come back, I can accept that we made a mistake. What I can't accept is that we're at showcase and DON'T KNOW WHY WE DID THIS WORK?"
There is no argument. BigDog is completely right. We work up ways to check on this sort of thing. The SMEs have changed their minds since we talked - and now they want their report back. We should be ready to confront them with evidence of their reversal. We should not sit silent while they ask why we did what they asked.
Product shows up and catches the tail end of BigDog's rant. Product is clearly displeased that the SMEs are pointing us in different directions.
Product is clear: Sort this out.
Later that day. Runner and I are hashing out what happened. Runner points out that removing Reports 1 & 2 was their feature, but Noddy pushed it to the devs. Runner is just sick that people think they pushed bad work.
Runner had some doubts about it, but Noddy said it was ready. So it went.
It was a simple task: Remove Reports 1 & 2. Not like there was a lot to review.
But Runner's pointing out there was a whole meeting about those reports. And it was recorded. And Runner transcribed it.
The SMEs asking questions today has Runner remembering that we were supposed to migrate stuff out of Reports 1 & 2 before we blew them away.
Runner's worried. BigDog is pissed - and BigDog knows this feature was written by Runner. And we all should have caught this, but Noddy shouldn't have given Runner's story to the devs.
I tell Runner I'll talk to BigDog. If this story comes from Runner, it's going to sound like Runner's shirking blame. Runner's not like that, but they don't want soak up all the fail on this.
I talk to BigDog and lay it out. This is a UX fail, not a dev fail - but Noddy moved somebody else's work without knowing it was ready. We should have stopped them, but no way this is Runner's thing.
BigDog nods like I'm telling him something he already knows.
Today.
I'm rolling in around noon - little e was sick - and I meet Noddy in the hall.
They're like "That call with the SME's on the reports, that was recorded?" Or words to that effect. I was out of it. But it was odd that they were asking about this, first thing, in the hall.
I'm like, "Yeah. We recorded it."
Noddy starts talking about it being a two hour recording, and grumbling about how hard it would be to listen to the whole thing. They said something like they'd started to, but it was just too much of a pain...
I kill that noise.
"You could just read the transcript." I am so glad I talked with Runner yesterday. "Runner wrote the whole thing up and sent it around for edits, remember?" I bet you don't.
Noddy leaves and I hit my desk.
BigDog is on me soon as I get my coat off. He wants to know the details on the Report discussion we had with the SMEs.
This is a thing.
I find the transcript, CTRL-F for the report names.
It is dead obvious that the SMEs are right. The transcript has them asking us to move the features out of Reports 1 & 2 and afterwards we can delete them.
Five seconds to the answer.
I spend five minutes scrubbing to the matching part of the video file to listen and make certain.
Noddy told them they'd agreed to remove the Reports.
He was mistaken, or he lied.
I give the information to BigDog who begins digging into it immediately.
The day is a blur of catching up from missing the morning, but finally we arrive at the moment that made me write this.
I'm talking to BigDog after a long meeting with Runner. Noddy's talking to one of the SMEs on the phone.
He's saying "Well, we had a new BA."
I'm like: No way I heard that right.
BigDog and I are cross talking about something funny. BigDog is either hilarious or fascinating on pretty much any subject he wants to be.
I'm trying to keep up with him, but I keep hearing Noddy's cross talk.
Noddy is blaming Runner.
I sit straight up and look right at Noddy, but it has no effect. Noddy wraps it up and before I can think to say anything, BigDog is all over Noddy.
"I heard you talking to the SME, and you said some things that were not true."
BigDog's been tracking the conversation longer than I have and he's going after what Noddy told the SMEs in our showcase.
Noddy starts out with his "its in a two hour recording-"
BigDog takes him out at the knees. "I've read the transcript. I listened to the 20 minutes where you were discussing these reports."
Noddy keeps weaving, shifts to saying it was Runner's story.
BigDog calls up the audit trail. "You pushed it to 'ready for dev.' There's your name, right there."
And finally, Noddy shifts to the position he should have started with - shared blame.
"We missed it."
Which is just another floor down in Noddy's house of bullsh!t, but closer to a professional truth. UX gave Dev specs that should not have been coded.
Which is just another floor down in Noddy's house of bullsh!t, but closer to a professional truth. UX gave Dev specs that should not have been coded.
At this point, I should pile on with BigDog, stick a fork in Noddy.
But I don't.
BigDog did the right thing, the hard thing. He stuck it to Noddy over the BS line to the SMEs.
About pretending it was all on Runner.
I did the easy thing. Said something magnanimous about making sure any new features pushed to dev have been agreed on by UX. But that's shit. Noddy was part of a mistake the team had to eat. Instead of owning up to that, he tried to lie his way out of it, then blame it on Runner.
He's a weasel.
And there was a right thing to say right then and I didn't.
Which is why I'm writing this post. This post is my promise into the void that I will not let this slide.
Noddy and I are going to discuss this - and I am going to say what's on my mind.
My team is a good one and they deserve better.
From Noddy - and from me.
Labels:
Bad UI,
Being a dork,
Growing the hell up,
Just desserts
Tuesday, September 10, 2013
Ryan vs. Bryan
All I Do is B!tch About Telcos
...but only because they so totally suck.
I've tried to take the larger view and say that - yes, in fairness to AT&T - the number of outages I've experienced while paying for their service has been very close to zero.
I'm sure the legion of engineers who work tirelessly at all hours of the night would like to be acknowledged. And they should be. Modern data networks are a hell of a thing. And the one I've been paying for has been there for me with (so far as I remember) total uptime.
And they somehow even find time to route all my data to the DEA. Impressive.
But the squeaky wheel principle applies here. I pay for a utility, I expect it to work. If it doesn't work - why am I paying for it?
24/7 uptime is Par.
So those noble and nameless AT&T engineers need to understand something:
* * *
I'll illustrate this with two personal contacts with AT&T.
And then I'll supplement it with web and phone follow ups.
First, the people. I'll call them Ryan and Bryan.
Bryan arrived on my doorstop unannounced. Bryan was in sales, so if I had known he was coming, I wouldn't have answered the door. But he sung the praises of AT&T uverse with the passion of a new convert to the faith. He smiled. He was funny. And though I believed he was totally full of it - I let him talk, took his materials, and then did my own research on prices and packages.
Ryan on the other hand, was expected.
Ryan's first contact with me was over the phone. He was calling me to let me know he'd be late for the appointment with me.
To appreciate how bad a first impression this is, you'd need to understand some things:
Awesome. I could have been working and getting paid until just before lunchtime, but hey, I'm at your service, Ryan. Whatever makes your day easier.
Back to Bryan. Weeks ago, Bryan promised to return after our initial meeting and did (although I was out) so he came back a few days later and I signed up. Bryan assured me that my free installation would cover multiple TVs (even though I only needed one) and that the installer would run Cat-5 anywhere it needed to go in my house. "Plus, your DVR will be wireless, so you can move it around your house if you decide to add a TV or rearrange your house."
Fan-tastic!
When I reacted badly to the $50 activation fee, Bryan whipped out some rebate forms to offset the charges. "Just fill these out and give them to your installer and you'll be set."
See? That's a guy trying right there. Exeunt Bryan.
*Cheers*
Let's return to Ryan.
*Boo!*
Yes, Ryan has royally screwed up first impressions. He does arrive an hour after his phone call, a full 45 minutes after my install window was supposed to end. He's in a truck, wearing a baseball cap and looks irritated.
I point him to all the particulars in my house. The TV case (which I'd helpfully cleared out) the phone setup and where the lines hit my wireless router.
I asked him about running wire to the finished side of the basement. Ryan looked at me like I was talking Greek. "Just the one TV, right?"
Uh, I was told you could run wire to other rooms in my house.
"I'll run it anywhere you need it to connect to the one TV."
Now, I know sales guys are full of it - and sales guys from AT&T doubly so. So this wasn't much of a shock. I'd asked because it would be nice, but once I confirmed that wiring for uverse TV was just running Cat-5, I knew I could do it (with help). I ask Ryan about the gateway they'll be installing and if I'll be able to keep my current router (which I love). He says he'll try, but that he typically doesn't install a device inside the house and hasn't had much luck when he tried in the past.
*Sigh*
I point out what I currently have for Ethernet and DSL. Ryan scratches his head figuring out where the wires needed to go and I get out of his way. In about an hour he's drilling a hole in the side of my house and telling me he's going to run a new wire from the pole to my house.
"Don't worry, though. In seven to ten days, some guys will come by and bury the cable. I'll leave plenty of slack in case you need to mow."
*Sigh*
So, now there's a black cable snaking around my back yard - with "caution" flags tied to it every few feet so it's extra visible and unsightly.
And then Ryan shows up with the hardware and starts hooking up the TV. He unpacks an impressively compact device that I think might be the wireless DVR.
Is that the wireless DVR?
"It's the DVR, yeah."
This is AT&T, so I ask again to make sure I heard that omission correctly.
It's a wireless DVR?
"No. It's wired to Ethernet."
I was told I'd get a wireless DVR.
"We do wireless DVRs only if we have major issues running the wires in the house. I don't have one in my truck."
*Sigh*
Honestly, at this point - I'm not sure a wireless DVR is truly a plus. The signal could be worse for all I know. All I do know is that Bryan told me I would get one, and now I won't.
At 1:30pm (that would be five an a half hours of missed work, for those of you keeping track) Ryan calls me in to show me that the TV is connected. I channel surf and managed to screw up the input settings and Ryan has to show me how to change inputs using a button combination I wouldn't have thought of (for the standard remote: Hit "TV" then quickly hit "TV/Video" to move between inputs).
By the time I've managed to realize that I'm subscribing to over 300 channels, but my TV is connected to 678 channels (meaning half my channels connect to a "You are not subscribed to this channel" message), Ryan is back with paperwork.
Ah, yes! I need to give him my rebate paperwork!
I quickly dig out the rebate forms Bryan gave me and give them to Ryan.
Ryan looked at them like they were written in Greek.
"I've never taken paperwork from a customer. I have no idea what to do with those."
*Sigh*
Ryan gives me paperwork, though. Owners manuals, legal stuff, channel guides and an info sheet about my AT&T Gateway device. Turns out he was able to get it connected just fine. My old router is still up and running (meaning none of my devices have to have their network settings changed - SCORE! I'm looking at YOU, Canon wireless printer...).
Better still, Ryan has copied down the Byzantine collection of codes, IPs and other network voodoo that I can use to configure my AT&T gateway like it was my 2nd router. SCORE!
I check my network download and upload speeds, they're where they're supposed to be. SCORE!
Ryan apologizes again for being late and about the rebates. He writes down two numbers to call about them and suggests trying one of them first "I've had better luck with them."
And then he shakes my hand and is off to his next install.
It's 1:50.
I've missed most of a workday (unpaid) and I have a single TV connected and high speed internet.
Let's review. Who was the bigger fail here, Bryan or Ryan?
No contest really. Bryan.
Bryan promised a bunch of things that were never going to happen. Running wire all through my house (hah!), the wireless DVR, and the rebates being handled by the installer.
The rates and channels came through, but I'd confirmed them with AT&T over the phone, so I knew those were going to happen. All the other stuff Bryan promised turned out to be hot air.
Ryan, on the other hand, was late. But he gets jobs from the AT&T mothership that (for some reason) decided to give my install to a guy 50 miles away 15 minutes before the install window was up.
That's not on Ryan. Ryan's just the guy holding the bag when AT&T (per usual) does something stupid. Further, Ryan listened to my request to keep my old router running and made it happen. Then he followed up with all the admin information I needed, made sure I understood what I was looking at and even gave me a 2nd remote.
He made good out of a bad situation. Yes, I missed a half day of work, but Ryan's not the guy to scream at for that. AT&T's mothership screwed that up royally.
* * *
I called Bryan the following day to check on my rebates. The installer guy didn't take them. What do I do?
Bryan was unhelpful. "Oh, yeah. They changed how those work right before your install, so now you have to send them in."
Except Bryan forgets that I can read. One form is from Starz, the other is from Showtime. Both forms say that they should be mailed in along with three months worth of bills showing you are a paid subscriber.
There is no possibility that I was going to get my installer to take these forms, because my installer would not have had three months of bills to send in with them.
Bryan is not good at customer service, because he does not have to be. But he has clearly mastered what he needs to sell subscriptions: Bryan is good at lying.
Allright. Rant over.
....
...
..
.
Well, not really.
I'm trying to get ahead of the family finances and I'm trying to schedule my bill payments for the next month. I log in to att.com and (I will spare you the story of how annoying it was to set up my 2nd AT&T email account AND connect my uverse account to my existing att.com account - the nicest thing I can say is that it ultimately did work.)
I logged in and initially, I couldn't see my bill amount. Which made some sense, since I'd only just connected my uverse account to my other services on the att.com website.
But I came back a few days later and saw that my bill had been updated to $201.29. I scheduled the payment and went on my way.
But it later occurred to me that might not be correct. I mean, I'm supposed to be getting billed $110 for my cable/phone/internet WITH a $49 activation (but NOT installation!) fee. So, I should be getting $160 or so just from cable/phone/internet and there's no way my wireless bill is just $40.
I log back in to see if my bill has been adjusted.
It has. It's now $384.38.
Ah, that's better...
Wait, what the screaming hell?
Now anyone who is currently an AT&T customer knows what is going on here, and I had a reasonable suspicion. But until I actually confirmed it, somehow I refused to think it was actually happening.
I got my uverse install on September 4.
Looking at that portion of my bill I'm seeing stuff that makes sense:
That's my uverse bill that starts on 9/5.
Here's the portion for my phone line:
I'm being billed $31.39 for my uverse phone line.
Looking elsewhere in my att.com account, I find I'm still being billed for my old phone service, which was supposed to end and be replaced by the new bill on 9/4. But it hasn't...
Being AT&T, they've done this for my internet service as well. So I'm being billed $38.16 for uverse internet and $37.98 for my old DSL internet.
Way to go, AT&T!!
Again, the hard-working install guys and AT&T engineers need to gang up and beat the crap out of the billing, scheduling, sales and web folks in their company. Because those folks are seriously ruining any chance they have of working for a respected company.
(Well, that and the whole collusion with the NSA thing, but y'know - one thing at a time...).
I called AT&T to get this sorted out and - get this - their suggestion was to pay the bills and they would credit my account after the fact.
The "Pay us more than you owe, and we'll get back to you" plan.
Screw that.
Then the AT&T rep suggested that an adjusted bill would be coming the next month, but that I might see late charges if I waited until then.
I suggested - politely - that that was utter bullsh!t.
I believe I said "if you can tell me what the bill should be, I could pay now."
Naturally, they couldn't. So they logged a dispute on my bill so there wouldn't be a late fee (they said) and now I will pay just my wireless bill and wait for the real bill to show up.
Incredible.
A system that is perfectly capable of adding a pro-rated bill to an account cannot adjust an existing bill when that account has services discontinued.
Because - Stupid. That's why.
If it doesn't involve maintaining wires - AT&T stinks at it. Technical proficiency with ZERO people skills.
Wait, they're just like...
-like an engineer!
...
..
.
You don't suppose...
Nah, couldn't be.
It would make too much sense.
...but only because they so totally suck.
I've tried to take the larger view and say that - yes, in fairness to AT&T - the number of outages I've experienced while paying for their service has been very close to zero.
I'm sure the legion of engineers who work tirelessly at all hours of the night would like to be acknowledged. And they should be. Modern data networks are a hell of a thing. And the one I've been paying for has been there for me with (so far as I remember) total uptime.
And they somehow even find time to route all my data to the DEA. Impressive.
But the squeaky wheel principle applies here. I pay for a utility, I expect it to work. If it doesn't work - why am I paying for it?
24/7 uptime is Par.
So those noble and nameless AT&T engineers need to understand something:
Every other customer touchpoint with AT&T is gutting your company's reputation.Ask me what I think of AT&T and you're going to get both barrels of pent up resentment.
* * *
I'll illustrate this with two personal contacts with AT&T.
And then I'll supplement it with web and phone follow ups.
First, the people. I'll call them Ryan and Bryan.
Bryan arrived on my doorstop unannounced. Bryan was in sales, so if I had known he was coming, I wouldn't have answered the door. But he sung the praises of AT&T uverse with the passion of a new convert to the faith. He smiled. He was funny. And though I believed he was totally full of it - I let him talk, took his materials, and then did my own research on prices and packages.
Ryan on the other hand, was expected.
Ryan's first contact with me was over the phone. He was calling me to let me know he'd be late for the appointment with me.
To appreciate how bad a first impression this is, you'd need to understand some things:
- This would be the appointment Bryan had scheduled for me two weeks earlier
- This would also be the appointment I'd been asked to confirm via text the previous day. And I had.
- This would also be the appointment I'd been asked to confirm via phone the previous day (after I'd confirmed by text). And I had.
- This would ALSO be the appointment I'd been asked to confirm via email the previous day (after I'd confirmed by text and phone).
- This would ALSO be the appointment my wife had been asked to confirm via text and email and Godknows what else.
- And... this would be the appointment I had elected to stay home all morning (unpaid) because my attendance was required.
- FINALLY - it needs to be understood that when I say "appointment" I mean a two-hour block of time. Meaning Ryan could arrive anywhere between 9am and 11am and still be considered "on time."
Awesome. I could have been working and getting paid until just before lunchtime, but hey, I'm at your service, Ryan. Whatever makes your day easier.
Back to Bryan. Weeks ago, Bryan promised to return after our initial meeting and did (although I was out) so he came back a few days later and I signed up. Bryan assured me that my free installation would cover multiple TVs (even though I only needed one) and that the installer would run Cat-5 anywhere it needed to go in my house. "Plus, your DVR will be wireless, so you can move it around your house if you decide to add a TV or rearrange your house."
Fan-tastic!
When I reacted badly to the $50 activation fee, Bryan whipped out some rebate forms to offset the charges. "Just fill these out and give them to your installer and you'll be set."
See? That's a guy trying right there. Exeunt Bryan.
*Cheers*
Let's return to Ryan.
*Boo!*
Yes, Ryan has royally screwed up first impressions. He does arrive an hour after his phone call, a full 45 minutes after my install window was supposed to end. He's in a truck, wearing a baseball cap and looks irritated.
I point him to all the particulars in my house. The TV case (which I'd helpfully cleared out) the phone setup and where the lines hit my wireless router.
I asked him about running wire to the finished side of the basement. Ryan looked at me like I was talking Greek. "Just the one TV, right?"
Uh, I was told you could run wire to other rooms in my house.
"I'll run it anywhere you need it to connect to the one TV."
Now, I know sales guys are full of it - and sales guys from AT&T doubly so. So this wasn't much of a shock. I'd asked because it would be nice, but once I confirmed that wiring for uverse TV was just running Cat-5, I knew I could do it (with help). I ask Ryan about the gateway they'll be installing and if I'll be able to keep my current router (which I love). He says he'll try, but that he typically doesn't install a device inside the house and hasn't had much luck when he tried in the past.
*Sigh*
I point out what I currently have for Ethernet and DSL. Ryan scratches his head figuring out where the wires needed to go and I get out of his way. In about an hour he's drilling a hole in the side of my house and telling me he's going to run a new wire from the pole to my house.
"Don't worry, though. In seven to ten days, some guys will come by and bury the cable. I'll leave plenty of slack in case you need to mow."
*Sigh*
So, now there's a black cable snaking around my back yard - with "caution" flags tied to it every few feet so it's extra visible and unsightly.
And then Ryan shows up with the hardware and starts hooking up the TV. He unpacks an impressively compact device that I think might be the wireless DVR.
Is that the wireless DVR?
"It's the DVR, yeah."
This is AT&T, so I ask again to make sure I heard that omission correctly.
It's a wireless DVR?
"No. It's wired to Ethernet."
I was told I'd get a wireless DVR.
"We do wireless DVRs only if we have major issues running the wires in the house. I don't have one in my truck."
*Sigh*
Honestly, at this point - I'm not sure a wireless DVR is truly a plus. The signal could be worse for all I know. All I do know is that Bryan told me I would get one, and now I won't.
At 1:30pm (that would be five an a half hours of missed work, for those of you keeping track) Ryan calls me in to show me that the TV is connected. I channel surf and managed to screw up the input settings and Ryan has to show me how to change inputs using a button combination I wouldn't have thought of (for the standard remote: Hit "TV" then quickly hit "TV/Video" to move between inputs).
By the time I've managed to realize that I'm subscribing to over 300 channels, but my TV is connected to 678 channels (meaning half my channels connect to a "You are not subscribed to this channel" message), Ryan is back with paperwork.
Ah, yes! I need to give him my rebate paperwork!
I quickly dig out the rebate forms Bryan gave me and give them to Ryan.
Ryan looked at them like they were written in Greek.
"I've never taken paperwork from a customer. I have no idea what to do with those."
*Sigh*
Ryan gives me paperwork, though. Owners manuals, legal stuff, channel guides and an info sheet about my AT&T Gateway device. Turns out he was able to get it connected just fine. My old router is still up and running (meaning none of my devices have to have their network settings changed - SCORE! I'm looking at YOU, Canon wireless printer...).
Better still, Ryan has copied down the Byzantine collection of codes, IPs and other network voodoo that I can use to configure my AT&T gateway like it was my 2nd router. SCORE!
I check my network download and upload speeds, they're where they're supposed to be. SCORE!
Ryan apologizes again for being late and about the rebates. He writes down two numbers to call about them and suggests trying one of them first "I've had better luck with them."
And then he shakes my hand and is off to his next install.
It's 1:50.
I've missed most of a workday (unpaid) and I have a single TV connected and high speed internet.
Let's review. Who was the bigger fail here, Bryan or Ryan?
No contest really. Bryan.
Bryan promised a bunch of things that were never going to happen. Running wire all through my house (hah!), the wireless DVR, and the rebates being handled by the installer.
The rates and channels came through, but I'd confirmed them with AT&T over the phone, so I knew those were going to happen. All the other stuff Bryan promised turned out to be hot air.
Ryan, on the other hand, was late. But he gets jobs from the AT&T mothership that (for some reason) decided to give my install to a guy 50 miles away 15 minutes before the install window was up.
That's not on Ryan. Ryan's just the guy holding the bag when AT&T (per usual) does something stupid. Further, Ryan listened to my request to keep my old router running and made it happen. Then he followed up with all the admin information I needed, made sure I understood what I was looking at and even gave me a 2nd remote.
He made good out of a bad situation. Yes, I missed a half day of work, but Ryan's not the guy to scream at for that. AT&T's mothership screwed that up royally.
* * *
I called Bryan the following day to check on my rebates. The installer guy didn't take them. What do I do?
Bryan was unhelpful. "Oh, yeah. They changed how those work right before your install, so now you have to send them in."
Except Bryan forgets that I can read. One form is from Starz, the other is from Showtime. Both forms say that they should be mailed in along with three months worth of bills showing you are a paid subscriber.
There is no possibility that I was going to get my installer to take these forms, because my installer would not have had three months of bills to send in with them.
Bryan is not good at customer service, because he does not have to be. But he has clearly mastered what he needs to sell subscriptions: Bryan is good at lying.
I hung up on Bryan, because there was no way to fix that. Sure, I'll complain to AT&T about this, but they'll echo Ryan's dismissal of the problem "The sales guys are contractors, they don't even work for AT&T."
No, but they show up to your house wearing shirts that say "AT&T." And their voicemail says "This is Bryan with AT&T," so I can't see why people would blame AT&T for their crappy service...
* * *
A few days after my install, I was robo-called out of the blue by AT&T to ask how my install went. It was a tedious IVR menu and took way too long, but I believe in feedback.
I graded my installation taking care to point out that my installer was fine as a person, but that I was dissatisfied with my install because it began 45 minutes later than it was supposed to. I asked to be called personally to offer follow up details.
Naturally, this being AT&T - I was called by Ryan's supervisor who wanted to know the details of why I thought Ryan was a terrible installer.
I explained that Ryan was a total pro - and that my problem was with the overall scheduling process and with the sales person promising me stuff that didn't materialize.
I could tell this was not what this guy was calling me for. I was only supposed to be grading Ryan and this call was all about the performance of him as an individual.
And this is where I lost it (because, with AT&T, you always get to this point eventually). I'm not sure of my exact words, but I tried to hit three main points:
- When you only ask for feedback on a SMALL part of a user experience, you make your customers feel like you don't care about their problems.
- When you discard negative user feedback because it falls outside of your intended question - you are allowing problems to persist.
- Repeatedly reminding customers to be on time when your employees arrive late tells customers they need to care about your time more than you need to care about theirs.
The man was nice, sympathetic even... but I doubt those comments will filter out of a channel that is only designed to provide the mothership with Ryan=Good or Ryan=Bad.
Ryan? If you get hosed, I'm sorry. I tried to make it clear to your boss.
Ryan? If you get hosed, I'm sorry. I tried to make it clear to your boss.
* * *
But it's done. Right? I spend about 20 minutes manually hiding the 300+ channels that I don't subscribe to, yet still appear as selectable options on my receiver.
Then I spend another half an hour hiding BS channels like Home Shopping Network and anything that starts with "uverse"
And finally, I dial in the parental controls for the phalanx of age inappropriate material that my set now has access to.
Sidebar: I miss TiVO's KidZone. KidZone created two pools of access. One for kids, one for adults. When you started using the TV, TiVO assumed you were a kid and filtered accordingly. If you wanted to see all content, you entered a code - once - and weren't bothered again until you turned the machine off or manually re-entered KidZone.
Uverse does the exact opposite: You lock categories of content (TV MA, PPV, R rated movies) and anytime you try to access them, you are prompted for a password. Which means adults browsing their channels soon wish they are dead - as each new movie channel demands a password just to display a title. Never mind the fact you just entered the same password 15 seconds ago for ENC, oh no, ENC-WEST won't show you its stuff until it knows who you are...
Being AT&T, though they cannot leave awful alone. They have to go for maximum user pain.
Here's the unlock sequence for AT&T uverse:
Yes, Having selected a channel repeatedly and having entered in a 4 digit passcode correctly AND hitting ENTER, it's a good assumption that I DON'T WANT TO UNLOCK THIS CHANNEL
- Select Channel
- See message saying "This Content is Locked"
- Hit "OK"
- See passcode prompt "Enter Passcode"
- Enter 4 digit passcode
- Hit "Enter"
-that should be it, right? But no.
- See prompt "Unlock this content?" Don't Unlock / Unlock
and here's the kicker....
- "Don't Unlock" is the default selection!!
WHOEVER CODED THAT NEEDS TO BE PUT IN SOLITARY WITH AT&T UVERSE WHERE EVERY CHANNEL MUST BE UNLOCKED.
Seriously.
Oh but there's more!!! If you unlock a channel and leave it, it will re-lock in 30 minutes, meaning there's a good chance if you're bopping back and forth to check on the box score, you'll have to unlock the same channel repeatedly.JEEZUS.
WAY TO FAIL, UVERSE!!!
Allright. Rant over.
....
...
..
.
Well, not really.
I'm trying to get ahead of the family finances and I'm trying to schedule my bill payments for the next month. I log in to att.com and (I will spare you the story of how annoying it was to set up my 2nd AT&T email account AND connect my uverse account to my existing att.com account - the nicest thing I can say is that it ultimately did work.)
I logged in and initially, I couldn't see my bill amount. Which made some sense, since I'd only just connected my uverse account to my other services on the att.com website.
But I came back a few days later and saw that my bill had been updated to $201.29. I scheduled the payment and went on my way.
But it later occurred to me that might not be correct. I mean, I'm supposed to be getting billed $110 for my cable/phone/internet WITH a $49 activation (but NOT installation!) fee. So, I should be getting $160 or so just from cable/phone/internet and there's no way my wireless bill is just $40.
I log back in to see if my bill has been adjusted.
It has. It's now $384.38.
Ah, that's better...
Wait, what the screaming hell?
Now anyone who is currently an AT&T customer knows what is going on here, and I had a reasonable suspicion. But until I actually confirmed it, somehow I refused to think it was actually happening.
I got my uverse install on September 4.
Looking at that portion of my bill I'm seeing stuff that makes sense:
That's my uverse bill that starts on 9/5.
Here's the portion for my phone line:
I'm being billed $31.39 for my uverse phone line.
Looking elsewhere in my att.com account, I find I'm still being billed for my old phone service, which was supposed to end and be replaced by the new bill on 9/4. But it hasn't...
Being AT&T, they've done this for my internet service as well. So I'm being billed $38.16 for uverse internet and $37.98 for my old DSL internet.
Way to go, AT&T!!
Again, the hard-working install guys and AT&T engineers need to gang up and beat the crap out of the billing, scheduling, sales and web folks in their company. Because those folks are seriously ruining any chance they have of working for a respected company.
(Well, that and the whole collusion with the NSA thing, but y'know - one thing at a time...).
I called AT&T to get this sorted out and - get this - their suggestion was to pay the bills and they would credit my account after the fact.
The "Pay us more than you owe, and we'll get back to you" plan.
Screw that.
Then the AT&T rep suggested that an adjusted bill would be coming the next month, but that I might see late charges if I waited until then.
I suggested - politely - that that was utter bullsh!t.
I believe I said "if you can tell me what the bill should be, I could pay now."
Naturally, they couldn't. So they logged a dispute on my bill so there wouldn't be a late fee (they said) and now I will pay just my wireless bill and wait for the real bill to show up.
Incredible.
A system that is perfectly capable of adding a pro-rated bill to an account cannot adjust an existing bill when that account has services discontinued.
Because - Stupid. That's why.
If it doesn't involve maintaining wires - AT&T stinks at it. Technical proficiency with ZERO people skills.
Wait, they're just like...
-like an engineer!
...
..
.
You don't suppose...
Nah, couldn't be.
It would make too much sense.
Labels:
AT&T,
Bad customer service,
Bad UI,
Ineptitude,
Oh fer cryin' out loud,
Telcos
Saturday, August 24, 2013
So Simple
I'd been hearing a lot about an emerging web based banking service called Simple - and figured (in the interest of testing out modern UI) that I'd try them out.
Plus, if they're solid - I could use them to replace my current external savings bank, who were recently acquired by a bank I detest.
You have to request an invitation - which takes awhile. I suspect they're doing the same thing Mailbox did - trying to keep a lid on growth so they don't overcommit.
I submitted my request on July 15.
On July 23, I received my invitation.
Not bad.
You sign up online. And while I didn't get screenshots of the form, let me just say - it's one of the smoothest signup apps I've ever used.
I especially loved the realtime verification of my bank's routing number. As soon as I typed in the last digit - I saw the name of my bank appear, so I knew the number was correct. (Yes, you can do that on a form submit, but much smoother to do it realtime. Plus it shows that people are going the extra mile. They didn't have to do that.)
They made a great fuss about setting up a username and passphrase and then routing you to the mobile app.
The suggestion was that once you got set up, your primary interaction would be through your phone app. As in, you won't be logging into their website much.
Awesome. I hate logging in.
And they send you a credit card, which you will use for most of your withdrawals.
---
A shortcoming of this was that there were a series of steps you needed to wait for.
After requesting an invite, you needed to wait a week for it to arrive.
After signing in, you needed to wait to be approved.
After getting approved, you needed to wait until they sent you your credit card.
And after they send you the credit card, you needed to wait for some challenge transactions to appear in the external account you used to set up your simple account.
---
None of these steps are a hassle, but the common denominator in all of these is time.
At some point, I got my spiffy new Simple credit card in the mail (in a spiffy custom envelope).
Except that my spiffy custom envelope was already open when I got it.
This, I did not like.
Lest I go all DEFCON-1 on this situation, I emailed the folks at simple and asked what I should do. If this was a security risk - I would like a new card sent to me. If it's not a security risk - I would just activate the card.
Simple replied that I should contact their help line and formally request a new card.
So I did.
In the meantime, I had seen the challenge transactions show up in my external bank, so I figured I could at least verify Simple's connection with my bank.
So I fire up the iPhone app. Annnnd Nothing. The app works, but I don't see anything about connecting or confirming transactions with an external bank.
Then I re-read my email from Simple (RTFM, dude) and I see:
Sign into your Initial Funding account to see the two deposit amounts, and then sign in to Simple.com on your computer to confirm them.Okay, I should go to the website. So I do:
Except it's been awhile since I set up my account on the website. I'd thought I'd be using the app most of the time, and it works with a 4 digit PIN.
Username....? Ahhh... I enter the email address they sent all my stuff to.
See that red border? That appeared right after I typed the "@" sign.
That's an omen. (for tech types, I'm using Chrome on OS 10.8.2)
Password.....? Double Ahhhhh.... I remember picking a stupidly complicated one, since they assured me I wouldn't have to type it again.
So, this is what I'm looking at right before I hit "Sign in..."
And this is what it looks like right after I hit "Sign in..."
Yes, you are not imagining things, those two images are identical.
This is a problem. Not a crippling one, but one where the user doesn't see any response to their action.
I hit the button...annnd....nothing changed. Now what?
See that red border? That's the feedback I'm supposed to be keying off of.
Red = Bad.
Thus: My Username = Red = Bad.
What's wrong with my username?
It says 'username' and not 'email' so perhaps I'd set up a username separate from my email. I honestly cannot remember.
I prune the '@domain.com' off the end and try again. This time, I get:
That's what I'd expected. I doubted I'd get the password right on the first go, but I expected to get some feedback on what happened.
I'm still not sure what my username actually is, but at least the system is responding now.
I try with my email sans domain a few more times before giving up and hitting the 'Reset your password?' link.
Okay, there's the confirmation: 'username or email' On their site, your username IS distinct from your email address. I haven't the slightest idea what my username is, but I know the email address I gave them. And I know the phone number I gave them, it's my iPhone number - 'cos I downloaded their app.
Send.
Shortly thereafter, I get this email from Simple:
From: Simple Support <support@simple.com>
Date: Wed, Aug 21, 2013 at 12:50 PM
Subject: Request to reset passphrase
To: "me@domain.com" <me@domain.com>
[Simple Logo]
We received a request to reset the passphrase for the Simple login associated with this email address. If you made this request, please follow this link and enter the verification code we sent to your mobile device:
https://www.simple.com/new-password/[long string of numbers]
This reset link is only good for 30 minutes. If you have any problems, please call us at 888-248-0632. Replies to this email are not monitored.Super! I click the link and it opens to a standard password reset form.
I'm asked to enter a new password AND enter a code that they will text to my phone.
*Bzzzt!*
My phone buzzes to announce the arrival of the security code from Simple.
Yea!
I type in a diabolically complex passphrase (which they confirm is diabolically clever) and then I key in my security code.
And like that, my password is reset.
---
We're back here, again:
Do you see the problem, yet?
I still don't know my username. And nothing in the communications I've received tell me what it is.
I try my email address without the domain suffix - and it fails.
I re-read everything they've sent me up to this point. None of them spell out what my username is.
I take a guess and try a username I've used on other sites along with the password I just reset.
Success!
Pro tip: It should not be possible for a password reset sequence to end in a user not having both pieces of log in information. One or the other by itself is not going to get it done.
Understandably, there are security reasons you shouldn't do this in a single communication - but this is undeniably critical information. You must provide it as part of this process.
---
The transaction log shows they've issued me a replacement card AND zeroed out the cost to me. Smart, because now I know that replacement cards cost money and that they've done me a favor by not charging me.
Pro tip: If you do a favor for your customers, make sure they know about it.
---
But now that I'm in, I'm supposed to be confirming some challenge transactions with my external bank.
I have no idea where this is. To me, if this is a critical set up task (which it is - as future transactions between these banks cannot happen without this step) I would assume this (one time, setup) task would be writ large all over the screen when I come in.
Honestly, a splash intro screen would not be out of order.
"Before you begin: Setting up a connection between Simple and your External Bank requires verifying some challenge transactions.
If you've already seen these transactions appear in your external bank account, you're ready to verify them.
Would you like to verify these transactions now, or wait until later?"This is the display weight I'm expecting when I log in, but instead I get this:
Also, there might be value in having this setup task presented as a message, like they're doing in the top right of the screen. Like a To-Do list. Being user friendly, they could present it with me in the middle, since I've already ticked off a few items.
But all those 4 items are invites I can send to friends. No help.
So where do I go?
I try 'External Accounts' which makes sense:
Okay this looks right, but other than 'Add an Account' I'm not sure what to do here. I already see my account and its routing number - I mouse over it to click it...
And new controls appear!
Okay, Simple guys... If this is the step you NEED me to take, it should not be hidden behind a rollover effect.
You don't need a blink tag, but for crying out loud, make this overt.
The saving grace here is that the page is pretty bare bones. There's not a lot of distractions or other complications on the page. There's a big box over there, I'm probably going to mess with it, but it's not like having those buttons displayed from the outset would break your page.
Make them visible - give them a shiny rollover effect if you want to get fancy - but make them visible on load, 'kay?
Once I found the control, confirming the challenge transactions was dead simple.
Overall, I love the idea of the Simple.com bank - and should the trial run play out - I'll be ditching my other bank to store savings here. I've dealt with a faceless, distant bank for a long time - it's nice to try a bank that's put some effort and thought into dealing with customers via smartphone and web.
I'm giving them grief here, because these are setup tasks that should be bulletproof - but the overall of what I've seen has impressed.
More to follow.
Subscribe to:
Posts (Atom)












