Developer Timesink: Name Paralysis

Posted by Louis Brandy on 26 August 2008

I’ve recently become aware of a phenomenon that really hurts the productivity of software development teams when it arises.  Once I recognized it, I began to realize how frequently it actually occurred. It was when I heard other people describing their workplace that I realized that this might be an omnipresent programmer hurdle. The most interesting part (and the reason for this post) was the simple act of recognition solved the problem. Here’s a simple example of how it might happen:

You and your team sit around and decide you really need to wrap up some set of (messy) functionality into a nice clean interface. This new module can replace a half a dozen semi-hacks that are used in different places and will provide a ton of flexibility. Sounds like a great idea. After a bit of discussion about the requirements of this module, you go sit down but you can't start working. Why? Because in order to create that new header file (or module or package or whatever) you need to know what to name it. Everyone is going to be using this thing, you think. Seems like a big decision. Maybe you need to take a moment to figure that out. You get into a tiny argument with yourself. All your naming ideas stink. Hmmm...

I called it name paralysis.

Name paralysis happens when you get stuck on a naming issue and nothing is done until the name crisis is solved. And it happens at every level. I’ve known people who can’t write a line of code for some new application until they figure out what the name, logo, and icon should be. Same for web pages. Same for entire websites. Hell, even the same for entire companies. There are people who cannot do any work on their start-up idea because they need a name and a logo first. I’m not an expert but that’s definitely not healthy. And it goes down to header files or modules. Even individual functions.

Most cases go away quickly because some self-evidently perfect name bubbles to the top. But sometimes it doesn’t. Sometimes your cube neighbor can solve the problem for you. Sometimes, though, someone overhears this conversation with said cube-neighbor, and now there are three. God forbid, however, that this conversation happens inside a meeting.

Name paralysis’ effect on time-wasting is geometric with the number of people. It can get absurd. Ever tried to come up with the main website tabs in a group of 10? If you can agree on that inside of 30 minutes, congratulations. People will sit around and discuss the pros and cons of what are essentially synonyms for dozens of minutes. It’s just human nature. I don’t know why, but it’s unavoidable. The issue isn’t that the names don’t matter. Names matter. They just don’t matter yet. We haven’t written a lick of code and we have 10 people arguing over something that can be changed with sed in all of 45 seconds.

Solution #1: Make a Decision

Don’t be afraid of making a name that people will want to change. It’s better than the alternative. If you paralyze everyone for 30 minutes to come up with a good name, you’ll start a big argument and probably not get a name everyone likes. If, on the other hand, you just name it something, even if it is awful, people will think about it on their own time and someone will come by at some point and mention a better name. The second scenario is infinitely more efficient.

I once named a package and accompanying source files “image_processing”. That was an awful name. I got so much shit for that name. In our business, that’s the equivalent of naming something “math” or “the_library”. I mean half our code base does image processing. People’s visceral hatred of that name made them motivated to come up with a better name (on their own) and eventually we renamed it to something we came up with (in the course of casual mockery of me and my naming) over lunch.

Another co-worker once had to name a function that took an angle and returned a polygon. The higher the angle, the more pointed we’d want the polygon in some particular direction (you can get an idea from our gallery to see what I mean). He named some internal function “calculate_pointiness”. That’s an awful name. I don’t think he meant it to be permanent. But it ended up being kind of charming and the vocabulary has stuck.

Solution #2: Table It

Once I was aware of the ability of large groups of people to become paralyzed by a naming discussion, I just started interrupting everyone by saying “this is name paralysis” and the problem just went away. We got into an argument about a web page’s section names and I just said “Ok, this is name paralysis” and the conversation moved on. The name seemed descriptive enough that everyone immediately understood what was happening. It was a pointless and premature argument. Let’s talk about something that matters. And everyone seemed to agree. It seemed to me that the very act of naming it and pretending it was some trap we tended to fall into made everyone instantly aware of the time that was being wasted.

Solution #3: Suffer

Sometimes, it has to happen. Names do matter. If it’s late in the game, you don’t have a choice. If your website is about to launch and you still can’t figure out a name for that third tab. It’s time to call a meeting and suffer.

← Screaming into the Darkness Learning New Programming Languages →

© louis brandy — theme: midnight by mattgraham — with help from jekyll bootstrap and github pages