I just watched an amazing presentation about the economics of incentives in the context of highly creative work. It’s highly relevant to software development, and yields some interesting insights into the prevalence of free and open-source software. You should watch it immediately [source] :
While I enjoy hearing these things explicitly stated in a research-backed manner, I also feel like this video is highlighting what is otherwise common lore in the software development community. Specifically: Autonomous developers are more creative; People tend to be happier when they are improving their skills or learning new ones; understanding the purpose of your job (and being fulfilled by that purpose) is essential if you want to feel like more than a cog.
After watching this video, my thoughts immediately turned to if I feel my environment is sensitive to these traits.
Autonomy
At the company and product levels, I’m pretty vocal about my opinions. Although it’s not uncommon for me to be wrong, disagreed with, or emphasizing something of too-low priority to matter, I have never been stifled and I feel that many of the things I’ve said have been acted upon. That’s satisfying.
At the development level, I always feel like I’m in control over how I should go about things. Well.. maybe “control”, is the wrong word: external feedback is very valuable to me, and I will generally not proceed if there’s someone who feels that my path isn’t the best one. Lack of consensus seems to always indicate a communication failure or a valid opinion which hasn’t yet been considered, so I think consensus is important to achieve.
Do I feel like I can literally work on whatever I want when I come to work? Well… “what I want” is tricky. I feel that I often have a sufficiently complete picture of the product that “what I want” often corresponds with the current development focuses. There are some killer features that I very much want to do, but if they’re not already on the top of the queue then there’s something more important in front, and if I agree with the importance, then I want to do the more important thing first. It’s very uncommon that I disagree with the current priority queue, and I have yet to find myself working on something that I didn’t feel I should be.
Pitfall: It seems like if devs aren’t in touch with the current product vision or the current prioritization methods, it would be easy to create situations in which devs are working on the things that they don’t feel like they should be working on. This would be bad.
Hobby projects are important to me, and I feel they greatly aid my feeling of autonomy. This article is one such example; I’m in my office right now (Sunday afternoon) because I felt like doing something abnormal, and this is my most favorite environment to be creative in. Tidy Case Events is one of my hobby projects created in this manner, and it’s wonderful to work on and exceedingly wonderful whenever I get an email from someone who is happy with my work. I feel like I have energy for hobby projects because I’m not burned out after work… I like that a lot.
Pitfall: It seems like dev burnout (via overtime or otherwise stressful conditions) will damage autonomy, as the devs won’t be as likely to have pet projects outside of work.
It seems to me like autonomy breeds mastery and purpose. If mastery/purpose aren’t otherwise provided, but autonomy is, then we can autonomously give ourselves mastery and purpose. For instance, I was interested in learning about CoffeeScript and the Google App Engine, so I used my Creek Week (like “FedEx Day” except spread out over a week) to create a new product written for GAE using Python and CoffeeScript.
Conclusion: I feel autonomous. Win.
Mastery
In college, mastery was always related to how much passion I chose to have for a topic. I mastered data structures because I investigated it on my own, because I asked questions and tried new things, because I pursued advanced topics, and because I started teaching others about how they worked… not because I took a data structures class. The class was certainly an enabler, however. I feel the same pattern applies toward subject mastery in industry. I’m gaining mastery in C# and JavaScript because I push myself to try new things when I develop new code. I know I’m advancing whenever I’m embarrassed by code that I wrote 6 months ago.
So… I think mastery is mostly a personal thing. You’ll either strive for mastery, or you’ll be lazy about it. I’m certainly lazy about some types – cmd is still my dominant command prompt in Windows, and I well know that PowerShell is vastly superior… but I’m not fascinated by PowerShell and am happy enough with cmd that my command line skills are stagnating.
Pitfall: I think crunch time is damaging to mastery. If I need something fixed *now*, I’m not necessarily going to learn the best way to fix it, I’m just going to fix it the fastest way I know how. Creative time, on the other hand, aids mastery- finding the better way to solve a problem rather than going with the known way. Good stuff.
Outside of self-drive, it seems like companies can still provide a great service by providing enablers. As with my data structures class, while it may not have pushed me to mastery, it opened the door for me.
Some enablers I’ve experienced in professional development:
- Weekly peer tech talks. These commonly expose me to new topics or at least new ways to do things.
- Guest Speakers. I had a lot of fun siphoning knowledge from Patrick and Brent. They helped expand the amount of things I know I don’t know, which is always great.
- Conferences. I’ve been selecting Business of Software… and I dig it. It’s like an enabler for other enablers. B.o.S. has introduced me to people like Dharmesh Shah, who is a brilliant person that I’ve since learned many things from via his writings and talks, and Seth Godin, whose daily insights occasionally strike a powerful chord and whose books strike many.
- Code reviews… My peers push me to write better code, and I learn to write better code by observing them. I love code reviews.
…Yeah, I feel satisfied in terms of moving toward mastery. I’m commonly learning new things, and that feels good. I have a long way to go.
Purpose
I suspect a lot of people invent their own purposes when the overarching purpose of their work is unclear (or disagreeable) to them. I certainly did that throughout high school and college.
I’m lucky now, as I don’t need to invent my own. I work to help other developers around the world make better software, and there are countless more things to do. I work in a competitive field, but I feel no animosity toward our competitors: they’re all developing tools to help other developers make better software. I think our competition will help us push each other toward better products, and that’s excellent for developers everywhere.
“Somewhere today, a project is failing”
– Peopleware
I’m helping to fix that.

2 comments:
Oi. Long time no see/talk/anything! :) Just realized that you have the same background as my blog. We're blog twins, excet for the fact that I have a picture of a hot korean guy on my site. :)
Cool beans. ;-)
Post a Comment