I’ve been helping a friend learn Ruby on Rails1. And like most programing conversations it drifts from language syntax into the philosophical. Our recent conversations remind me of the countless hours my coworkers have spent with me, teaching me how to craft software. We walked through the design, syntax and style — I learned a lot apprenticing under great tutors.
In 2002 I made a dramatic career move. I left my teenage dream job — interning as a middle school pastor-guy at my church.2 I bailed on bible college and was ready for a big career change.
Like many Silicon Valley kids in the 90’s, I grew up geeked out writing BASIC, [Pascal](http://en.wikipedia.org/wiki/Pascal_(programming_language) and doodling in pirated copies of Photoshop3. So, I applied as a web and graphic designer at a young, small, company. It didn’t pay much, but I was living at home and just came from working for a non profit. Over time, I started writing a few simple intranet applications in PHP. It was some bad code, I mean real ugly stuff. But, I had the good fortune of being around a handful of great C/C++ developers.
Prior to this, I had taken a couple of programming classes in High School and I knew I could hack my way around making something pretty appear on the screen. Yet I suspected that there was more to programming than just getting the right result to eventually show up. I started researching and reading. I picked up a copy of The Pragmatic Programmer written by by Andrew Hunt and David Thomas. I was hooked by the first chapter. This was the beginning of my journey as a software developer. Thomas and Hunt write:
Programming is a craft. At its simplest, it comes down to getting a computer to do what you want it to do (or what your user wants it to do). As a programmer, you are part listener, part advisor, part interpreter, and part dictator. and a couple chapters later they write Every craftsman starts his or her journey with a basic set of good-quality tools. A woodworker might need rules, gauges, a couple of saws, some good planes, fine chisels, drills and braces, mallets, and clamps… the tools become conduits from the craftsman’s brain to the finished product—they have become extensions of his or her hands. …Tools amplify your talent. The better your tools, and the better you know how to use them, the more productive you can be.
They framed programming as a movement from journeyman to master craftsman. The progression from apprenticing to mastery. The tools were knowledge of the language, ability to perceive systems, dissect them and the knowledge of text editors and IDEs. Along the way I had coworkers and managers who supported me, taught me and challenged me. I was extremely fortunate to be surrounded by these people.
He is a stellar front end usability and HTML/CSS guy4. It is a blast working with him as he learns a new language and the Rails framework. He has experience writing PHP, so we end up talking about the Ruby language and style.
One afternoon, as he is getting more familiar with Ruby, we starting talking about careers and programming-jobs. Then, earlier this week he casually sends me the following iMessage.
How do you know you wanted to be at Vox Media over your previous employeer? * What was the piece that attracted you to them? * Was it the product? was it the people? * was it the tech? * was it the problems to solve? * all of the above? how do you know in 2 years that love or excitement won’t fade away?
I’ve spent the last 11 years of my professional life writing software. I tried to place myself were I’d be challenged, pushed and on the steep side of the learning curve. I tried to surround myself with people who had a lot of experience developing software. Of course, I didn’t always succeed or have a great attitude (initially). Learning from failures is powerful, though I don’t know I’d have the endurance to only learn this way. And I did learn a lot. I got to ship products written in PHP, Ruby, Java, Groovy, C and C++. Every step of the way I tried to find people who could mentor me, and help develop high quality software. People who would teach me how to think, how to dissect problems and write high quality, maintainable and efficient code.
I learned a lot, but I also sacrificed two things5.
On a few occasions I bypassed higher paying jobs to remain in a culture where I would continue to learn a lot.
I never built a product I was passionate about. There were many little things that made my contributions fun and rewarding, but what our products provided for society and the problems it solved — they were not interesting to me.
As a young developer, I was more interested in the learning, people, methods, tools and programming languages than anything else. That focus has served me well for the first ten years. Recently, through another series of events6 I found myself seriously thinking through changing jobs. What did I want?
I knew I wanted to build a product that I was passionate about!
I didn’t want to ditch the other qualities. I wanted to work with people who loved what they did. Developers who are competent to architect, write and maintain high quality software. And I needed to work with real people; who enjoyed each other.7
I also wanted a place where I could be proud of my work. Somewhere that was contributing to society. A place where others could interact and use the product I was building. If possible it would be fun to work for a company that is trying something new or thinking different about what is normal.
I want a place where I can have Autonomy, Mastery and Purpose. Autonomy – I have some say in which problems I solve and how I solve them. Mastery – continue to grow my capabilities and refine my skills. Purpose – my work has meaning in a larger, society benefitting way.
The key is finding the balance of those components that captures your attention and allows your work to engage and satisfy you. Sometimes one is more important than another. I think this blend and relative weight is unique for each person. Right now, I am excited to focus on the product Vox is building. And I enjoy working with other great developers to execute it well.
The reasons and details of this might end up in another article on this site at some point. ↩
I remember going down to my local Kinkos in San Jose, California with my SyQuest 44 removal disk and snagging the System 7 version of Photoshop 3.0. Lens flares and procedurally generated clouds was where it was at. ↩
Technically I think his title is “UX Engineer.” ↩
I really don’t mean to complain. The market for software developers is healthy. Relative to many other jobs the pay and flexibility is fantastic. It is mentally stimulating, portable, location independent and accessible to anyone who can use a computer (I mean this in the physical accessibility sense, clearly not everyone is able to successfully write software. It is a skill that takes time to develop and requires a certain mental-anility.). It fits well with the service-oriented economy we find ourselves in. Our always-on always-connected lives require more software than ever before. ↩
This pretty much excludes large companies and projects with large teams. I doubt the culture I wanted (or maybe needed) exists in bigger companies. I am sure there are individuals who are incredible in big organizations, but after some large number of employees there is enough organizational-cruft to suck the humanity, job, efficiency and fun out of people. ↩