I’ll be presenting Bring Your Whole Self To Work (In 15 Years Or Less)! at Self.conference. Here’s the abstract:

A few weeks into my latest gig, it became clear that what folks needed most from me was to come in every day and be myself. Cool, I was gonna do that anyway — except at every other job I’ve had, that’s never totally worked out. What makes me so sure it’s different this time? What’s changed in this new role? What’s changed about me, and why, and how?

Come hear a tale full of embarrassments, disappointments, and learnings, of mild reductions of obliviousness, of gradual improvements in efficiency, of partially mitigated personal weaknesses, and of matching who I am to where I belong.

How can I help?

If our lives have ever crossed paths (in any way, at any time), tell me the one thing you remember most vividly about our time together. Maybe something along these lines:

  • What were we trying to do?
  • What was I struggling with?
  • What was it like to interact with me?
  • What was important to me?
  • What did it seem like maybe I was starting to figure out?
  • What could you see about me and/or my situation that I wasn’t seeing?
  • What hilariously dumb thing(s) did I do that everyone who was there will remember forever?

…or anything else that’s coming to mind. Then please yes right now email it to me.

P.S. Even if it’s been a while — especially if it’s been a while — I’ll be very happy to hear from you.

P.P.S. Even if you’re not entirely sure I’d be happy to hear from you, I promise you, I will be!

Posted Thu Mar 5 09:19:29 2015 Tags:

I needed some practice with Java and Eclipse, and I love untangling legacy code, so a coworker recommended me the Gilded Rose Kata. I used Wouter Lagerweij’s Java port as my starting point.

The kata’s README specifies the system’s current behavior, constraints on changing it, and a desired new behavior. Since the spec wasn’t executable, I couldn’t trust its accuracy; since no executable spec existed, I couldn’t verify its accuracy; and since the code was carefully written to be opaque, I didn’t think it was worth making an effort to convince myself I understood it. At this point, I knew only two things:

  1. Not going anywhere without some characterization tests
  2. Disallowing something makes me really, really motivated to carry out its nearest permissible approximation

After writing enough characterization tests to load the domain lingo into my head and support (mostly) my reading of the spec, I looked again at the system and at the desired new behavior. Not seeing an obvious place to put it, I instead took the opportunity — afforded by my new tests — to perform some obvious refactorings until I spotted an opening just big enough to test-drive through. And then I chopped up the concerns scattered throughout the characterization tests and reconstituted them, filtered through my newfound understanding of the system, as the one-new-thing-at-a-time unit tests I probably would’ve written to begin with.

None of this is original or special. Anyone who’s danced with legacy code knows the ungainly rhythm of this dance. And while Gilded Rose is a very nicely designed exercise, it doesn’t compare in scope or risk to a real production system. What might be interesting, since it was just an exercise, is how I decided when to stop.

Given the state of my code, I don’t love:

  • The stupid not-allowed-to-get-rid-of-or-change-in-any-way Item class and items property
  • The Primitive Obsession that remains
  • The qualityIncrement action-at-a-distance
  • The hardcoded names of items with special behaviors
  • The domain concepts (like “legendary” or “conjured”) not yet explicitly represented in tests or code

And I’m happy with:

  • The small size of each step I took
  • The utility of my tests as they existed at each step
  • The increase in my work speed (partly from tests, partly from plain old practice with the IDE)
  • The new feature as safely delivered
  • The unit tests as they now stand
  • The likelihood that, given some new desired behavior, I or someone else could quickly and safely implement it

Remember, the assignment was to implement a new behavior. All that other stuff I did was enzymatic, enabling the assignment to be digested by my limited arrangement of brain cells. See how mixed that metaphor got? That’s why.

Anyway, I not only implemented the new behavior, but I did it in a way that felt safe throughout and that, were there a next developer, would afford them safety too. If this were a real production system, nothing in the “I don’t love” list would make me want to keep the new behavior out of people’s hands.

So that’s where I stopped. Because software development is always an exercise. We pick a point when we’ve learned enough to produce enough value, a point where more learning isn’t worth more cost, and we stop there. Every product and project leaves value on the table. I won’t pretend my “I don’t love” list doesn’t concern me (it does) or that it doesn’t matter (it does), but I’ll admit it doesn’t concern me or matter enough to be worth more cost. Every chance I get to make that decision wisely is worth practicing.

Posted Wed Feb 25 19:20:40 2015 Tags:

A year ago, with several aspects of my life in heavy ferment, many goals bubbled up and filtered through. How’d I do?


Said I’d make significant lifestyle changes. Did. Moved away from New York and quit my high-stress job. Got a dog and walked him lots. Biked to Cowork a few times per week. In November, underwent corrective nose and sinus surgery, producing a huge functional improvement (though post-op maintenance is still more of a hobby than I’d like). Weight feels more like myself, but not completely. New work routine affords a regular exercise routine. Will start next week.


Vowed to write at least 26 articles. Wrote only 15. Compensated, somewhat, by moving this site to a more comfortable environment (see “Ikiwiki” below), making writing more likely to occur.


Claimed that NetBSD was my top priority for the year. Did some long overdue maintenance on my pkgsrc packages, attended BSDCan for the first time, and spoke at pkgsrcCon for the umpteenth. Didn’t accomplish much for Board. Term ends soon. If lucky, I may get another chance to apply what I’ve learned for the good of the project.


Sad to have missed Kilmer. Made many bad-poetry-like sounds while home recovering from nose surgery, but none where the judges could hear. Reelected to Board. Have been attempting to enlist the active members of the Society in helping refresh their ikiwiki-backed website’s design and innards.


Became an ikiwiki committer. Presented (and live-coded) at Pittsburgh Perl Workshop. And after years of running many other sites, finally migrated this site to ikiwiki.


Committed to spend more of my time with people who care about what I care about. Got involved with RubySteps and did lots of mob programming, including with Alistair Cockburn and J. B. Rainsberger. Now I work alongside people who share my values.


Wrote briefly about some ingredients. Participated in Alistair’s Coaching in an Agile Context.


Needed to feel greater appreciation for my work. Was willing to identify and deliver more valuable work in order to get it. Determined that helping teams make better decisions about software development would be highly valuable. Did some Agile coaching for my employer, and was going to change roles to do more. When that plan was impeded, I left. Now I’m a “Software Craftsmanship Coach” with a software consultancy that shares my values.


Got a place in Bloomington together. Got a very nice dog. Got good at living together. Got engaged. Not bad!


Always knew when that job ended I’d take some months off. Did. Needed the time to relearn to hear and attend to my own needs, to get right with myself before the next thing — all the more so because the next thing really did turn out to be coaching.

35-year-old me nailed it when he wrote “More than ever I know who I am, who’s for me, and who I’m for.” 36-year-old me could not possibly agree more.

Posted Mon Feb 9 22:56:40 2015 Tags:

A few weeks ago, while wandering through Muscatatuck National Wildlife Refuge with Haskell, I proposed to Bekki. She went for it:

the newlygageds

Which is really unfortunate, because under most any other circumstances my joining Pillar as a software development coach would be the most exciting thing going. I start Monday.

Posted Fri Jan 9 12:50:15 2015 Tags:

After eight years with tru podcast — and nearly ten years, all told — I’ve moved my site (and its podcast) away from Textpattern. I promised myself I’d do this in 2014. Missed by an hour; still pretty happy.

Ikiwiki, the CMS I moved to, reflects my preferences for writing in vim, checking my thoughts into git, and storing and serving static content as simply as possible. That’s probably not what most folks secretly wish for. But if you do, and you’d use a static site generator if only there were a sufficiently flexible one, investigate ikiwiki. And if you know you’re going to want to hack on whatever system you choose, take a look at how I improved ikiwiki’s podcasts.

My goal in doing that work was to be just barely as good as tru_podcast — which is to say very good. Thanks to Textpattern and tru_podcast, I was able to share a decade of significant moments as honestly and directly as I knew how. Now that my memories and creations are preserved more reliably, and I can publish my writing and music more easily, I feel a whole new level of safety and comfort about sharing the significant moments to come. I look forward to continuing to share them with you.

To a wonderful 2015!

Posted Thu Jan 1 01:40:36 2015 Tags: