In my last main post I talked about my desire to look for and work with mentors around me. As I mentioned in my shout out to Corey, I met a lot of amazing people when I was down in Florida visiting Hashrocket and attending BizConf. Among them was a fellow from Sweden by the name of CJ Kihlbom. He told me he ran a Rails shop in Gothenburg and seemed to be on the same page as me as far as development practices and all that. Of course, whenever I get the chance to hang out with people from other countries, I invariably ignore our common professional interests in order talk their ears off about travel, politics and food. I then summarily invite myself to visit their country with them as native sherpa, yespleasethankyouverymuch.
Unlike most people, who brush me off as the crazy person I (however accurately) appear to be, CJ actually went along with my scheme. A month or two later I contacted him to find out when would be a good time to visit for a few days and he said, “How about next week?”
“…uh, next week?”
“Yeah,” and then against his better judgement, “and how about you stay for a couple of weeks. We have some contract work available. Can you take the time off?”
Two weeks later I was on an Air France plane to Gothenburg.
I write this as I finish up my last week working at his company eLabs. It’s been all Rails, all TDD, all pair programming, all the time. And it’s been fantastic. CJ has been amazing to hang out with and work for, and I was also elated to find that he has a stellar team of developers and designers.
They run a tight, agile shop *and* make it look effortless. That is the part that really gets me. Everyone is dedicated to an Agile process and takes real pride in having a craftsman’s discipline. However, they aren’t obsessed with the details of a methodology. They don’t run around going crazy with burndown charts, kanban boards and ScrumMaster certifications. Instead, their project management tools are the simple, inexpensive, well-built tools like Campfire, Pivotal Tracker and Harvest. Their storycarding planning sessions are straight forward, relaxed and without ceremony – although occasionally a bit hard to understand for the non-Swedish-speaking amongst us.
It’s a no-BS approach that I love. Besides the huge amount of Rails and testing knowledge that I’ve picked up from the devs here (thanks in large part to Jonas Nicklas), I’ve seen how at least one company can adopt Agile & XP practices without making a big production of it.
I’ve taken a lot of inspiration for my “apprenticeship” and this series from the Software Journeyman Corey Haines and his pair programming tour. Corey’s dedication to Software Craftsmanship has led him on a tour for the last several months around the Midwest and East Coast of North America pairing with other craftsman for room and board.
Not only is this a totally rad thing to do, but Corey is a pretty rad guy himself. I was lucky enough to have the opportunity to hang out with him while I was visiting Hashrocket and attending BizConf earlier this year. I owe a lot of my current passion to my conversations with him and the folks to whom he pointed me.
If you’re interested in Software Craftsmanship, then he is one of the Guys You Should Be Paying Attention To.
And if you see him at a conference or your local dev shop, say ‘hi’ for me, buy him a scotch and get him talking about craftsmanship. It’ll be worth your time.
In the comments to my last post a good friend of mine (who happens to be one of the journeyman I look up to) asked why I think the “solo” or “masterless” apprentice situation is so common.
In Just Some Kid I said there are two main reasons why we grow up too fast in the software development craft: Ego and Money. I think the second one is a big influence on our current situation and obviously is a practical concern for everyone.
When we get out of college and we need a job we don’t think, “Man, I really need to find a mentor to study under.” We think, “Man, I’d really like to eat something other than ramen and Pabst Blue Ribbon.” So we skip that whole step where the focus is to learn. In doing that, we miss out on a great opportunity to apprentice to a mentor.
A little context – What is an apprentice?
As I understand it, an apprentice works for a master craftsman, learning the craft and his master’s Way.1 A Way is simply that particular master’s time-honed methods for producing great crafts and maintaining a sustainable workshop. And a master’s Way is, of course, influenced by her mentors’ Ways.
I wish had gone through an apprenticeship 7 years ago when I first started in this industry. It just wasn’t in the stars. With a load of credit card debt and Sallie Mae staring me down the options were go sling coffee at Starbucks or find a job at a little web shop where I could get paid to be the only code “expert.”
And now I’ve been out there in the working world for a while. I’ve worked for a few places and picked up some good stuff along the way, but not everything I’d like to have. I’m a de facto journeyman2, but one who never went through a true apprenticeship.
So what do I do? I’m not going to drop everything and go back to square one. I have a life and a house and everything. How do I patch those holes in my education? How do I adopt the apprentice’s open mind when I have a Real Job™?
I take mentorship in small doses and as often as possible. I apprentice to many masters. I might not be able to study under my mentors 24/7 like some ancient kung fu devotee, but I can seek out those around me willing to share. Sometimes I’ll take an afternoon or a whole Saturday to spend time programming with someone I really respect. I’ll ask them to revue my code. I’ll listen to their war stories from the old days of punch card programming. I’ve even gone over to their companies to give them some free work just to see how their Way works and how their masters do it.
There are mentors everywhere. You don’t have to be at the start of your career to study under the masters.
Find your heroes and go sit at their feet for a little while.
And by the way, if you want to share your Way, I’d love to come hang out at your office. Hit me up on Twitter: @kfitzpatrick
1 – In the old European guilds, an apprentice would start out at as young as ten years old and live as part of his (or rarely her) master’s household. http://en.wikipedia.org/wiki/Apprentice
2 – I can charge a very reasonable day’s wage. See http://en.wikipedia.org/wiki/Journeyman#Origin_of_the_title
As of this post, I am 28 years old and I’ve been practicing web development professionally for the last 7 years or so.
Which pretty much makes me a baby. Sure, I’ve had the opportunity to work with some really great, high profile clients and companies and they’ve paid me well for it. But, there are folks out there that have been working in the computing field for over 50 years that have forgotten more in the last 7 minutes than I’ve learned in my whole career. So, compared to them I’m just some young kid.
In the web development world, most of us are forced to grow up very quickly, professionally speaking. We get out of college and it’s time to find a job. A good paying job at that. Otherwise, why else would we have acquired all that debt? We never really get a chance to be young and inexperienced.
There are a couple of reasons that I can see for this. The first is primarily financial. Being inexperienced means it’s pretty hard to find someone who will take you on as a green, young developer AND pay you the kind of salary you need for those student loan bills. We’re forced to grow up because we need to pass ourselves off as an “expert.” It’s all about making money and padding the résumé so you can climb up to that next job. It may be good, well-meaning, honest work that you’re putting out there. But you shouldn’t fool yourself: no one can really become an expert in a couple of years. It takes some serious time to master this craft.
Do this for a couple of years and you might even start to buy your own hype. And that’s dangerous. Really, really dangerous. Dangerous because our egos can prevent us from learning because we don’t want to look uninformed. Especially to ourselves. No developer likes admitting that they don’t understand something.
Which brings me to the second reason: Ego.
There are a lot of people my age that we all look up to and say, “Man, that guy is a genius. He’s only 25 and he developed X framework/library/technology/masterpiece.” So we aspire to be that next wunderkind and produce our masterpiece1. And that’s great, we should be inspired by our peers. We should be trying to make the best software possible.
But, there’s danger here, too. While you’re trying to think up your killer app and prove just how clever you really are, you’re missing opportunities to learn from the real experts out there. Too often I see young developers like myself focusing on becoming well known as this week’s badass and missing the big picture.
The reality is, if you’re anything like me, you haven’t been doing this development thing anywhere near long enough to call yourself an “expert.” You might be a dedicated craftsman, but it just takes lots of time and experience to get there.
I’ve recently had the opportunity to spend time sitting at the feet of some real masters and some truly accomplished journeymen2 that I respect immensely. And let me tell you, there is nothing more healthy for one’s ego than to sit quietly and get schooled by your betters. Next time you’re at a conference, try to find the people you really respect. Then watch and listen carefully and figure out who they’re quietly sitting and listening to. And then pay attention, cus that’s the guy you’re supposed to be learning from.
It’s OK to be young. It’s OK to be inexperienced. And it’s OK to admit you don’t know how something works, even if you’ve been doing this stuff for a while.
As for me, I’m trying to embrace my naïveté, pay attention, and hope I learn something.
1 Technically, in the old guild system a Masterpiece was a work that a apprentice or journeyman craftsman created and was their test of fitness for the title of Master, giving them the right to enter the guild, start their own workshop and have apprentices of their own. http://en.wikipedia.org/wiki/Masterpiece
2 In the old guild system, the word ‘journeyman’ refers to their right to charge a fee for each day’s work. The word comes from the French word journée, meaning the period of one day. http://en.wikipedia.org/wiki/Journeyman