Comcast is the Honey Badger
I have had a long and storied consumer relationship with Comcast. I have had cable modem service with them for most of the last 20 years, at four different residences.
Good times, bad times, you know I've had my share...
The Bad Old Days
Back in 1997, after I graduated college, I moved out to Maryland to take my first full time job. I was lucky enough to live in an area in which Comcast (and no one else, of course) offered cable modem service. I had a cable modem briefly as a student at MSU so I knew how great it was compared to dialup. Back then, cable modems were crude by today's standards, and not nearly as fast. Even so, it was clear to me that they would eventually beat DSL in the high-speed internet wars as they were just so much faster and potentially available in more areas.
My service started out great, but before long, it developed into an intermittent outage kind of scenario. At times the service was extremely fast, but at other times it would slow to a crawl or disconnect completely. This of course enraged me, and I embarked on many hilarious-in-retrospect misadventures with customer support. I even "blogged" about my engagements with them and how horrible it was. I wish I still had a copy of that rambling screed. In any case, their reputation as being the worst company in America was (and is) well-deserved in my opinion.
Very long story short: there was an issue with the line outside my apartment complex, and I eventually learned the direct line to the local Comcast honcho, who I would pester every day, pleading with him to schedule a line tech to come out and fix. Eventually he relented, but only after he made me promise to stop calling him. He also explained in no uncertain terms that it wasn't cost-effective for him to do this, which is why he didn't do it without me basically extorting him into it. Asshole.
So hopefully it's obvious why I say why Comcast is the Honey Badger - they don't give a shit.
So hopefully that helps explain my mindset toward Comcast. I've continued to use their service almost continually since that time, but only because they were usually the only game in town, at least for decent Internet. I always preferred DirecTV for television, but even when I had them I still had my Comcast Internet service.
Forward Progress?
Generally since those days, I'll admit, my service has been pretty good. Note that I said service, not customer service, because nothing could be further from the truth when it comes to engaging the human side of the Comcast enterprise. In fact, I don't think it's an exaggeration to say that any time I've ever called them to report a simple problem or change a service, something invariably goes horribly wrong or I end up getting inexplicable new charges on my bill, which then usually results in literally hours of calls in which I repeat my identification data and problem description to a never-ending parade of hapless service reps.
With that, I'll say that where I've lived the last seven years, I've had Comcast for Internet and TV the entire time, with nary a service hiccup.
Until this week.
Tuesday
Now, as I explain what happened, you might think this is not a big deal - and maybe it isn't, especially in light of the excellent service I'd been receiving at my current residence. But given the history, I can't help but maintain a zero-tolerance policy for their bullshit and be a bit more proactive than your average customer.
I like to carry my Macbook Pro with me more-or-less wherever I go, including to work. I use a BoostMobile WiFi hotspot so I can stay connected, and I often will remotely connect into my home network to control things there. On Tuesday, while at work I started noticing that my connection to home was very slow. This could be either due to my hotspot or due to my home connection, but it's easy enough to find out. There are several decent tools to check your Internet speed:
- Fast.com - Netflix's simple site to test your downstream bandwidth. Doesn't measure upstream speed though.
- Speedtest.net - the old standby. Uses a sluggish Flash interface but gets the job done.
- Speedtest-cli - Short for SpeedTest Command Line Interface. This uses the same test as Speedtest.net but from the command line. Can be installed on most *nix distributions with whatever package manager you have handy. Will be useful later on.
Anyway, I checked bandwidth on both sides and it was clearly my home connection. While I pay for 75 Mbps downstream and 10 up, I usually get close to 89 down and just shy of 12 up most times I test. But here I was getting erratic downstream speeds, sometimes less than 1 Mbps, sometimes as high as 50, but it was the upstream that was really getting murdered, and usually clocked in at something like 0.1 Mbps.
I checked Comcast's Support Forums, which are filled with people in similar (and worse) situations. Some people reported slow upstream speeds that sounded very similar to my issue, but I couldn't be sure. So I steeled myself for another round with the worst company in America.
When it comes to complaining to customer service, I have learned in recent years to opt for online chat vs phone calls in most organizations, so I did so using my more functional BoostMobile connection. The rep said nothing was wrong with my signal (I hadn't yet learned how to interrogate my cable modem's signal readings myself because I've never had to) so there was nothing he could do. I was still at work, and I didn't have time to pursue it further.
By the time I got home, my service was back to normal. It had been in rotten shape for about 6 or 7 hours. I shrugged it off, and hoped that it was just a temporary undocumented service outage.
But then it happened again on Thursday. That meant it wasn't a fluke.
And that also meant that shit just got real.
Thursday
After more measuring of my rotten speeds, I talked to another rep online, who was even less helpful than the last - this one included misleading and incorrect statements in barely-decipherable English, as well as frequent attempts to upsell me by agreeing to a 2-year contact. As if I'd lock myself into a service without any expectation that said service would ever be restored?
For lack of a better option, we scheduled a tech to come out Saturday (tomorrow, at the time of this writing).
Again, by the time I got home that evening, everything was back to normal. I didn't know exactly when, though, which bothered me...
Friday
Since the problem so far seemed to be intermittent, I decided to write a Groovy script to test it periodically capture the speeds in a tabular format so I could know when it went bad and when it corrected itself. It results in output like this:
Date Downstream Upstream
Fri Aug 05 16:00:57 CDT 2016 89.42 11.82
Fri Aug 05 16:31:27 CDT 2016 89.39 11.83
Fri Aug 05 17:01:57 CDT 2016 89.31 11.83
Fri Aug 05 17:32:26 CDT 2016 86.93 11.77
Fri Aug 05 18:02:55 CDT 2016 88.69 11.92
Fri Aug 05 18:33:26 CDT 2016 89.39 11.95
But then I recalled hearing about this guy who wrote a bot to check his internet speeds every hour and tweet to @Comcast if speeds weren't close to his advertised ones. He did it not because his service was abysmal like mine, but just because it was below advertised rates. Whenever Comcast tried to engage him to get more info, he would refuse, as he was basically treating the whole thing like a public service announcement.
I'm treating this more pragmatically and do want direct action to be taken, though. So instead of tweeting Comcast's media account publicly, I figured it would be better to DirectMessage their support account, @ComcastCares, an ill-fitting name if there ever was one.
I configured the script to send the DM if my upstream dropped below 2Mbps, or if my downstream dropped below 30. So far so good. If you're interested, here's the code. You'll need a Groovy runtime on your machine. You'll also need the Twitter4J core library JAR to enable tweeting. Finally, you'll need to have your Twitter Consumer Key/Secret and Access Token/Secret. This page explains how to get them.
With all that in hand, just fill in the blanks in the script:
import java.util.regex.*
import groovy.transform.Field
import twitter4j.*
import twitter4j.auth.AccessToken
@Field final int TEST_RUN_INTERVAL_MINUTES = 30
@Field final int MIN_UP_SPEED_MEGABITS_PER_SEC = 2
@Field final int MIN_DOWN_SPEED_MEGABITS_PER_SEC = 30
@Field final String CONSUMER_KEY = ""
@Field final String CONSUMER_KEY_SECRET = ""
@Field final String ACCESS_TOKEN = ""
@Field final String ACCESS_TOKEN_SECRET = ""
println "Date\t\t\t\tDownstream\tUpstream"
while (true) {
runSpeedTest()
Thread.sleep(TEST_RUN_INTERVAL_MINUTES * 60 * 1000)
}
def runSpeedTest() {
def rawStats = getSpeedTestOutput()
def upSpeed = getUpstream(rawStats)
def downSpeed = getDownstream(rawStats)
def date = new Date();
println "$date\t$downSpeed\t\t$upSpeed"
if (upSpeed < MIN_UP_SPEED_MEGABITS_PER_SEC ||
downSpeed < MIN_DOWN_SPEED_MEGABITS_PER_SEC) {
tweet(upSpeed, downSpeed)
}
}
float getUpstream(String rawStats) {
matcher = ( rawStats =~ /.*Upload: ([0-9]*\.?[0-9]+).*/ )
Float.parseFloat(matcher[0][1])
}
float getDownstream(String rawStats) {
matcher = ( rawStats =~ /.*Download: ([0-9]*\.?[0-9]+).*/ )
Float.parseFloat(matcher[0][1])
}
String getSpeedTestOutput() {
"speedtest-cli".execute().text
}
def tweet(up, down) {
Twitter twitter = new TwitterFactory().getInstance()
twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_KEY_SECRET)
twitter.setOAuthAccessToken(new AccessToken(ACCESS_TOKEN, ACCESS_TOKEN_SECRET))
twitter.sendDirectMessage("@comcastcares",
"Why am I paying for 75 Mbps/10 Mbps when I'm getting $down Mbps/$up Mbps right now? Acct #XXXXXXX")
}
The script to start it up assumes the script and the twitter4j jar are in the same directory, modify accordingly:
#!/bin/sh
nohup groovy -cp twitter4j-core-4.0.4.jar:. ./SpeedTester.groovy >> speedtest.log &
This has been running since this afternoon for me and luckily no problems so far, but I'm confident that it should catch any significant outages.
I'll keep updating this page if anything particularly obnoxious develops, always a distinct possibility when it comes to Comcast.
Update!
Saturday
At the time I finished this post initially, Friday evening, my service was normal. With the impending tech visit, I was worried that he would arrive to find everything nominal and thus write it off as a non-issue. However, right before his visit, I saw this in my script's logs:
Date Downstream Upstream
Sat Aug 06 14:24:04 CDT 2016 26.52 0.64
Sat Aug 06 14:55:25 CDT 2016 62.21 0.38
Aha! As it happened he arrived right in the window when my service was in the crapper!
The first thing I did when he arrived was show him those logs. I showed how my service dropped out right around 2:30 today. He correlated that with the fact that a local "node" that had six outstanding tickets against it was running at 20% capacity today, as of about 2:45PM. But here's the kicker: even though my (upload) speeds are clearly rock-bottom, the signal to my modem is still fine. As a result, the policy is for them not to go any further with diagnosis or repair.
So just to restate this as clearly as possible:
Comcast doesn't care what kind of speeds you are getting, even if they're <1% of advertised. They only care if you have a signal problem.
On some level, this makes a certain amount of sense. If you experience slow speeds, the problem could be inside your house, or it could be somewhere else on the Internet depending on what test you run. But the problem is that it's nearly impossible to ask Comcast to investigate the health of their equipment upstream of your property, where your signal could be ok but there are other issues in their network.
My tech was great, though: not only did he explain all this to me, he asked his supervisor if they could get a line tech out to my house anyway, even though it seemed like it wasn't the policy. He spun it as the timing of the node problems being too coincidental with my own based on the records I showed him. The supervisor agreed.
Then he got on the horn with the line tech. He ran some diagnostics out at the junction box in the back of my yard, and confirmed that I was connected to the bad node. With that, the line tech had the evidence he needed to come out.
What he told me next doesn't entirely make sense to me, but here's what I was able to gather: by coming out, the line tech can trace the issue, regardless of whether I'm experiencing slow speeds at that time or not, and walk around my neighborhood until he finds the problem. It wasn't clear to me if this is fixing the bad "node" or not - but the tech assured me that once this guy came out, the problem would be fixed. I want to give him the benefit of the doubt since he was really nice and explained things the best way he could; besides I don't have a choice at this point.
So apparently in 24-48 hours the line tech will come out and "definitely" fix my problem. I don't have to be home for it, he'll just slap a sticker on my door telling me that he fixed it. Excuse me if I sound a bit incredulous... this is Comcast we're talking about, right?
Side note: service came back to normal around 5:30PM.
Sunday
Around 9AM, my son comes up to me and tells me that he can't get onto Xbox Live. I check my computer and then the router, and sure enough, no service at all.
Not optimistic enough to hope that it's actually related to work being done to address my issue, I get on my BoostMobile connection and tweet to @ComcastCares again. They respond quickly and tell me that there is, in fact, work being done in my area.
Service comes back about a half hour later. Then I get a call from a number I don't recognize. As a rule I don't answer unexpected calls from unknown numbers but I hope against hope I'll get a voicemail with some good news.
Sure enough, it was the line tech. I actually saw him drive away in his truck across the street as I listened to the message. He said he found an "amplifier in the area that was not running within spec and changed it out," and that everything looks to be within spec now there as well as at the box behind my house.
Since then, everything has been solid. Granted, it's only been 24 hours since all this happened. If I was a superstitious person I wouldn't even write this for fear of jinxing myself. Can it be that Comcast actually performed a timely and useful service for me, a customer who has been abused by them time and again? For the moment, it looks that way.
I have conflicted feelings about the experience thus far. While by all appearances, things actually worked out exactly the way they should have, I have been conditioned to never expect this, so when things do appear to have gone to plan, I feel exhilarated and overly grateful, which actually stokes a bit of anger as well for warping my sensibilities.
Oh well. Best not to dwell on it and enjoy the sweet, sweet unfettered capped internet as long as it lasts...
Update: Thursday
Sigh.
It's back. Got some slow upstream readings overnight, sent the tweets, no response. Didn't pay much mind as I clearly wasn't using it at the time.
But it's happening now, mid-afternoon. This time @ComcastCares did respond quickly, they say there's a signal problem. "A tech may be needed to further investigate this issue."
Supposedly a "maintenance team" is scheduled to investigate the issue 8/16, another 5 days from now. Not ideal, but at least this is a team that is investigating things outside my house, meaning they're not trying to blame me and have me recycle my modem and all that nonsense.