October 14, 2013

resonance-0.0.0-RC2: In the beginning was an Idea to Build an App

I am currently a reformed software engineer.

As I mentioned in a previous log, I don't get many opportunities to code these days at work, and I feel that I could use more engineering practice. I would like to reform my software engineer skills, and grow them.

I certainly participate on engineering projects, but I am working across many teams. I also rarely work at the detailed level, unless I am brought in to attack a particular hard problem. On top of this scarcity of opportunity, my management style does not lead me to solve engineer's problems directly, but to mentor them and to bring the individual and the team up to level that they can solve these problems directly. This leads me to be gathering very little personal practice at the code level.

As an engineering manager, I have been giving some mentoring advice to my engineers, that once they reach a certain level they need to bring in outside practice to considerably improve their skills. Now, everyone's "certain level" is different, but at some point you are capped by your experiences. If you are really lucky, your work experiences might be varied and ever-changing and therefore allow for a faster pace of growth, but it is more likely that your work will be homogeneous in some way (same tools, same language, same infrastructure, same domain, etc.)

One bit of advice that I gave (that had the side effect of deeply resonating with me) was Rich Hickey's presentation on Design, Composition, Performance. His presentation is based on an extended metaphor around the practices of a master musician relating to the practices of a programming. Among many other points, he likened day-to-day software development to jazz improvisation. This point reminded me of just how really hard it is to improvise. In past lives, I have been in jazz ensembles as well as comedy improvisation troupes, and it took many hours of practice for every minute of performance to get beyond mediocre. Why is software development different?

Even if I decide to liken day-to-day engineering at a job to the Beatles first 10,000 hours, I feel that I need to keep the practicing going. While I am unable to keep the serious practice going at work, I would like to not have my practices go totally stale. I don't want to be one of those engineering managers with old war stories that I inflict on the next generation.

On top of my own reflective concerns, when I am called in to help directly, I am asked to attack the hard problems, not the easy day-to-day ones. I need to be technically creative on demand -- I need to pull out those engineering "riffs" that can help the team get past the roadblock. This draws me to a quote by Twyla Tharp from the Creative Habit:

In order to be creative you have to know how to prepare to be creative

This project will be my testbed for some engineering "riffs" to learn and practice. Some of them might apply to my day job, some of them may be new influences, and some of them may be out of left field. I will be working to create an "oasis" outside of my daily stress as Mr. John Cleese recommends, and this project/blog will be my current dojo.