Warning: This is not a technical post. This is an introspective post that you may or may not find useful. Thought you should know.
I have been thinking a lot lately about the future of my career, asking myself many quasi-existential questions. Questions where my life does not depend on their answers, but that a significantly better life might be made possible if I am able to find good answers to these questions. Questions like: What goals do I have? What goals should I have? What is the best use of my time towards those goals? Et cetera.
That last one is a big one for me and one I am constantly asking. What is the best use of my time? I view time as a limited resource, and I have come to realize that at my age (and is probably the case for many of you), there is literally no time for new things in my life. There is only time for trade offs. If I choose to spend my time doing this, I will not be able to spend my time doing that. Even choosing to write a blog is a trade off. Do I step away from coding for that time? Do I trade one of my hobbies off for an hour or two (I do things outside of coding, too)? Will it be worth it to write about it? When you think about it (and I've probably over-thought about it), there's a lot of pressure packed in such a small question.
I don't have a magical answer to this question, but examining my goals and priorities, I think I've come up with an answer (for now, in this season of my life) that makes a lot of sense and may make sense for you as well. The reason I'm writing this is to give you an opportunity to reflect on the question, examine what I've come up with, and decide for yourself if this information might be useful to you.
In pursuit of that goal, a priority of mine in the last year or so has been to find some great developers to work with and learn from. I do not mean this in just the "I read every blog post and tweet they write" sense. I do that already. I mean this more in the "I want to work day-in and day-out with some incredibly talented people, like so incredibly talented that I often I feel stupid, and glean from their insight and wisdom" sense.
Now, I've worked with a lot of great people and some who were so naturally talented at programming. You probably know the kind of developer I am talking about. Individuals who seem to consistently be able to grok new concepts and APIs. Devs who are consistently on the edge of the curve. While I have worked adjacent to these people, rarely have I worked with them.
I don't think I can pinpoint precisely why, but I think a combination of business incentives and the fact that a great dev might not also be a great mentor have played into this. As for the former, I don't think that a company's interests align with my own self-interest to learn from the best around me. The company gets more value out of me performing at my current capacity and the great dev at theirs, rather than me operating at a lower capacity, but supporting and learning from the great dev. I do not blame businesses for this, it is simply the nature of needing to generate revenue.
As for the latter, while there are certainly those who are great devs and great mentors, I think that is a rarity. I think often the priorities that have led to one becoming a great dev are orthogonal to the priorities of helping others become great devs. To put it concretely, some people might prefer code to humans, and thus have become great at coding by this preference.
Now, herein lies the rub. I know that I am improving simply by coding more, by going along with the agenda set forth by the business and my managers. I also know that the fastest, most efficient way for me to learn is with direct interaction with another individual who knows something better than I do.
Imagine how much better you would be if you got to pair program every day with your favorite incredibly talented dev. It would be laborious, counter-productive (in the business sense), but you would grow immensely. It would be wonderful.
I think this is rare. I know it happens. For example, I remember in a Shop Talk Show episode from several years ago with Tom Dale where he exuberantly talks about the opportunity to pair program with Yehuda Katz every day. I have no means of judging (nor do I intend to) Tom's skills prior to this experience, but could you imagine working with a very talented individual every day and not being significantly better for it?
"Alright Kyle, get to your point!"
Ok, I will. My point is, I think it is unlikely that, regardless of the talent I work with on a day to day basis, I am ever going to have the opportunity to work closely with one of those "so incredibly talented I feel stupid" individuals. I think it is more likely, due to my own talents and abilities, I will simply work adjacent to them. A company can't afford to have me slowing both of us down. How then should I achieve my goals in line with my priorities?
I think the answer is open source software.
Up to this point, I have not pursued being a major contributor to any project in open source. I have made a handful of commits to a number of projects, picking issues off here and there, but have not yet done considerable contribution or maintenance. I think perhaps the best chance I have of working with the "so incredibly talented that I often feel stupid individuals" is to work with them where they are, without switching jobs.
Another way to put this is, which is easier, getting a job at the company and on the team of a particularly talented individual or working with them on a feature or bug on their open source project? Probably the latter.
In fact, some of the individuals I would love to learn from only work in open source. It's their job. Seems like my only option is to work with them there.
To put this succinctly, I think I'm going to start aligning my goals and priorities to spend more time working in open source with some great developers. If you want to learn from the best, it seems the most efficient way, the best use of my time, is to go seek them out where they are.
I'd be interested to hear what you have to say about this. Have you thought about this before? Do you agree? Disagree? Let me know either in the comments or on Twitter.
And let me know if you want to pair program sometime, too.
UPDATE: 11/1/17?—?Several people in the comments and on Twitter have brought up the point that pair programming isn’t necessarily “counter-productive” to a company’s interests and goals. I wanted to take a moment to address this.
I want to start by admitting that they are right. My language is a bit too rigid here (but, that’s sort of the point of me putting my thoughts into the world, getting feedback, right?). There are certainly scenarios where pairing and collaboration can be in a company’s interests and priorities, so long as the value derived from the improved product exceeds the cost of the collaboration.
I also want to admit some personal bias in this area. Pair programming has been irregular and limited in my time as a developer. The vast majority of my career has been working independently. On a team, but not really with a team. I have mostly worked in agencies where high output, one-off projects, and short deadlines are the norm. You can imagine why pairing wasn’t as common or encouraged in these places.
In fact, at a previous employer, I was mislead into thinking I would be working on a team. Instead, I was the only front end developer in the company and worked alone for the entirety of my tenure. That season in my life was an impetus for me to be more involved with online communities such as Twitter and Reactiflux. There simply wasn’t someone else to interact or pair with otherwise.
I do not share this to generate pity. I share this so you might understand why I came to certain conclusions. If it prompts you to pause and consider why you have come to your conclusions, all the better. We must do our best to remember that people can have vastly different experiences than our own.
So I want to end this update with my thanks and gratitude. I appreciate the feedback and hope there is more to come.
Also, it is my sincere hope to spend more time pairing and collaborating in the future. I wasn’t kidding, let me know if you want to pair program sometime.