Showing posts with label work. Show all posts
Showing posts with label work. Show all posts

Thursday, March 26, 2026

Installed Package Rotation (Salesforce Marketing Cloud)


Sept. 30 is a new date you need to aware of if you work with SFMC (ExactTarget). 

Installed Packages are the combination of a (1) Client ID, (2) Client Secret, (3) a set of Permissions and (4) Business Unit access that together permit authorized systems (and dictate the scope of access) to send data *IN* to SFMC. (This is also sometimes used for CloudPages or SSJS activites.)

Previously, once you established an Installed Package, it just worked behind the scenes, permitting access to systems that had the credentials until you disabled the package or changed the scope. To make SFMC more secure, there are a few recent things of note:

  1. 1. Installed Packages that were not accessed in 180 days have been invalidated. (They won't work until you rotate the credentials.)
  2. You can no longer view Installed Package credentials in SFMC. 
  3. Remaining Installed Packages all received the same expiry date of 09/30/2026 when they'll stop working -- unless you rotate the credentials before that point. (New credentials automatically expire 180 days from creation.)

To rotate credentials, you'll follow a pattern like this. (Validate this with your InfoSec teams now, not late-September!)

Step 1. Navigate to Installed Packages under setup about one week before the credential is set to expire.

Step 2. Click "Generate" to establish a new "staged" credential. The new credential will appear on screen but never be shown again, so capture it. After a 5-minute waiting period, the credential is LIVE. At this point, your Installed Package has an OVERLAP - two credential sets that both work. (I think "staged" is a poor word choice here by Salesforce because it implies "prepositioned" or "standing by, reading to use" - perhaps in the future we'll have the ability to schedule these and that term will make more sense.)

Step 3. SECURELY share the new credential with the vendor or developer responsible for the inbound connection to SFMC. They will need to update their code but it should work right away. (You should have no interruption in service.)

Step 4. Once they have confirmed the credential works, return to SFMC and go back to the package and click "Activate" which deactivates the old code. I recommend this over just letting the old code expire on its own. (Again, I think this is a poor word choice by Salesforce to call this "Activate" as it does nothing to your new "staged" credential except make it the only surviving credential.)

Step 5. Look at the new expiration date and go into your calendar or ticketing system and establish a reminder for just this side of 180 days to repeat the process.

Note: Unlike AWS, this cannot be performed via API (you must have the proper Roles & Responsibilities within SFMC). 

Should you do this all at once for all your Installed Packages? It depends. There may be some economies of scale, but if one or more of your implementors have problems, your time performing Customer Support could be a big distraction.

Cross-posted: https://www.linkedin.com/feed/update/urn:li:activity:7443077624660230144/ 

Sunday, May 26, 2024

RTO

My where-we-work has always been interesting.

My first job, I was still in college in Seattle. The company was still forming. I was the first officially hired employee (the other two founders still had their day jobs elsewhere and were working with a company somewhere else who wanted to fund the whole operation).  I worked from my dorm room or the library or the computer lab until I graduated and they paid me to move to L.A.  Then I worked from my apartment until we had an office. Sometimes before we had an office, people came to my apartment for meetings.

Then I worked for a church in L.A. and I had an office. I had a few volunteers who worked with/for me, some of whom would come into the office, some of whom would do all their work remotely from home. I had a few different places where I could go and work, so sometimes I'd go and hide when I wanted to get stuff done without interruption.

Then I worked for a large non-profit in Seattle. Most of us were in the office, but I did have one person who reported to me who worked remotely from Colorado. And later an outsourced team in India who would do work overnight and I'd have a call early in the morning to accept the completed work back. We had a few buildings and I walked to a lot of in-person meetings. 

After that, an agency in Seattle. Our clients were everywhere from the floor above us to a few blocks away or even L.A. or Chicago. We did a lot of voice calls, but also a lot of email.

Then I got hired by a company in L.A. and they proposed that within a year they'd move me back to L.A.  They would fly me down monthly and I'd work in the office for a few days. I had my own desk and sometimes I wouldn't really have need to interact with anyone while I was there. My supervisor didn't have any impact on my day-to-day work and the person who directed a lot of my work sat on a different floor and never came down to our floor. The rest of the people we worked with were at an agency in San Francisco.  So we'd have some voice calls, but it was mostly email. 

Then I moved down, worked out of the office, we reorganized so that we were situated together in a quad with other people who had the same direct report as me and I started getting connected with people at work. I eventually had people reporting to me and we had our own quad. We did start having daily standups on another floor as we took more of the work inhouse from the agency.

Then I moved to a company that was only in-office. Remote work wasn't permitted at all. Until COVID, then everything changed, they started hiring people all over the country and we worked for several years with people we'd never met in person.

Until I left and started working remotely for a company in Utah. Most of the people I worked with were situated in D.C. and so I regularly went to the D.C. office and rarely Utah. Lots of Teams(etc.) calls. After COVID, they called nearly everyone back to the office so now I work remotely and have someone who reports to me in the office and someone I've never met in person who lives in Indianapolis. And I'm regularly on calls with people in D.C., Utah, Indianapolis, New Hampshire, Florida, Colorado and other places people whose location I'm not sure of.  

I had a point when I started writing this. For a moment, I had forgotten it, but now I remember.

I was thinking today about this while I was at church - remotely, of course. The church is in Ann Arbor but there's a big contingent of people who attend remotely, whether from Ann Arbor or from other places.  People today were talking about Lansing and Kansas City and one woman who said "northwest Nebraska" is as specific as she can get as the local gas station has a sign that says "You are nowhere" and there's nothing near where she lives to speak of that would give anyone a sense of location.  

Anyhow, all this to say we had an online discussion after the call and I kind of lurked without saying much.  Sometimes it is hard to put myself out there and speak up. That's a challenge when I am expected to think on my feet for a living, but sometimes if the focus of the meeting isn't on me, it's easier to just listen, or to offer up a comment in chat, letting others read what I have to say and then inviting me to expand on it, or affirming or contradicting my thoughts. I didn't feel like I could necessarily relate to the conversation so I didn't want to derail it with my thoughts. Sometimes I feel like this at work - that if I jump in, I might derail things. So sometimes I add things in chat. And it works really well. Someone will read it, call attention to it, affirm (or contradict it) and ask me to elaborate. Then it flows, I've contributed and I haven't derailed or stepped on anyone else.

If we were in person, we have less of a chance for side-conversations or to line-up potential future conversations in chat even when it may benefit the overall conversation. Sometimes you want to ask another person in the meeting if they're feeling the same way you are, so that if you do speak up with an opposing viewpoint you know you won't be out there alone - or to at least vet your thoughts and know more about why you're on your own - and if it's worth bringing up in the larger group setting, or later individually, or not at all. Because if you're on your laptop or phone in the meeting, too many people assume that it's unrelated to the meeting or because they had side-conversations and assume it's counter-productive or negative about them.

I remember the leader of Zoom saying he believes everyone should be in person (of Zoom!) because he liked the give and take of live meetings and people talking over each other and the rapid nature of live conversations, that everyone is too polite in zoom calls. But what I remember from live meetings with everyone in the room is that there is a real risk of monopolization by the extroverts and the bombastic and the narcissists. If you only value the opinions of the loudest talkers in the rooms - the ones who are fine to talk over people, then by all means, force everyone into this model. But when you do, you lose the opinions, insight and perspectives of the quiet, the meet, the thoughtful, the introspective, the introverts, the polite and the processors. 

I don't mean myself, I mean the many people I have worked with over the years who were brilliantly quiet, who did not put themselves out there - but when you talked to them one-on-one or when you conversed in Slack or email, when you gave them advanced notice that you wanted and welcomed their engagement and then made it easy for them to engage, they shone, and we all benefited from it.

But if you only want the loudest voices, the ones that are happy to tell you what they think unsolicited, the ones who are confident and self-assured that they are the smartest person in the room, the ones who are energized by the sound of their own voice, the ones who know you have nothing better to do than to drop everything when they wander by your desk, by all means, shove everyone back into the office.

Thursday, March 17, 2022

Best Tool for Designing Journeys

Pretty regularly, I see the question "What's the best tool for designing marketing journeys?" The common suggestions are LucidChart or Visio, but I think it's much simpler: The humble whiteboard.  (In a video call, if you don't have a whiteboard, a large piece of paper taped to the wall will work.)

Journey Design is best done as a group exercise.  A lot of business requirements will surface and a lot of detail that would otherwise be forgotten will organically come up in conversation.  It may only be a first round prototype, but it'll go much quicker than if you just try to gather requirements and then go off on your own and try to draw it in some visual computer program.

Instead, gather people together (in person or virtually) around the whiteboard.  You want people to start talking about the "user experience" - getting business requirements for a journey can be one of the more fun collaborative efforts and is really helpful for uncovering expectations people forgot about.  I think I landed a job once because I did this with the CEO and CTO of a company during an interview. Here are some of the highlights to get people talking aloud:

  • How do people become eligible for this journey/flow? (What is the criteria or logic? Do we have the data? Where is it? Do we need to do anything to the data before we can use it? Are there any suppressions? (i.e., groups of people who would be eligible but we shouldn't send, such as someone with an open Customer Service case or someone who is a known hostile customer or an identified cohort which will perform better without the experience, such as whales?)
     
  • What happens to a user during the journey/flow? What marketing (emails, texts, ads, direct mail, phone calls, etc.) do they get? What's the timing or cadence? Are there any splits or testing?
     
  • How do they leave? In addition to just exiting at the end, can they be ejected early for any reason?  A status change on their subscription, a new purchase, a return/refund. Do we have the data we need to evaluate for that? Are there Customer Service reasons to exit or pause the journey?
     
  • What happens to other marketing efforts while someone is in this journey? Is there anything they should be suppressed from? Anything that should be delayed? Anything that needs to appear within the journey as optional content if it happens to the user mid-journey?

Sunday, March 06, 2022

Celebrate the 99 Sheep (A Work-Related Post)

Then Jesus told them this parable: “Suppose one of you has a hundred sheep and loses one of them. Doesn’t he leave the ninety-nine in the open country and go after the lost sheep until he finds it? And when he finds it, he joyfully puts it on his shoulders and goes home. Then he calls his friends and neighbors together and says, ‘Rejoice with me; I have found my lost sheep.’ I tell you that in the same way there will be more rejoicing in heaven over one sinner who repents than over ninety-nine righteous persons who do not need to repent. -- Luke 15:3-7

One time when I heard this, I began to think of the 99 sheep who weren't lost.  While the shepherd was off looking for the lost sheep, who was making sure they were safe, cared for and protected from predators. I know there might be some answers to that (the design of the pen, other shepherds, how long the shepherd was actually gone, sheepdogs, etc.), but I also realized this is an HR problem.

In a lot of my experience, a lot of effort is made to find and recruit for an open headcount, but much less is done to actually keep the employees once they're onboard. There are sayings like "Date your wife" or "Don't stop courting just because you're married." and again, those same things can apply in the workplace -- I think too many employers think that because they've given you a job and now they give you a paycheck, they don't actually have to do much to keep you.  

Sure, perhaps there's a nice assortment of snacks and once a year they tell you all you're doing wrong, to soften you up before they give you a raise less than the rise inflation over the past year. 

And then they're shocked, surprised, disappointed when you leave. You might even get some Exit Interview theater, but only the myopic really think that's a useful time to tell them why you left - there should have been opportunities while you were still there to indicate if there's anything wrong, anything that could be better.

But I've rarely seen any cases where companies ask "Why are you staying?"  What are we doing right?  What could be improve? What business opportunities are we missing? How could we be doing better for our customers?  If you were CEO for a day, what would you change? 

Why aren't the 99 leaving? Are they staying for the right reasons? And the ones that leave, are they the right ones to leave or the wrong ones? Do you even know?

I think that employee retention is probably one of the things most companies do poorly because they've never had to. But in the midst of The Great Reshuffle, every good employee you retain is one less new employee to find a recruit.

And why is retention better than recruiting?

  • Lost opportunity cost. The work the employee was doing before they left is slowed or paused until their replacement is found.
  • Lost opportunity cost. The teammates and hiring manager are spending time in interviews instead of the work they had planned. They're also picking up the slack from the open headcount.
  • Knowledge loss. The best documentation in the world rarely gives you the full picture on how and will fail on the why. New teammates mean new opportunities to think differently, but if you embark on the new only because you don't understand the old, you may repeat past mistakes or throw out the good with the bad.
  • Disruption and Morale. The loss of a teammate is disappointing and may cause others to re-evaluate their own place in the company, especially if the extra work gets dumped on them.
  • Dissatisfaction. If someone's only staying for the paycheck, their work will decline over time. If the only reason you're keeping them is because it's one less headcount to keep, that's a loss for them and the company.
As cool as free hoodies are, retention isn't all about free swag, it's about making sure each employee knows why they are vital and valuable to the company, that they know how their contributions matter, and that they feel like they have a future they can be excited about.  Some people will seek this out on their own, some people are naturally motivated, but others need to be led. It's not that they don't care, but when they've got their head down in the work, it may not naturally occur to them.  

Let's do more to celebrate those that stay and make them want to stay even more. (Because, heck, someone who loves their job and loves their culture are also really great recruiting assets.)

Thursday, July 22, 2021

Google Ads: Creating a Hash from an email address in SFMC

Google Ads allows you to upload email addresses into Google Ads and then target (or suppress) ads to people who own those email addresses.  

If you want to protect your PII, you may be required to upload the email addresses as an SHA-256 hash.  Google Ads will allow you to upload in plain text, but if you don't like having that kind of data lying around on your end, you'll want to hash them.  (If you don't, Google will immediately hash them as soon as they're uploaded.)

If you're using Salesforce Marketing Cloud (ExactTarget), the query to do the hashing is a little different than if you were to do the hashing outside of Marketing Cloud.  

Anywhere else:

lower(CONVERT(VARCHAR(100),
HASHBYTES('SHA2_256',
@EmailAddress),2)) as HashEmail

In SFMC:
lower(CONVERT(VARCHAR(100),
HASHBYTES('SHA2_256',
CONVERT(VARCHAR(100),@EmailAddress,0)),2)) as HashEmail
A second convert step is needed in the process or it starts with the wrong data for hashing and ends up with a hash that doesn't match anything. Took a lot of trial-and-error and research to get to this, so hopefully it's useful.



Saturday, October 26, 2019

Coupons in Email Marketing

If you've worked with email long enough, eventually you've come to a point where you needed to send a coupon code to a group of users.  The easiest way - your CRM team provides you with pre-assigned codes.

In most cases, you'll probably be using a User ID of some sort as a proxy for email address. To simplify my explanation, I'm going to use EmailAddress in my examples.


That was a good first start - one code per person, no overlap, no one left without a code.

But what if it eventually gets more complex?

  • You need to award a coupon code as soon as someone completes an action
  • You don't know in advance who will be eligible for a coupon
  • You don't know how many coupons you'll need
  • The coupon codes have a real value (cost to your company) so you don't want to issue a code to a known bad address 
So someone wants to give you a bunch of codes and have you just assign them to people when they meet the eligibility requirements.  So now you've got coupons and you've got an eligible audience, but how on earth do you connect them up?  (Example assumes audience is smaller than available codes. Also assumes that the website handles redemption and validation of codes. More thoughts on that below.)


While Salesforce Marketing Cloud aka ExactTarget does have a couponing feature, it was built to serve a particular function long ago and may not be flexible enough to meet your needs - or you're on a platform that doesn't have this functionality.  Here's how you can roll your own.

My examples are roughly based on something I did at a previous job years ago using ExactTarget, but any code or examples below were created today and kept simple for the purposes of this example. 

First, add a few more columns to your tables.


Next, we're going to take advantage of SELECT and ROWID by selecting the rows from the coupon table that meet our criteria.

Target: tblCoupon (Update)
SELECT ROWID as numRow, strCoupon FROM tblCoupon WHERE EmailAddress IS NULL AND dteClaimed IS NULL 

Target: tblAudience (Update)
SELECT ROWID as numRow, EmailAddress FROM tblAudience WHERE strCoupon IS NULL and numRow IS NULL

What's happening:
  • For each query, the SQL server is creating a new temporary table of just the records that meet the criteria.  Then it applies that back to the original table.  (Edit: The left table should have numbers in every row for "numRow" - this is an error in the original graphic. Sorry.)

Now - finally, we have something in each table we can use to tie them together.

Target: tblCoupon (Update)
SELECT c.strCoupon, a.EmailAddress, GETDATE() as dteClaimed FROM tblCoupon c INNER JOIN tblAudience a ON c.numRow = a.numRow WHERE c.EmailAddress IS NULL

Target: tblAudience (Update)
SELECT a.EmailAddress, c.strCoupon FROM tblAudience a INNER JOIN tblCoupon c on a.numRow = c.numRow WHERE a.strCoupon IS NULL


To be safe, I'm likely to then go back and set the numRow to -1 to prevent overlap.

Target: tblCoupon (Update)
SELECT strCoupon, -1 as numRow FROM tblCoupon WHERE numRow IS NOT NULL

Target: tblAudience (Update)
SELECT strEmailAddress, -1 as numRow from tblAudience WHERE numRow IS NOT NULL

Now you can email your audience from tblAudience.  

In my typical setup, I'll usually keep a final table of all issued coupons (with email address and coupon both as primary keys, allowing an email address to appear more than once).

Ways to take this to the next level:

(1) Plan for cases where you run out of codes.  The logic that populates the tblAudience table should should continue to include eligible people who haven't received a coupon until they are finally issued a coupon.

(2) Build a system to alert your Coupon Manager when you're getting low on coupons.   Run this as part of your automation that distributes codes.  Find the value for
SELECT count(strCoupon) FROM tblCoupon WHERE EmailAddress IS NULL

If it's > 999, set tblReminder.numReminder = 0
If it's < 1000 and tblReminder.numReminder = 0 then set tblReminder.numReminder = 1
If it's < 1000 and tblReminder.numReminder = -1, do nothing

if tblReminder.numReminder = 1 -- send an email and set tblReminder.numReminder = -1

(3) Make it possible to support multiple Coupon Types ($5 of a purchase of $20, free download, discount subscription, whatever).  This would require another column for coupon type in both tblCoupon and tblAudience as well as a new table to describe the Coupon Types.

(4) Put limits on the number of a particular Coupon Type a person can earn in a time frame to avoid someone gaming the system.

(5) Create Coupon Types with fixed or limited-time expiration.  (The website would ultimately handle if the coupon is valid or not, but this allows you to put the expiration date in your email.)

(6) Create a separate table of redeemed codes and create an endpoint so that your website can query issued codes so that someone can view their code online, or so that your CRM can record that a coupon has been issued.   Nightly, remove redeemed codes from tblCoupon to keep the table clean and lean.

(7) Create a daily/weekly summary email to your Coupon Manager of all the unissued codes so they can make sure the codes are being issued at the rate forecast and so they have even more warning if it looks like they're going to run out of codes.

(8) Make it possible for your Coupon Manager to replenish the codes by dropping a file on your FTP server or by pushing new codes into your ESP via API so that you don't have to get involved in keeping codes topped off.



Saturday, March 16, 2019

Avoid AI #Recruiters - @wadeandwendy from @randstad is no Alexa

Randstad is a third-party recruiting firm companies use when they can't or aren't interested in directly recruiting.  Their Twitter header boldly proclaims "human forward." though I'm not sure what that means.

click on any image in this article to enlarge

Randstad themselves have outsourced (fourth-party?) the communications of recruiting to Wade and Wendy, which bills itself as the first AI Recruiter.  In reality, it's not.

First, their emails have MailChimp code showing.  I've tweeted this to them but they continue to send me emails with it, so maybe there's no I, A or otherwise, there.


Second, the emails only have the option for "Yes" - there are FAQs and even an email address, but it doesn't appear that the email box is monitored.  You'd think an Artificial Intelligence company would have something in place to handle incoming messages.  I wrote to them to say that the role wasn't a fit for me, the location was all wrong and even more importantly, the company they were recruiting for wasn't a company I'd ever consider working for.

I never heard back.

Until I got a reminder from Wendy.


So, I looked more closely at the email.  (This is the second company they emailed me about - I would work for Philips - I've stared at their monitors in hospitals on so many occasions that I have a strong appreciation for them.  My first portable CD player back in 1990 - took 10 AA batteries - was also a Philips.)


No real way to select "No" in the email so I clicked yes.  I was prompted to register with my LinkedIn, Google or Microsoft accounts or to create a Username and Password.  So, signed in/registered, and then I met Wendy.

Wendy is a glorified chatbot. Maybe not even glorified.  Maybe not even a chatbot.  More of a progressive form.  Here's my chat:


Red Circle = this was my only choice.

Blue Circle = I had yes/no options.

Green Circle = I had multiple choices, perhaps as many as 9, but it captured the first one and then moved on.  You'd think an AI would want to collect as much data as it could, allowing me to select multiple options, such as Company, Role, Location, I'm Happy Where I Am, and so on.  If I could only pick one, I would have picked Company.

However, I clicked on Role first, so that's what it selected.

Never once did it prompt me for any free-entry typing.

The survey link at the bottom isn't linked - probably to reduce the number of submissions telling them their product is a steaming pile of dog droppings.

Which makes it all the more interesting that Wendy is again writing to me today about the same role at another company.  The Artificial Intelligence Recruiter wasn't paying attention when I told it that it was the wrong kind of role.  

So, with no "No" option in the email, I've clicked Yes.  I'm now asked to sign-in again.  The Artificial Intelligent Recruiter has forgotten who I am.

So, went through the "chat" - the first thing I notice is that the content and prompts are 100% the same. The Artificial Intelligent Recruiter has forgotten it's already had this conversation with me and so it re-introduces itself and tells me the exact same thing it told me last time.  (Which wasn't interesting the first time and wasn't new this time.)


While I wanted to click "Location" or "Other," for the sake of this experiment, I went with "Role" - we'll see if Wendy is capable of learning of it will keep sending me Project Manager roles.  (Unless this post gets me suppressed from their mailing list... yes, please.)

From now on, if I get any more of these, I'm going to click "No" with the reason "Other" - and if it lets me type, I'm going to tell them I'm not interested because of Wendy.
ar·ti·fi·cial
adjective

1. made or produced by human beings rather than occurring naturally, especially as a copy of something natural, not existing naturally; contrived or false.
synonyms: synthetic, fake, false, imitation, mock, simulated, faux, ersatz, substitute
2. insincere or affected.
synonyms: feigned, insincere, false, affected, mannered, unnatural, stilted, contrived, pretended, put-on, exaggerated, actorly, overdone, overripe, forced, labored, strained, hollow, spurious
3.conventional as opposed to natural.
(from Google)
Wendy leaves a bad impression and suggests if recruiting is boiled down to a crappy form-based interface, it's only going to recruit people willing to suffer the crappy form-based interface.  (CyberCoder's field-merge approach or LinkedIn's InMail are much better because if you reply, you're immediately talking to a person.)

Monday, May 21, 2018

Why We Don't Fix Potholes or Bugs (A Work-Related Post)

Nov. 2014 - I've been running this around in my head for almost a year now trying to figure out what to do with it.  I had just read this post from the Seattle DOT and then the next day participated in a conversation with a colleague frustrated that no one was paying attention to the maintenance needs of the software and tools we were supporting.

So here's the post: It’s your money, where is it going? (Seattle Department of Transportation, 02/25/2014)

May 2018 - Apparently I wrote this in email and then emailed it to Evernote back in November 2014.  I just re-discovered it again and I think it still holds true.

~~~

A weird interest of mine is transit and development. Not sure why, but I guess it's because I like to see change, I like to see how something that most of us just think of as pavement is much more. And I definitely love to see the thought that went into the process, the alternatives that were considered, stuff like that.  There are definitely parallels to the work I did in my last job - you saw specific outcomes, but you didn't see the thought process that went behind the scenes.  But a few observations about roadwork and the software development lifecycle at companies where the software is a tool/enabler and not the end product itself:

NEW STUFF IS ALMOST ALWAYS OUTSOURCED

There was always a frustration that other companies were getting to have fun, to build the new things, to walk away when it was complete.  That's just the nature of the beast. If you want to build new stuff, you need to work for the builder, not the one needing the work done.  If you're working for the customer (who wants the building done) then your role will always be more about support, maintenance and modest enhancement, not about creating brand new.

NEW STUFF IS MORE FUN

You can sell the stakeholders/voters on new stuff. Getting them excited about maintenance is probably a non-starter. The best you can do is be ready to address their negative excitement (frustration, rage, anger) when things break, when they encounter potholes, etc.

UNTIL THE POTHOLE AFFECTS THEM PERSONALLY, REPAIR AND MAINTENANCE AREN'T ON THEIR MINDS

Wait until they're receptive, until they want the pain addressed and are ready to experience a different pain (budgetary) to get it fixed.  For the good of the order, there is some work you must do, especially if failure to do it (say, bridge maintenance) offers a risk of pain too great.

THERE'S NEVER ENOUGH MONEY FOR ALL OF THE REPAIRS AND MAINTENANCE

It would be nice if everyone who bought a car started putting money away every month for eventual replacement of tires, or everyone who bought a house immediately started socking away money for eventual exterior painting, new roof and new carpets. But we don't work that way. It requires a level of discipline that's not really in our human nature (at least Americans - I can't speak for other countries). So the best we can do is assess and prioritize.  We keep a good list of what's outstanding and then we work on the most urgent at that time.  The government and organizational divisions of large companies often have the ability to raise additional funds whether it's by passing an ordinance, raising a bond, or asking for more from the voters. Families rarely have that luxury.  And that's why we don't all have our houses painted every few years and instead wait until there's pain (embarrassment, threatening letters from HOA or Code Compliance, etc.)

GREAT STATUS UPDATES ARE IMPORTANT

If you are involved in support and maintenance, especially with someone else's money (or at the expense of something else), great status updates are a must. Your stakeholders (and funders) must be confident that they made the right decision - that their pain is being addressed by an expert - that they've made a wise investment. Especially since it's always at the expense of something else.

(Cross-posted to LinkedIn)

Sunday, May 20, 2018

The Robots are Coming! (A Work-Related Post)

The robots are coming. In a lot of cases, they are already here.

No, not a T-800 Model 101 Terminator here to kill us all, but I do mean job-eliminating technology.

I use the terms interchangeably within this exploration, but I mean anything that has made something easier, faster, cheaper, etc., etc., etc.

The printing press gave monks more free time, the Model-T gave meant far fewer horses were needed for transportation and the mobile app means I don't need to stand in line to place my order at Starbucks and can more quickly get to the line I need to stand in to pick up my beverage.

Whenever I hear someone say "a computer can't do my job," I'm a little sad - very rarely is this really true, and more often than not, it means that person will be surprised when their job is replaced by automation (either a computer program or a robot).

If you say this around technically minded people, their response will be "challenge accepted!"

The printing press did not eliminate all books created by hand, the automobile did not replace all horse-drawn modes of transportation and the Starbucks app didn't replace the cashier.  But it has changed their jobs, it has reduced some work, reduced the number needed, and for the bookmakers, baristas and horse-owners (because the horses didn't really get a say), the end result has changed:

  • hand-crafted books are a luxurious gift - but we don't buy them in large numbers, so the field will only employ a small number of people
  • baristas have more time to give individual service to those who want it - but Starbucks needs fewer baristas
  • horse-drawn carriages offer you a magical memory, even if now most trips go from point A to point A - but we need far fewer horses and horse-driver-guys (Google says "coachmen")
  • computers can examine X-Rays and MRIs in greater detail with amazing speed
  • forklifts allow large amounts of things to be moved safely and quickly
  • robotic assembly lines build and paint cars
  • computers can digest news articles and make financial trades on the stock market in less than a second
  • email has dramatically increased the communication opportunities for the hearing impaired
  • self-driving cars reduce the number of injuries and deaths AND provide more mobility options to those who can't (or don't want) to drive

So... what does this mean?
Your job may be at risk. But it's not time to panic.
You have several options before you:

1. Be really great at what you do.

Be so good that when your industry shrinks, your role survives because your customers demand it.

This means you're the barista they keep when they lay off several others that are no longer needed.

That means you create magical vacation plans that someone can't (or doesn't want to) do with a visit to Expedia.com.

That means you are creating the trends that didn't exist before, whether it's fashion or design or architecture.  (Be forewarned, you'll face some competition here still. Computers are getting better at prediction, but their work so far in journalism, screenwriting and fashion design is still in its infancy.)

2. Figure out how to eliminate your own job.

If you truly understand your role and how it fits into the organization you work for, then you know where things are suboptimal.  You know where improvements would make your life easier, allow you to do more, allow the work to fall to a lower-paid employee because the complexity has been eliminated.

If you can find the repeatable elements in your job, the critical decisions that can be codified into an algorithm or framework, the needless complexity that needs to be streamlined - then you are in the perfect position to start the process of eliminating your own job.

And in doing so, you may become "the guy that runs the robots." And maybe not just at your company, but maybe for as many companies as you have time to support.

Rarely is it your job to "stay in your little box and do your job" (and if it is, it's time to find a new job!) - no, your job is to "leave things better than you found them." Better, faster, stronger, smarter, safer, cheaper, more profitable, less polluting, more efficient, more resilient, empowering, accessible to more of the world... to name a few. Take your pick. Or invent your own.

Grow - because if you're not growing, you're dying.  And if you're just staying in your box, then maybe a robot should do your job. (Or at least that's what I said back in 2011.)

Now if the Starbucks at the grocery store near me would just get connected to the app.

(Cross-posted to LinkedIn.)

Saturday, April 28, 2018

Get Started with Testing (A Work-Related Post)

from armydre2008
In Marketing, testing is a great way to hone in on what resonates with a customer.

This is not meant to make you an expert in testing, but hopefully get you started with simple testing or help you create better tests if you feel like your testing isn't yielding the results to expected.  If you pursue testing, don't let this be the only article you read on the subject.

Always Be Testing

When you're not testing, you're not learning or improving. There is a dangerous catch though - do not test just to say that you're testing.  Tests should build upon earlier learnings and should push you towards valuable corporate objectives (sales, newsletter signups, etc.) and not towards less quantifiable results (like "time spent on site" if you're not an online game or video platform).

Your testing should be coordinated with others who are testing and you should be documenting all of your testing so that others can learn from it and leverage it as the basis for other tests.

Also, be ready to re-test. When I worked at a video game company, if we tested on one video game's website and had good results, we'd test again on another video game website to see if it was a universal truth or if it was only valid for the audience of the one kind of website. When I worked at a non-profit, we repeated tests against different products because we knew that what worked for recurring giving might not work for one-time-gift appeals.

Vocabulary

Let's start with a few basic terms:

Hypothesis - this is your theory, created in advance, that describes what you are testing and what you expect the outcome to be. This should be detailed and precise.

Test - an attempt to find the relative performance of two or more distinct items over a set period of time.

---

Experiences - this is your control plus all challengers.  I like to label these A for the Control and B, C, D, etc. for the Challengers - this is where the A/B/N comes from.  (The labels help if you've got a table of results and little space.)

Control - this is the as-is experience.  This is your current website or email or advertisement or store layout or whatever.

Challenger - this is one an entity that has a chance that you want to test. On a website, it might be using blue buttons instead of green.  You can have multiple challengers in a single test.

---

Metrics / Success Metrics - this is the one or more things being tested.  I like to label these 1, 2, 3, etc. The labeling also helps if you've got a table of results but little space. If your tests are self-optimizing, metric 1 should be the one that's the trigger.  Often you're measuring rates (click rate, sign-up rate, purchase rate), not a raw number.

Conversion - this is my catch-all term for a tally mark counted towards a success metric. So it may be a click on a button, a view of a video, an actual sale. This is the term most likely to get me angry comments suggesting I'm a hack and that I should be calling them something else.  Comment away.

Results - this should prove or disprove your hypothesis.  The only failed test is one that is inconclusive. Otherwise, even a test that performs contrary to your hypothesis is still a chance to learn.  If you find that you are consistently wrong in your hypothesis, you may need to let someone else start coming up with future hypotheses.

Statistical Significance - this tells you that you can trust your results.  This is the likelihood that if you repeated the test you'd get the same results.  This is a really important topic as failing to achieve statistical significance makes your tests worthless and leaves you defenseless if someone challenges your results.  This can't be stressed enough.

Lift/Drag - typically you report on the performance of the Challenger over the Control, this tells the direction.  If it's not statistically significant, substitute the terms "Trend Lift" or "Trend Drag"

Winner/Loser - the experience that performs best towards your desired success metric, with statistical significance

Added Learnings - this is something you've observed, but not something you were specifically testing for.  If these seem valuable, it is important to write a hypothesis and give them their own test.

---

Multivariate Testing - a whole different topic. This is where you're testing multiple items at the same time. It might be button color, wording and photos. The math is far more complex and it's harder to know which item or items caused the change.  Best done with a website testing tool.

Self-Optimizing - some website testing tools will start to start to show the trending winner more often. If you're testing to make money, this helps you start to make more money quickly.

Ground Rules

Having some ground rules that apply to all testing will be beneficial when results are hard to understand, when someone's pressuring you for results, if you are wondering if you need to invalidate a test and start over or if you're trying to decide if a test is even worth performing.  Create your own to meet your specific needs.

Here are some of the types I've used in the past.

1. A test must run for at least one month and no more than three months.

Why: You need a reasonable timeframe. If you try to read the results too quickly, it could be a fluke or be influenced by things beyond your control - though it is possible that you've hit on some magic and found something so in need of optimizing that it was an instant success.  But, if you drag things out too long, again, things beyond your control can influence your test.  If you can't get to statistical significance in three months, it would also suggest that you're (a) testing something that has no impact on your customers; (b) you don't have enough traffic or (c) you're not being bold enough in your testing.

2. The test must receive at least 10,000 impressions before any results can be assessed.  

Why: Similar to #1, this helps make sure that you've got a big enough audience.

3. A test must receive at least 5,000 impressions a week to remain viable.

Why: If the volume is too low, it may not be worth it to test.  Either you're running too many concurrent tests or you're optimizing for something that may be of low value.

4. An experience must have 300 conversions.

Why: Similar to #3, tries to make sure you're not spending time on low value tests.  Of course, if each conversion is the sale of an Aston Martin, that's different. And an example of why you should establish your own ground rules.

5. Anything less than 3% lift or drag is considered "no change."

Why: You want big changes.  You want to take the kinds of risks that give you solid learnings.  If you can only push the needle a small amount, you're being too conservative in your testing.

6. Results over a year old should be re-tested.

Why: Things can change so much in the course of a year. Technology, world events, consumer tastes are ever evolving. What worked a year ago may make no sense now.

7. A test cannot have more than 4 experiences (control + 3 challengers).  

Why: If you can't pick the best four experiences, you may need to think about what you're really trying to measure for. It might be that instead of questioning whether your buttons should be red, blue, green, purple, orange or yellow you should first be testing whether you should have cold or hot colors.

8. Tests cannot cross seasonal events or major calendar events relevant to your company.

Why: This is especially important if you're in a different group from your advertising team.

9. Control/Baseline/As-Is has to be measured during the test

Why: As the old saying goes, past performance is no guarantee of future results.  You need to know how your control is performing at the same time as the challengers. If you can't do this, your test results will be suspect.

Let's Test!


Step 1 - Form a Hypothesis

"I believe that green buttons on the product page will result in more clicks to put items in the shopping cart than our current blue buttons.  A previous test (link here) showed that when we changed the button size from 20px tall to 40px resulted in more clicks (and more sales). This further tests the notion that our buttons are often overlooked."

Dissecting the hypothesis:


  • Control - blue buttons on the product page
  • Challenger - green buttons on the product page
  • Theory - blue buttons are overlooked by our audience ultimately causing fewer sales
  • Builds on - past test to increase button size
  • Expected outcome - higher click rate for challenger 
  • Measurable metrics - clicks, visitors per experience
  • Baseline/As-Is - click rate (clicks over visitors) for the blue button control during the test timeframe

Plan carefully to avoid creating a reporting nightmare (see below).

Step 2 - Build the test

You'll need to make sure you can serve up the different experiences and measure the outcome.  If it's a website, can the website display the different experiences and track the results independently?  You need to know how many people saw the blue button and how many people saw the green button and how many clicked on each button.

And then you need an easy way to get to the results.  If your dev team is building this for you, the work's not done until you have a way to see the results and a way to turn the test on and off.  There are a number of tools that can make easy work out of this so that you don't need a dev effort to do a website test.

Of course, if it's an email, it's just a matter of splitting the audience and sending different versions to each audience. If you're testing store layouts, you might have to have multiple stores in each design to test.

Clear away any other factors that could influence your test.  If some of your acquisition funnel traffic performs differently, steer them clear of the test and do not include them in the test results.

Step 3 - Check the results

Based on the traffic, I like to present results every 1 to 2 weeks during a test.  Sometimes other stakeholders may decide to end a test, either because the results aren't telling us, or because we've reached statistical significance/confidence and it's time to move on to the next test.

You are always measuring in pairs.  If you have two experiences and one success metric, it's one measurement.

Click Rate of Blue Buttons vs Green Buttons =
A vs B (blue vs green)

But, if you get more complex, your assessments need to get more complex.  Four experiences and one success metric is six measurements:

Click Rate of Blue Buttons vs Green Buttons vs Red Buttons vs Yellow Buttons =
A vs B (blue vs green)
A vs C (blue vs red)
A vs D (blue vs yellow)
B vs C (green vs red)
B vs D (green vs yellow)
C vs D (red vs yellow)

Two experiences and two success metrics is two measurements:

Click Rate of Blue Buttons vs Green Buttons
and Sales Rate of Blue Buttons vs Green Buttons =

Clicks: A vs B (blue vs green)
Sales: A vs B (blue vs green)

And of course four experiences and two success metrics is twelve measurements.


The Super Very Good Absolutely Important Notion of Statistical Significance

In short, Statistical Significance asks "If we run this test again and again and again, will we get the same results?" It involves a lot of heavy lifting of your pairs of data.  You may hear talk of "p-values" but for our purposes, we simplify with lift/drag or winnner/loser and "confidence."  The best site on the internet to make this measurement is kissmetrics.com/growth-tools/ab-significance-test/

How it works: You punch in your impressions and clicks and it will give you conversion, lift and confidence.  Experience (B) is performing better, just from the conversion rate, which you can get yourself with Excel. Even though it has a lift of 2%, it's not yet statistically significant.


But, compare with this one - the lift is greater, the confidence is greater and now we've reached statistical significance.  (You should feel good when confidence exceeds 95%.)


Enter these (or other numbers) into the tool to see how the results change.

If you work with someone who regularly likes to question facts or "go with their gut," statistical significance is a powerful argument.

Happy Testing!

Your first tests are like the biggest chisels and hammers applied to a block of granite - they can get you to a rough outline for focus. But you need to build upon those tests with new tests with greater precision and focus. Refine with more specific tests or to more specific audiences and soon a picture will emerge.  Because if you don't refine, all you'll end up with are a bunch of rocks and dust.

One last thought... what if you just have data?

If you had no hand in deciding what was captured, how it was captured, when it was captured or who the participants being measured were, then all you can do is attempt to make forensic guesses about what happened -- which you then need to validate with new tests.

(Cross-posted to LinkedIn)

Tuesday, April 17, 2018

Bring Me Problems, Not Solutions (A Work-Related Post)

Often we hear the mantra "Bring me solutions, not problems."  This is great when you feel adequately empowered by your boss, if they have a history of helping you refine your solution and then give you the runway to execute.

Of course, the flip side is the lazy supervisor. They can't be bothered, so if something's wrong, they expect you to have the solution.

But there's another yet option, one that can be completely refreshing at times.  Most often, it's the begging plea of your most technically minded colleagues, especially those in IT:
Bring me problems, not solutions.
In its worst form, this is the mandate from someone who doesn't trust you. You know how it goes.  The condescending look (and possibly an eyeroll), "You can't get your document to print?  Move!" they exclaim as they situate themselves in front of your computer, tapping away.  "Fixed," they proclaim minutes later, expecting you to be in awe of their skill.  Sadly, you're more annoyed at their bedside manner or bewildered at being left in the dark, not knowing what they did, worried that it'll break again and you'll still be clueless to fix and have to once again subject yourself to the abuse.

But, in its best form, this is the rallying cry of someone who wants to partner with you, who wants to come alongside you and contribute to the outcome. They recognize your skillset and they're honored that you asked them participate with them in making magic.

When this happen, it can be fun.  You're going to get more insight, you're going to be able to better stress-test your idea, you're going to be able to solve in the context of the larger picture and in coordination with other efforts going on in your organization.

It takes more time and some people are hesitant to cede control or admit they haven't gotten it all figured out, but when you have the opportunity, be the one who says "I want to help." You'll be amazed at how quickly word gets around that you're someone who should be consulted and who can help get things done.

Cross-posted to LinkedIn.

Monday, January 09, 2017

Do you have two Twitter accounts? If you're a business, you should.

After tweeting to a brand recently, I went and looked at their Twitter feed. They sell microwavable popcorn. So they had marketing tweets about movies and popcorn, but then there were a lot of tweets that looked like this:


On the web, Twitter will hide all tweets that start with @ - you can find them under "Tweets & Replies" - but in the app, they're all just displayed right away.  It's clear that they're using a cut-and-paste (not that there's anything wrong with that) and that they are proactively and quickly addressing concerned customers.  (Yay!)

But... This brand was trying to foster the idea of watching movies and popping popcorn, curling up with a buttery treat, but in the meantime, it was cluttering up its own feed with what I can only assume were people complaining that they burned their popcorn.

What this brand needs to do:
They need to separate their Brand (Marketing) Voice from their Customer Service Voice.  You can find plenty of examples of companies that currently do this.  Hilton (@HiltonHelp) and Comcast (@ComcastCares) come to mind. The company I work for uses our stock ticker + "Assist" but most of the ones I've see online use "Cares".

They continue to promote @PopcornCompany on their products and they continue to use @PopcornCompany to tweet about watching movies and watching tasty popcorn and whatever else will inspire people to buy more popcorn.  But when someone tweets with a problem, the response should come from a different Twitter handle: @PopcornCompanyCares.  There's a couple of reasons:

  1. You separate your marketing (we're awesome) from customer service (this guy doesn't think we're awesome, let's see if we can make him happy again)
  2. (Optionally) You can continue the conversation online -- maybe you don't need to switch to email just yet. Though there may be lots of valid reasons why you would, especially if you've outsourced your social media or have a hard and fast line between marketing and customer service.
  3. The longer Twitter handle @PopcornCompanyCares immediately signals that you do care and that the customer has reached Customer Service even if they haven't encountered this naming scheme yet from other companies.
  4. The longer Twitter handle @PopcornCompanyCares also reduces the length of complaints by a few characters, causing customers to be more concise and less colorful in their dissatisfaction. (Sorry, it's true.)
If this sounds like your company, quick, go register that second Twitter account ASAP.

Monday, September 14, 2015

Celebrating New Customers

(cross-posted on LinkedIn)


Much has been said about enticing prospective new customers with deals you wouldn't give your existing customers. (The courtship is over, no need to keep wooing.) The unfairness of it all. Fine. No need to revisit that, then.

But I got this in the mail the other day and it made me think about the other side of the deal. The courtship is over. I've said yes. Now what?

Recently jumped to the other side of the local telecommunications duopoly. To hear them tell it, they've changed their ways. They may be one of the most hated companies in one of the most hated fields, but according to them, they've recognized the error of their ways and have been trying to be better.

To their credit, the installation window was short, the installer early (calling ahead first to make sure early was OK), they were friendly, personable and showed no outward signs of annoyance when they realized they had to run a new line from the street when we discovered I had severed the existing line. Same of the different telephone support I worked with in the U.S. and Philippines, personable, friendly, knowledgeable and accommodating. Upsell attempts for additional projects weren't pushing or overbearing.

So I was actually quite pleased to receive an envelope marked "Inside: Something just for you from [brand]." (Yes, it's clear what brand this is, but this isn't a post about this brand, it's a post about what happens after the deal is done.)

What could it be? A thank you post-card showing a bunch of happy employees smiling and waving? Maybe a surprise $10 gift certificate to a local restaurant*? Maybe a discount off of a future bill? A free limited-time upgrade? A little 2016 wall calendar with some nice nature pictures and their logo**? A special customer service number? A survey?

Sadly, it was none of these. Instead, it was a list of additional products I could buy. We had just completed a transaction in which both parties had satisfactorally agreed on the terms: I want this product you offer and am willing to pay the price you have asked. I have endured your upsells during sign-up because you've been pleasant enough and I know that you have to ask. I get it. That's fair. But I was quite clear on what I wanted, and was even willing to give you reasons why your other offerings weren't for me.

But the ink is barely dry and now you're coming at me for more money? I'm not even sure how it was "just for me" unless it didn't include the one item I already purchased, but I didn't get that far, dropping it instead in the recycle bin thinking "same old, same old." Because if you had listened while you were courting, then you would have known not to send that.

What are you doing with your new customers? Your customer always has a choice. Today, they made a great choice and chose you. Affirm that decision and continue the courtship to make sure that they continue to choose you. Surprise, delight, be excellent. Be the company your customers and employees can't stop gushing about.

So, let's think specifically about Xfinity or Comcast (seriously guys, what are you called? I'm so confused.) - can you imagine someone saying "You have Comcast, too? Aren't they awesome!" and high-fiving?

Or Tweeting about being excited to have an appointment scheduled for new service?

Or running out and putting a Comcast bumper sticker on their car?

Or standing in line outside the store to buy the latest router?

You might be thinking "It could never happen in a million years." I don't believe that's true. I believe that if they wanted to, Comcast could be adored by its customers, loved by its employees, admired by its suppliers, contractors and competitors. I believe books could be written about the transformation.

You probably snorted derisively, but if you think about it, you'd probably begrudgingly admit that it is possible, but that you don't believe that the leadership of Comcast would ever bother.

But if it's possible for Comcast, then it's possible for your business. And undoubtedly much easier. So... what are you doing to affirm the great choice your customer has made?

*Pro-tip: Getting your customers to do business with each other is a great retention and word-of-mouth strategy.

** Pro-tip: For our house and home-office, there will always be a use for a small calendar that we can pin to a bulletin board or attach to a magnetic surface.

Friday, July 24, 2015

Using the SQL DELETE function in ExactTarget Queries

The Salesforce Marketing Cloud (aka ExactTarget) offers you the ability to write your own SQL statements to pull together data from multiple Data Extensions (tables) into a single table.  It's really handy and quite powerful in its ability to write complicated JOINS. (It's also great for writing small queries against a Data Extension to update that same data extension - that is, you don't have to do it all in one massive SELECT - instead, you can write lots of little ones, each drawing from a different table if you need to.)

However, everything you want to do has to be done with the SELECT statement depending on where you target the output (to itself, to another table) and the method of write (APPEND, OVERWRITE, UPDATE) allows you to approximate UPDATE and INSERT but there's no native DELETE functionality.

That's probably a way to protect us from ourselves - DELETE Is a pretty dangerous command.

You could always overwrite the data with something you don't want or something that would be ignored by your AmpScript or the mailing engine, but what if you truly want to delete some content within your table?

Here's my quick trick.

Scenario (completely made-up for the purposes of this post):

I have a number of different emails that I want to send my subscribers.

  • Balance Transfer Confirmations
  • Loan Approvals
  • Loan Rejections
  • Statements Available Online

They don't need to instantaneous (they're not a password reset) and usually, there will be a batch. The new records could come from an automated process (some other system drops records on the FTP server) or manual (a personal uploads files to the FTP server).

The business could create new message types (maybe "non-sufficient funds" or something) at any time.  They may have an audience ready to go at the same time they first inform me about the new message.  They need to be able to tell me that they've uploaded a new audience and provide me the design of the email.  (They can't be expected to wait for a new process with new instructions on how to upload and keep track of lots of different methods of uploading.)

I don't want to use an API because it doesn't need to be instantaneous and because I want more visibiility and prefer the reporting of automated sends versus triggered sends.

How to Manage:

I need a pool or queue where new recipients can wait (with their data) until sent.  Once sent, they need to be removed from the queue so that the queue remains lean and there's no risk of double-mailing - it should only contain people not-yet-mailed. (This will also show me if a new message type has been introduced that they didn't tell me about or if a particular message is failing.)

So I have a Data Extension with "Message ID", "Subscriber Key", "Data1", "Data2", "Data3", etc. An automation pours in new records as it receives them on the FTP site (whether placed there by an external process or by a person).

Process:

So essentially, I need:

(1) Find new records for a message type in the queue.
(2) Mail those records.
(3) Remove them from the queue.

How?

(1a) Select matching records by message ID
(1b) and copy them into a message-specific table as an overwrite (the table is blanked out so only new records appear in it)
(2) Mail that table (with optional suppression from 3b)
(3a) Remove them from the queue.
(3b) Optionally add them to a suppression (if it's a message they can only receive once ever) or to a historic log (so that I can see what I sent when for compliance purposes)

Everything about this is super-easy except 3a: Remove them from the queue.

Actually, that's easy as well.

Create the Effect of a DELETE function using only SELECT

You'll do this by using two tables.  Copy the records you want to keep from table a to table b and then copy table b back to table a.

Step 1: Create a new data extension.  It should be based on your existing data extension.  If your original DE is "queue" then call it "queue_transit"

Step 2: Create a new query called "queue_reduce_balancexferconf".  It should simply be
select * from queue where messageID<>'balancexferconf'
(where 'balancexferconf' is your messageID)
and it should be set to "OVERWRITE" and target "queue_transit"

Step 3: Create a new query called "queue_update".  It should simply be
select * from queue_transit
and it should be set to OVERWRITE and target "queue"

Step 4: Create a program (or add to your existing program) that runs
- query: queue_reduce_balancexferconf
- query: queue_update

And that's it.  These will run really quickly because your pool will remain small.

You will need a new query for step 2 for each message, but it beats re-creating the intake process (file locations, trigger, import, data extension, documentation, training, meetings, etc.) for each and every message that the business wants to quickly add.


Thursday, July 16, 2015

I Don't Work Here (A Work-Related Post)

(Also posted on LinkedIn)



Well, I'm biting the bullet.  I'm going back to the cable company.  A few years ago, the phone company offered us a better deal on the phone-internet-tv bundle (with the TV being supplied by a well-known satellite TV provider).
And then over time, we began cutting cables.  We dropped satellite in favor of internet TV and then dropped the landline in favor of our cell phones.  
Suddenly, internet from the phone company wasn't a good deal.  No more bundling discounts, no more introductory rate.  And it was failing us as useful, reliable internet, especially uploading (Flickr, FTP for work and outbound wifi calling on our cell phones).
So, the internet company once again looked like the better deal.  I could purchase my own modem, so all I needed them to do was "flip the switch."  Or at least it seemed almost that easy in my mind.
I argued with countless online chat folks, canceled several in-progress orders and finally turned to social media.  I was in regular contact with someone on their Twitter feed who said that they could turn on service for us.  No installation charge, no sending anyone to the house.  They could just flip the switch.  Cool.
And then they went radio silent.  Not sure why.  Possibly lost in a Hootsuite backlog or something.  So I called in to the cable company.
And finally, finally, finally, someone explained why there might be a need to have someone come to the house. A good, solid, reasonable answer I could accept. In most houses, cable outlets are already where people want them.  So when people switch from cable to satellite, the satellite guys will often cut the cable line and splice in their satellite.  So even if the cable company flips the switch, the line is broken somewhere.
Duh. That makes so much sense.
But me, as a customer, didn't think of that. I only saw a company (not well-liked by a majority of its customers) trying to squeeze an extra $50 out of me.
Finally, an answer that made sense.  So they went ahead anyway and tried to see if they could flip the switch. And they scheduled a technician as a backup, just in case it didn't work.
And I'm satisfied with the $50 charge I'll be paying for a technician.  (The line was cut, I attempted to slice it myself but it didn't work as the modem hasn't sprung to life.)
And I'm happier because I feel more informed.
The people in the online chat never bothered to offer up this kind of information. And I'm probably not the only one who's wondered about this.
Is there any parts of your customer service process that have become so second nature to you that you forget that your customers aren't clued in? Is there any place where taking a few more seconds to understand where they're coming from will help you to create a more well-informed, satisfied customer? Are you surveying your customers in a meaningful way where you can find these kinds of gaps and questions and work to address them proactively going forward?
Never get too far from your customer, never stop stepping into your customer's shoes. And don't say tell me "this call may be monitored or recorded for quality or training purposes" is the answer because that's too passive.  That doesn't automatically guarantee growth, improvement and movement towards awesome customer service experiences.