Reflecting on 2014, a couple of themes:

  • Reclaim. In the past, I’ve written about taking back technologies from corporate entities. This year, I’ve found myself embarking on what I consider to be the natural extension of Project Reclaim: taking back my attention from technologies. In April I ditched my smartphone, and in September I stopped using Twitter. Each decision arose from a desire to devote more of my limited mental and emotional energies on things that matter most to me, like my family and my work. In each case, the pull of inertia was strong – the natural thing was to continue using the tools, just like everyone else around me was doing – but in each case, the rewards of letting go have been significant.
  • Ease. My wife and I decided over dinner tonight that 2014 felt easy. We didn’t move this year. We enjoyed satisfying jobs and financial stability. Our son transitioned from a toddler to a very nice little boy. In contrast, our family has a number of very large changes coming in 2015, changes that will be hard in many ways. So the relative and welcome easiness of 2014 is worth a moment’s pause.
  • ShippingDuring 2014, BuddyPress shipped a number of major versions. I put a huge amount of time into BP 2.0, as both a developer and a release manager, and I think it paid off – IMHO it’s one of the most important releases in BuddyPress history. BuddyPress 2.2 will come in the first weeks of 2015, and it too promises to be a really important release. In addition, I was invited to join the WordPress core team for the 4.1 release, an experience that’s been fulfilling in its own way. Considered alongside a number of successful client project launches, I’ve been involved in a happily large number of solid software releases this year.

A big year ahead, but for now, за ваше здоровье!

Blogging heroes, 2014 edition

The best bloggers publish so regularly that it’s easy to take their work for granted. So, as 2014 winds down, I thought I’d take a moment to salute my favorite blogs of the year.

The main quality that earns a blogger my respect is fearlessness. In order to blog frequently, you’ve got to be willing to write on a broad range of topics, and to publish what might sometimes less-than-fully-formed work. Most authors (myself included) are too chicken to do these things. The writers listed here are not.

  • Samir Chopra – Philosophy, cricket, politics, parenthood, New York, literature, you get the idea.
  • Alan Levine – Alan is fond of saying that his tireless chronicling makes his blog a supplement to his memory: he can easily look back to see what he was doing and thinking just about any day in the last decade. We should all be so bold.
  • Audrey Watters – Independent journalist covering education and technology. Support her work.
  • Alan Jacobs – I follow Alan’s blog and tumblr in part to remember that there’s a way to engage in public intellectualism without being pandering or smarmy.

Thanks to all for your work in 2014!

WordPress 4.1 and me

WordPress 4.1 “Dinah” was just released. In September, I was asked to do a stint as a committer. It was a blast. Here’s what I worked on:

Query improvements

My primary goal for 4.1 was to rework the WP_Meta_Query, WP_Tax_Query, and WP_Date_Query classes so that they supported nested query syntax. In the process, I worked through much of the backlog of Trac tickets related to these three classes, fixing some longtime annoyances and adding a few nice features. I published an in-depth write-up on these improvements in October.


I decided to use my new position to stir up trouble related to the taxonomy roadmap. My goal was to make some progress on Trac’s Worst Ticket. I wrote a couple boatloads of unit tests for functions related to term editing and creation, helped shepherd through fixes to a few edge cases related to duplicate term creation, and pulled the trigger on changing the wp_terms database schema. In #21950 we stopped creating new shared taxonomy terms, and we came very close to splitting existing shared terms in this release, but pulled it out at the last minute so we’d have a bit more time for developer education. I look forward to continuing my unofficial role as Taxonomy Gadfly in future releases.

Unit tests

I contributed hundreds of automated tests to WP during the 4.1 cycle, and so the slowness of the phpunit suite was a particular pain point for me. Based in part on some ideas of nacin’s at WCSF, I took a few steps toward reorganizing and refactoring a couple parts of the phpunit suite, with the end result that running $ phpunit on WordPress takes less than half the time today as what it took in 4.0, despite the addition of many, many tests. I’m equally proud that I was able to help a few contributors to include unit tests in their WP patches for the first time.


I spent some time in 4.1 improving comment queries. I reworked comments_template() (the function used by WP to display comments on a blog post in most themes) to use the internal comments API, resolving a ticket that has bugged me for a long time. I also helped to add some additional query params to WP_Comment_Query, and worked with a number of contributor to pave the way for a better system for custom comment types in the future.


I took advantage of what may be a once-in-a-lifetime opportunity to address a couple personal peeves, like better support for apostrophes in email addresses. It was also a pleasure to do a bit of developer outreach, in the form of helping a few folks to get their first WordPress props, as well as clearing out some old has-patch tickets.

Working on a huge project like WordPress has been a lot of fun. 4.1 FTW!

wp-cli-git-helper: Git commands for wp-cli

At this year’s WordPress Community Summit there was an interesting session about the many uses of the delightful wp-cli. One idea was that wp-cli could handle some simple git commands intelligently, so that, for instance, updating a plugin would automatically generate a changeset for the update with a descriptive message. After some back and forth with the wp-cli team, I decided to build this as a community package. It’s available here: wp-cli-git-helper.

This will be a huge time saver for me as I manage client sites. If it helps you, that’s super too. Pull requests welcome for Kewl New Features.

Unpaid labor in academic and free software communities

There are many aspects of my current free software development work that are (thankfully!) very different from my previous life as an academic. But one way in which they’re similar is the way that one’s relationship to one’s own paid and unpaid labor is connected to one’s career progress, and the personality types that this structure attracts.

I’m a known advocate ([1], [2], [3]) for fostering a symbiotic relationship between my paid client work and my unpaid work on free software projects. And while I’m emphatic that there’s value in having these two parts of my career separate from (yet supportive of) each other, the separation embodies an unavoidable tension between what I’m paid to do and what earns the respect of my peers. If people know who I am, it’s probably because of volunteer work I’ve done for WordPress, not because of my client work. As such, there’s continual internal pressure for me to focus more of my mental and emotional energies on the unpaid work. Yet it’s important not to yield completely to this pressure, since my paid client work is critical, both in terms of the financial support and the technical inspiration it gives to my work on the free software projects. Balancing these two pressures is something I’m constantly struggling with.

The relationship between labor and rewards in academic work is similarly structured. Most academics are paid primarily for teaching duties, with service and research being important but often secondary, at least as far as the official job descriptions are concerned. Yet the system of advancement in academia is structured in such a way that one’s research and publication record is of paramount importance. And in many cases, volunteer labor – things like peer review and service to professional societies – is critical to one’s reputation as a scholar. Anyone in the academic world will recognize the tensions that this arrangement can produce.

The peculiar motivations baked into free software development and academia tend to attract similar sorts of overachievers. To rise to the top of your field, you’ve got to do large amounts of unpaid labor, while still doing enough of your paid labor to keep your job. This means that the most successful people tend to be those who are spending the greatest amount of their spare time working for free. A couple of consequences fall out of this arrangement. First, people who are already in a position of privilege (financial and otherwise) are able to climb the career ladder more easily. This setup also means thatt successful people are likely to have a sense of self-worth that is closely connected to their work. And these factors mean that successful academics as well as free software contributors are more likely to suffer from burnout.

Last year, DHH of Ruby on Rails wrote an interesting piece on “the perils of mixing open source and money”. I’m very sympathetic to many of his points about motivation: the tenor of a free software project, and the quality of the software that results, is largely a consequence of the fact that the creators of the software are not primarily motivated by financial concerns. This is something that academics figured out a long time ago. As such, I think that it’s important to continue to foster “reputation cycles” and other structures that help to enable talented developers to devote energies to free software without directly paying them for it. At the same time, it’s important to be aware of the kinds of tensions I describe above, because the separation of paid and unpaid work in this area can tend to be personally destructive at the same time that it’s valuable for the (software/academic) projects as a whole.

WordCamp NYC video now available

In August, I gave the keynote presentation at WordCamp NYC. A few days later, I wrote out a condensed version of those remarks and posted it on this blog. The video for that talk was posted today to wordpress.tv and is embedded below for your viewing pleasure. Some of the meat of the argument is the same as my recent talk at WCSF, but the NY talk is more focused on freelancers, and has funnier jokes.

Goodbye to Twitter

I’ve been a pretty heavy Twitter user since about 2009. I’ve had a lot of fun using the service, I’ve forged a number of friendships there, and in several concrete ways, I owe my career to my use of Twitter. For years, I’ve kept TweetDeck open on a dedicated screen throughout my working day – a connection to the world around me, to colleagues and friends around the world. I was a Twitter advocate. I loved Twitter.

Over the past year or so, the things I once liked about being on Twitter have faded pretty rapidly, and the downsides of being connected to this space have come to overwhelm the upsides. Since ditching my smartphone a few months ago, I’ve been using Twitter less and less, until about a week ago I pretty much stopped.

There are dozens of reasons why I just don’t want to participate anymore, some of which are part of the recent zeitgeist and some of which are totally specific to me. It’d be pointless to list them all. At the same time, transitioning away from being an active Twitter user feels like a major life event for me (silly as that may sound), and I can’t help but reflect on two interconnected reasons that stand out from the rest.

One is that I’m tired of having an audience, or at least tired of having the specific audience that I’ve got on Twitter. Interacting earnestly and honestly with others is hard to do when you’re being watched by thousands of strangers. Some people react to this by adopting the voice of a pundit or a “public intellectual”; I’ve chosen to tell jokes. And the truth is that I like to tell jokes, and it’s nice to make a funny and have people laugh. But when your main public outlet is primarily a platform for snarky comments, it starts warping the way you interact with the world. I find myself actively looking for funny ways to be annoyed as part of my everyday life, and I shape a lot of my internal monologue regarding the banalities of existence against the backdrop of the audience I’ve cultivated. One-liner oneupsmanship is fun when you’re at the bar with buddies. But when it pervades your waking hours, it feels so vapid, and I’m tired of it.

Closely related is the sheer exhaustion of being constantly tapped into in the network. Every tweet I read or write elicits some small (or not so small) emotional reaction: anger, mirth, puzzlement, guilt, anxiety, frustration. I’ve tried to prune my following list so that when I do find myself engaging in a genuine way, it’s with a person I genuinely want to engage with. But there’s a limit to how much pruning can be done, when unfollowing a real-life friend is the online equivalent of punting his puppy across the room. So all day long, I’m in and out of the stream, always reacting to whatever’s coming next. Setting aside the question of how distracting this is when I’m trying to get work done, the fact is that I have a limited capacity for emotional engagement, and the code-switching that’s required when the character of my response is supposed to change every 140 characters only increases this overhead. A life spent on Twitter is a death by a thousand emotional microtransactions. I want to be pouring these energies into my family and my friends and my work.

I’ll keep my Twitter account, and I’ll probably open it once or twice a day to see if anything catches my eye. But I no longer want its constant companionship. That this realization feels more liberating than bittersweet shows that it’s probably the right decision for me.