22 December 2012

I once worked for a manager who had two tools in his toolbox. He could order pizzas, and he could threaten developers with termination.

Shortly after he was hired, he pulled each of us individually into a conference room to discuss the current projects. When it was my turn and he had finished his spiel, he asked if I had any questions. Wanting to establish a feedback channel, I asked if we could periodically have talks about progress and ways to improve. He responded with:

“Let me tell you how I work. If I ever have a problem with you, I’ll tell you. And you’ll have a week to fix it or you’re fired.”

Okay, so no feedback, then.

In short order, I was given a newer, higher priority task, and set about estimating and breaking down work. After a grueling two-day session, we established a schedule. “With this team of 3 developers and 5 weeks of effort, we can get the testers something to work with,” I proudly proclaimed.

“Five weeks. Let’s do it,” he said. And then he pulled the other two off the team.

Alone, I started down my old development path. I was a very bad programmer back then, and the code showed it. My productivity showed it. I made up for it by working insane hours. Sixty, seventy, eighty hour weeks… and my wife… She was 6 months pregnant at the time, and my stress bled into the house and she mopped it up. I suffered. She suffered. Our marriage suffered.

After the fourth week the boss pulled me into a conference room. I knew what was coming, because he had two tools and I didn’t smell any pizza.

“You’ve been working really hard, and I appreciate that. But I’m not seeing any functionality. You need to get something to the testers by Friday, or we can’t work together anymore.”

“I’m working eighty hours a week,” I replied, bordering on hysterical. “What do you want from me?”

I honestly don’t remember his response because I was already formulating my plan. I was going to drastically modify my work habits to give the impression that I was actually doing something to develop faster. At the end of the week, when the software wasn’t ready, maybe he would look at the impressive steps I had taken to get the software out on time. Maybe he would see my dedication, or see something in me or my situation that made it worth his time to keep me employed. Maybe I wouldn’t have to tell my wife that we were going to lose our house and have to live with her parents.

The week sped by, and I was startled to see my productivity increase. The extra tests I wrote to make the testing dialog look more impressive helped me isolate bugs and fix them quickly. The switch from old, trusty Emacs to the more feature-full Eclipse (with Emacs key-bindings, of course) helped me traipse through my code more easily, no longer requiring command-line tools to find what I was looking for. But most importantly, I abandoned my inner critic, the tiny voice inside my head that held to some notion of academic purity of design or need to use obscure or idiomatic language features.

The week ended. The software went to the testers. Everyone was amazed. I never went back to the Old Way.

But I did put out an updated resume and start looking elsewhere. To my mind, my nascent family deserved more stability, and needed me to be there for them instead of coming home every day and collapsing from exhaustion.

And I was angry. Furious that this manager, this guy who was hired to deal with flesh-and-blood humans, could be so capricious with termination, holding my job out like a carrot on a stick. I couldn’t look at him without becoming angry, and during my exit interview I named him as the sole reason for my leaving.


I woke up a few days ago with an odd itch in my brain. Something in my worldview was misaligned. I sat down and thought about it for a while, and something inside me shifted.

He was right.

His ends did not justify his means, wielding termination like an oversized cudgel. He will never win manager of the year. Eventually people will figure out that his skills are few and outdated and that he alone can greatly (and negatively) impact turnover (half the team left directly because of him during his tenure), and he won’t be able to get a job with a decent company because of it.

But he was right.

I am a far better developer today than I was before I met him. I am more willing to try new things, or lean on best practices, or talk to people about how to improve. I write software that actually does things, and not just throwaway code to try out the latest frameworks or languages.

I also found an amazing company that understands that I am not a static entity, staying in one place and stamping code out like a die. I am on a journey, and they are helping to guide me. Dropping the blinders of artistic integrity abled me to see what software is really capable of, and it’s so much more interesting than the simple elegance of pointer arithmetic. I have finally developed a taste for the subtle complexities of real world code.

I’m not angry at him anymore. I wish him well. I hope that eventually he has a come-to-Jesus moment like the one he gave me. He may get there, and he may not. I’m sure he’ll be fine, regardless.

Thanks, boss.