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!
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:
- Not going anywhere without some characterization tests
- 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
- The Primitive Obsession that remains
- 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.
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.
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.
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.
After eight years with
— 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
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
My goal in doing that work was to be just barely as good as
— which is to say very good. Thanks to Textpattern and
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!