Elementary vs Sherlock: Which is Better?

Both Elementary and Sherlock offer modern takes on the characters of Sherlock Holmes and Watson. While I watch both shows, I think Elementary is the better one. Here’s why:

Watson is more than just Holmes’ biographer

In most versions of Holmes and Watson, including Sherlock’s, Holmes is the primary mover of the relationship. Watson is there as the audience’s stand-in, someone Holmes can be brilliant next to. He’s there to make Holmes more relatable, but that’s it.

Elementary’s Watson is a stronger, more complex character. She begins as Holmes’ sober companion, becomes his mentee in deduction, and grows into an equal partner in solving crimes.

Holmes is a more complex character

Part of what makes Elementary’s Watson better is the fact that she manages to change Holmes. He starts the series as a recovering addict, oblivious to the feelings of others and convinced of his superiority. Unlike Sherlock’s version of the character, Elementary’s Holmes changes under Watson’s influence, becoming humbler and more sensitive to how his behavior is perceived.

Elementary’s version of Holmes is vulnerable, and knows it, something we never see in Sherlock.

Moriarty finally makes sense

I think Elementary’s portrayal of Moriarty is brilliant. The writers of Elementary managed to finally give a good explanation for the two main problems with Sherlock’s Moriarty:

  1. Why doesn’t Moriarty kill Holmes? I’ve never bought the “I admire him” argument. What criminal mastermind wouldn’t eliminate a threat as great as Sherlock Holmes as early as possible?
  2. Why doesn’t Holmes track down Moriarty earlier? Both Sherlock and Elementary have Holmes encounter Moriarty early on without recognizing him, but only Elementary has a good explanation for why such an observant man as Holmes would have a blind spot where Moriarty is concerned.

Update: The Onion’s AVClub agrees that Elementary is the better show.

Same-Sex Marriage is not a religious issue

Same-sex marriage is not a religious issue. It’s a legal one.

When you get married, you give your partner certain rights, and the two of you can act as one person. You can buy a house together and be treated as if you both owned it. If you have children together, you both get parental rights.

You get these rights because the government says you have them. No religious leader can simply point to two people and give them the ability to make medical choices for each other. The two people have to be adults, they have to decide to get married, and the person that marries them has to have been given that power by the government.

For the government to say that two people of the same sex can’t get married is like saying they can’t buy a car together. It’s an arbitrary refusal, a failure to fulfill one of the core functions of government: to enforce contracts.

How To: Fix Blank Screen on the new Nook Glowlight

I bought a new Nook Glowlight soon after it came out. I’m happy with it for the most part, but it has an annoying habit of going to a blank screen when I put it into sleep mode.

When I wake the Nook from this blank screen, it looks like it displays the book I was reading correctly, but each tap of the screen advances the text, even if I tap on the bottom to try to get to the Settings menu. Eventually the Nook freezes completely.

To fix this problem, I reboot the Nook when the blank screen first comes up. To do that, I hold the power button down for 20-30 seconds, until the blank screen is replaced by the booting up screen. I know it’s rebooting when I see the word “nook” printed in the middle, then “E-ink”, and finally the spiral of dots that means “loading”.

Hope this helps other Nook Glowlight owners!

Software Engineering Lessons from NASA: Part One

Long before I became a programmer, I worked as an optical engineer at NASA’s Goddard Space Flight Center. I was part of the Optical Alignment and Test group, which is responsible for the integration and testing of science instruments for spacecraft like the Hubble Space Telescope, Swift, and the upcoming James Webb Space Telescope.

While most of the day-to-day engineering practices I learned didn’t transfer over to software engineering, I’ve found certain principles still hold true.┬áHere’s the first one:

The first version you build will be wrong.

At NASA, it was taken as axiomatic that the first time you built an instrument, you’d screw it up. Engineers always pressed for the budget to build an Engineering Test Unit (ETU), which was a fully-working mock-up of the instrument you ultimately wanted to launch. Since the ETU was thrown away afterward, you could use it to practice the techniques you’d use to assemble the real instrument.

And you needed the practice. The requirements were often so tight (to the thousandth of an inch) that no matter how well you’d planned it out, something always went wrong: a screw would prove too hard to reach, or a baffle would be too thin to block all the light.

No amount of planning and peer review could find all the problems. The only way to know for sure if it would work was to build it. By building an ETU, you could shake out all the potential flaws in the design, so the final instrument would be solid.

In software, I’ve found the same principle holds: the first time I solve I problem, it’s never the optimal solution. Oddly enough, I often can’t see the optimal solution until after I’ve solved the problem in some other way.

Knowing this, I treat the first solution as a learning experience, to be returned to down the line and further optimized. I still shoot for the best first solution I can get, but I don’t beat myself up when I look back at the finished product and see the flaws in my design.

How to Fail at Customer Service: UPS Edition

I’ve been waiting on a delivery of books for about a week now. When I got my first notice from UPS about a failed delivery (they needed a signature), I deliberately worked from home the next day so I could sign for the package.

Imagine my surprise when I went out to get the mail that afternoon and found another “failed delivery” notice on my door! I checked the UPS tracking site, and sure enough, it said the driver had “tried to deliver” the package 15 minutes earlier.

Here begins a bizarre experience in customer service.

I used UPS live chat to contact their customer service department, asking if they could have the driver swing back by, since I was home and he obviously didn’t try to deliver the package. They said they couldn’t do that, but they’d report my problem to the local branch, who would contact me by the end of the day.

So, first questions: UPS can’t contact their drivers while they’re out? And the central office can’t handle customer complaints?

The local branch called – at 7:30 at night, well after close of business. They left a rambling voicemail that insisted the driver had tried to get a signature, but would try to re-deliver the next day. Alternatively, I could have them hold it, and pick it up between 8:00-8:30 am. They repeatedly mentioned I should call “the 800 number” to tell them what I wanted, but failed to tell me what the actual 800 number was.

So, second question: if complaints are handled locally, why was the local branch redirecting me to (I assume) the national office’s number?

The next day, I tweeted about my bad experience, and got a reply from the UPS twitter bot asking for more info. I emailed them my tracking number, hoping for some actual customer service. Boy, was I wrong. They sent back the same “complaints are handled locally,” response, even saying “I see the local office has contacted you already,” as if the fact that they left a voicemail made everything better.

Again, why the hell would the national office bother to find out more, if there’s nothing they can do?

So, instead of getting my package delivered – the service I paid for – I’m heading out to the UPS package center in the morning to pick up my books.

Let’s review all the mistakes here:

1) When confronted with a customer that didn’t get the service they paid for, UPS never admitted wrongdoing.

This is an amateur customer service mistake.

2) Rather than try to compensate the customer for the mistake, UPS bounced the customer between different departments.

This is like watching the federal and state governments argue over who’s responsible for bad schools – they’re both involved, so why don’t they work together to fix it instead of passing blame?

3) UPS is requiring the customer to complete the service on their own.

This is like a waiter telling you to go fetch your re-fired steak from the kitchen yourself. You’d never go back to that restaurant.

I’m amazed a company like UPS could fall on its face over something as simple as delivering a package to a house with a person inside. You’d think they’d treat their core mission a little more seriously.

Instead, they’ve convinced this guy to ask for FedEx next time.

Five Reasons Your Company Should Allow Remote Developers

If you don’t allow your software developers to work from home, you’re not just withholding a nice perk from your employees, you’re hurting your business.

Here’s five reasons letting developers work remotely should be the default:

1. Widen your talent pool

Good software engineers are already hard to find. On top of that, you’ve got to hire someone skilled in your chosen tech stack, which narrows the pool even further. Why restrict yourself to those engineers within driving distance to your office? Can you really afford to wait for talent to move close to you?

The CTO for my current gig lives an hour away from the office, and can’t move because of his wife’s job. We wouldn’t have been able to hire him if we didn’t let him work from home. Who are you missing out on because you won’t look at remote devs.

2. Reclaim commute time

The average commute time in the US is 30 minutes. That’s an hour a day your in-office developers aren’t working. If you let them work from home, they can start earlier and finish later.

Don’t think they will? The evidence shows they do: people working from home work longer hours than people in the office.

An extra hour of work a day is five more hours a week, or almost three more work days in the month. Why throw that time away?

3. Reduce sick leave

When I’ve got a cold or flu, I stay home. I usually spend the first day or two resting, but by the third day I’m usually able to work for a little, even though I’m too sick to go into the office.

If my boss didn’t let me work from home, he wouldn’t get those “sick hours” from me. I’d be forced into taking more time off, getting less done.

And when my wife’s sick, I don’t have to choose between taking care of her and getting my work done. By working from home, I can do both.

4. Increase employee retention

The only thing worse than not hiring a good dev is losing an engineer you’ve already got. When they leave, you’re not only losing a resource, you’re losing all the historical knowledge they have about the system: weird bugs that only show up once a quarter, why the team chose X db instead of another, etc.

Since the competition for talent is fierce, you don’t want to lose out to another company. Letting developers work from home sends a clear signal to your employees that they’re valued and that you appreciate work-life balance. And with many companies sticking to the old “gotta be in the office” way of thinking, you’re ensuring that any offer your employees get from another company won’t be as attractive.

5. Stay focused on work done

Finally, letting developers work from home forces the entire team to focus on what’s really important: getting work done. It doesn’t matter how many hours a developer spends in the office; if that time isn’t productive, it’s wasted.

What does matter is how much work a dev gets done: how many bugs squashed, how many new features completed, how many times they jump in to help another engineer. What you need from your developers is software for your business, not time spent in a cubicle. If they’re not producing, they should be let go. If they *are* producing, does it matter if they’re at a coffee shop downtown?

And if you don’t have a way of measuring developer productivity beyond hours spent at their desk, get one. You can’t improve something you don’t measure, and team productivity should be high on your list of things to always be improving.


Get every new post delivered to your Inbox.

Join 74 other followers