Economic Anxiety is Existential Dread

For as long as I could remember, my dad worked in radio and my mom stayed at home with their four kids. We had as comfortable a life as can be had living paycheck to paycheck on the bottom end of the middle class spectrum. Neither of them had college degrees. Our trajectory out of the lower middle class had a razor-thin margin for error.

Dad had a real talent for radio. He was good on the air and good at managing the day-to-day operations of a station. He took a middling adult contemporary station in central Illinois, changed formats, and turned it into the area’s most popular station.

When I was a teenager and my dad was around 50, he lost his job at the station. The details aren’t important, but there weren’t jobs for him in radio any more. He bounced around. He sold siding. He was the manager of a dollar store a hundred miles away that he commuted to every morning. But those were jobs, not careers, and he was an old dog desperately trying to learn new tricks.

Continue reading Economic Anxiety is Existential Dread

Don’t Make API Calls in Tests

I recently had a great conversation about application testing strategy and remote API calls. The question we were trying to answer was this:

In an application which makes external API call, when should you mock those calls in your test suite, and when should you make live calls in your tests?

My take on this issue: always always always mock external1 API calls. Here’s why:

Continue reading Don’t Make API Calls in Tests

  1. This gets more tricky when you own both systems, but I still stand by this as a best practice for that situation as well, for slightly different reasons. 

Please Save Me From Myself

Today, I very nearly let a domain lapse that I fully intended to continue to have registered in my name. In all fairness: I own a huge portion of the blame for that near miss. But that’s the trick with UX: you’re trying to let someone do what they already know they want to do. I wanted to give Namecheap1 money for a domain. I almost didn’t get to. I’m going to tell you why.

Continue reading Please Save Me From Myself

  1. I want to be clear about this, though: this is mostly nitpicking. I’m very happy with Namecheap and recommend them despite these little issues 

AT&T: Competing with Comcast in All the Wrong Ways

I’ve been a Comcast customer for more than a decade.1 I had little in the way of other options until AT&T sent a flyer letting me know that their 1Gbps fiber service was available at my house. The next time I started having internet problems, I knew just what to do:

On September 19th I signed up for AT&T “Gigapower” service. I learned that I would have to wait almost a week for the installation. This seemed like an eternity. That was just the tip of the iceberg.

Continue reading AT&T: Competing with Comcast in All the Wrong Ways

  1. Condolences will be accepted in the form of cash. 

Compiling the Best Possible Code Sample

Aspiring software engineers are often asked for code samples to demonstrate that they’ve got some clue what they’re doing. This is pretty terrifying and it’s incredibly difficult. When they’re not done well, they don’t provide much in the way of useful information.

I’m a lead engineer at a pretty cool software company. I’ve been in a lot of interviews and I’ve read a lot of crappy code samples. I decided to write about what would get me excited about a candidate’s code sample (and, by extension, them). Other people might feel differently. That’s cool; this isn’t a math test. (But I would love to hear those counter-points in the comments below!)

Continue reading Compiling the Best Possible Code Sample

Rails vs. Phoenix

Over the past week I’ve been diving into Elixir and Phoenix. As it is with most languages, there some good and some bad with Elixir. That said, anyone announcing the death of Rails at the hands of Phoenix is probably a bit early.

While I didn’t do any benchmarks myself, that path is well worn. It seems fair to say that Elixir is probably faster than Ruby and Phoenix is probably significantly faster than Rails.

It’s also likely that Phoenix will handle WebSockets far better than Rails will, even with ActionCable.

On top of all of that, Elixir seems to also have a slight edge over Rails in terms of asynchronous jobs, since they can be done directly. For truly heavy jobs, Elixir would also likely need a library of some sort to manage load generated on non-Elixir systems (like your database). It seems like it would be a thinner layer between your transactional code and your jobs, though.

Despite all of that, if I were starting a new project today, odds are good that it wouldn’t be in Elixir or Phoenix.

Continue reading Rails vs. Phoenix

Elixir Getting Started: First Impressions

I’ve worked through the Elixir getting started guide as the first step in my goal to build something in Elixir. So far, there are lots of things I like and a lot of things I find kind of strange.

The Good

The fact that Elixir is up front about the performance profiles of lists and tuples is encouraging. Understanding when certain operations will be slow helps us make good decisions about design.

The string support seems amazingly robust. The guide claims that Elixir passes every test contained in The String Type is Broken. Being able to avoid dealing with terrible string implementations is a huge benefit and, in the long run, probably worth putting up with a lot of other issues.

Parallelism is a primary concern, which is just as appealing here as it is in Go. Combined with immutability of Elixir variables, it provides an environment where you can reduce garbage collection based issues more easily.

I really like the pipe operator. Here’s a normal line of code:

Here’s that same line of code using the pipe operator instead:

The Bad

With some exceptions (like the pipe operator), the syntax is not very friendly when compared to languages like Ruby or Python. I get that some of this is probably the result of most of my experience being in imperative languages, but I just don’t find Elixir intuitive or easy to read.

This might seem like a little thing, but for most applications it is the most important thing. An employee’s time is often far more expensive than another server or ten, so languages that are harder to read have a higher “total cost of ownership” than ones where the intent is easily understood.


In terms of being “better” than Ruby or Rails, it still seems better in ways that Rails doesn’t concern itself with. There is a lot of interesting stuff in Elixir, though, and I’m looking forward to taking a swing at a practical project as soon as I make it through the Mix and OTP tutorials.

Is Elixir Worthy of the Hype?

During RailsConf this year, a blog post made the rounds which suggested that, more or less, Rails was dying and Elixir and Clojure were the places to be. I was pretty skeptical. After all, there are still production systems running Fortran and COBOL — the odds that a framework as widespread as Rails is going to dry up any time soon is basically nil. Also, Rails is pretty good at what it does. Most of the “problems” Elixir proponents are solving with Rails are not things Rails was really built to do. It’s a bit like saying everyone is going to give up cars because they can’t make it to the moon.

Still, some people are pretty excited about Elixir, so I spent a few hours at the conference looking into it. At first glance, it’s not as easy to read or understand as Ruby. It’s probably way faster (but what isn’t?). Phoenix, Elixir’s answer to Rails, looked to be missing basic things that would be needed to supplant Rails (like a fully-capable ORM).

So, unsurprisingly, it looks like a bit of puffery from the Elixir community. That’s how these things work, though; the challengers have to make claims about the reigning champ to get some attention. It did get me thinking that I should write something in Elixir, to see how it is in the real world.

Fast-forward a few months. My employer is sending a handful of its engineers off into the wilderness for a week of free-form learning and experimentation1. This week, I’m going to be learning Elixir and trying to build a real application in it.

  1. This is something we do every year as a way to avoid burn-out, keep up to date, and have a little fun. 

Teachers Can’t Be Trusted to Regulate Themselves

Another month, another Valerie Strauss article covering the resignation letter of a teacher in the Washington Post’s Answer Sheet blog. Last month she covered what she called a “powerful letter” from a teacher in Louisiana. It read more like a temper tantrum. This month, Strauss has focused on the resignation of a teacher who actually appears to have taken a writing class at some point in the course of his own education. The result is easier to read, but makes many of the same tactical and logical errors that the post before it did.

The two letters are not unique. Their arguments are not new. Facebook, twitter, and blogs are filled to the brim with teachers complaining about the “broken” education system in this country while simultaneously decrying anyone who tries to reform it. Teachers, collectively, have taken an untenable position and the only way forward for them, as a profession, is to jettison the weak and under-performing of their group.

If they won’t do it themselves, we as a society are left with no choice but to do it for them.

Continue reading Teachers Can’t Be Trusted to Regulate Themselves

The ACA is Constitutional, but Still Terrible

The Supreme Court upheld (on narrow and clever grounds) the Affordable Care Act. So, for those of us who had our fingers crossed that we could start over, we’re going to have to look to our elected officials for help. To be certain, the health care system in the United States has some problems. Some of those problems are huge and pervasive. The ACA is the epitome of everything that sucks about compromise: nobody gets what they want and you run the risk of the outcome carrying the worst traits of the proposed solutions.

The left wants to fix everything right now. The right wants the federal government to have no part in it.

Neither of those are viable alternatives, and what congress ended up with in the ACA was a deal with the devil. The left sold its soul to the health insurance industry for some short-term gains to coverage levels. In exchange for some platitudes from the health insurance lobby, congress handed them millions of new, mostly healthy customers, a demographic known to health insurers as “free money.”

In typical American fashion, once we agreed there was a problem, we demanded an immediate fix, without regard for the long-term consequences. With a bit of patience, we could have something both better and easier.

Continue reading The ACA is Constitutional, but Still Terrible