re: engineering management
notes on software development, leading teams and changing the way we work

The Way I Want To Work

A number of factors inspired me to write this post. First, one of my top 3 pet peeves is when people force me to repeat myself. (yes, I am a software development manager…the irony is NOT lost on me!) Over the past year, I’ve had a noticeable increase in the number of recruiters trying to get me to interview for some position or the other. Ignoring them didn’t seem to work; I’d just get more emails and phone calls. Every once in a while, I’d take the time to talk to one or two of them just to see what they were trying to sell me on. I didn’t miss out on anything…so far. I ended up replying to the emails with a “Thanks, but not interested. Here’s what I AM interested in and I will not compromise on these items” response. Ended up being much more effective. So, if I wrote this up as a blog post I could send an even shorter response…the URL.

Another factor was the fact that I was on a 4-week sabbatical from work and had a little stay-cation. I had the opportunity to work on a side project with the folks at pinch/zoom, a Web and mobile development shop in Seattle. While doing that I also ended up doing a talk at iOS DevCamp Seattle on Apple’s iAd and mobile Web development. The change in environment, work style and product focus opened up the floodgates of introspectiveness.

Finally, I recently started on a new team at the day job. My last few projects have been successful on the engineering side, but have been lacking in terms of impact. This, is turn, has affected my motivation and added to my introspectiveness. However, I am a firm believer in the idea that you are responsible for your career. If I want things to change, then I have to make that change real.

Inspiration

Inc. Magazine has a great series called The Way I Work featuring several entrepreneurs including Jason Fried and Matt Mullenweg. This quote from Jason articulated a change in work style I made years ago

We rarely have meetings. I hate them. They’re a huge waste of time, and they’re costly. It’s not one hour; it’s 10, because you pulled 10 people away from their real work. Plus, they chop your day into small bits, so you have only 20 minutes of free time here or 45 minutes there. Creative people need unstructured time to get in the zone. You can’t do that in 20 minutes.

Note: Large companies have a hard time adjusting to the idea of no meetings. I’ve watched them try with misguided attempts like no meetings on Fridays. It’s kind of like people making New Year’s resolutions to lose weight. They give it a good go, but within a month or two they’ve fallen back into their bad habits.

The Way I Want To Work

Unlike the aforementioned articles, I am not describing how I currently go about my day-to-day responsibilities. Instead, I’m going to describe my ideal (at this moment in time) state.

Small Company

(where small < 30)

For most of my career, I’ve worked at small companies. I made a conscious choice to work at a larger company (my current employer) so that I could actually get the experience. After almost 6 years, I think I have enough data.

Large companies can simulate small, startup environments but it’s not their natural state. The problem boils down to communication, which I outlined in a previous post. It’s just so much harder to communicate with so many people and, subsequently, harder to Get Things Done. People say there’s no such thing as over-communicating but that’s a crock. If the overall value of the communication is low because the people you are forced to communicate with do not help you accomplish the task at hand, then you are over-communicating. Or, more simply wasting time.

Product Company

Joel Spolsky has a great essay called Five Worlds that attempts to define the different environments that software developers might work in. This categorization was intended to help developers better understand the target audience for various books, conferences and methodologies. But, it is also useful as a way to identify exactly what kind of work environment stimulates you. I’m definitely at home in the commercial, Web-based software category.

For me, companies like GitHub, Posterous and Gowalla that typify the environment I find most palatable. That said, there may be one or two exceptions to my small company rule.

Virtual Company (or Virtual with Co-Location Option)

The nature of software development has shifted enough that while I still favor co-location, it’s not as necessary as it once was. In Matt’s article, he describes how Automattic works and they are completely virtual (with an available office for meetings).

Besides hating my commute (down to 2 hours a day from 4 hours once I moved out to Seattle), my role is less of a people manager and more of a technical lead. That’s not a bad thing. In fact, I prefer it and feel that is the present and future of software development management. In the type of environment I prefer, developers are self-motivated and driven. They don’t need hand-holding…they need feedback. There are so many ways to provide that without having to be face-to-face 5 days a week.

On my current project, it’s just me and one developer while I wait for the headcount fairy to arrive. We don’t need to have meetings. We have our Jabber clients open all day and can shoot quick messages to each other when necessary. Often, we go have coffee in the morning and discuss the project and what we’re going to do for the day. That’s about 20 minutes, which is essentially the time it takes us to walk to Caffe Ladro, get our drinks and walk back to the office. Then, we’re working until lunch. Sometimes, we discuss the project over lunch…often, we’re just bitching about something or the other. And, twice a week he works from home.

The point is, most of our actual communication is short and bursty. IM messages. Short emails. Coffee walks. Git commit messages. The face-to-face time satisfies a basic human need, but why does that have to be filled by co-workers. I’m writing this in a coffee shop now and a bunch of people have come up to me to tell me how much they like my laptop.

So, if I don’t have to live where my company’s office is located in order to work then I can live anywhere. I could see my team in person once a quarter instead of every single day because that’s probably about the right frequency. I think that is the real definition of work-life balance.

Stuff That Matters

If you haven’t read Tim O'Reilly’s Work on Stuff That Matters, please stop reading this post and go read it now!

Done? No? I’m serious…go read it!

What matters most to me (and most good engineers I know) is making things people want to use. I often couple that with making things that help people create. Zed Shaw had a variation of this in Products for People Who Make Products for People. I cannot articulate it any better than Zed, so read that post too! (oh, and why not donate to the Mongrel2 project while you’re at it?)

On the next priority rung, these things matter to me:

  • Working closely with designers: cross-functional teams, not cross-functional management
  • Work on my Mac with no compromises (no Microsoft Office or Exchange required)
  • Use Git and GitHub to collaborate with team
  • Create Open Source by-products from day-to-day work (you gotta give back!)

Conclusion

So, what does this all mean? Am I quitting my job to make this all happen? No. The first step was just to document all of this. I needed to know what I wanted out of life…what’s going to make me happy. Mission Accomplished.

The next step is to make subtle changes in my current environment to see if I can get what I want without complete disruption. That would be ideal.

However, if that is unsuccessful then I’ll figure out a different set of next steps. That may include following Martin Fowler’s sage advice:

If you can’t change your organization, change your organization.