An interesting article made the front page of HN the other day:
This article touches on a number of key topics that have affected me as well, so now is a perfect time to get my thoughts on these issues down on digital paper. Please read the article yourself, but here is how I’d summarize the key points:
- The author says that, after 25 years of coding (since the youthful age of 11), they have nothing to show for it “that is mine alone”
- The majority of the author’s coding effort has been for others, either as an employee or work-for-hire
- The author is generally proud of this work, and of their skillset as web dev:
- Has worked on big projects that generate millions of dollars of revenue and have hundreds of thousands of users
- Author studies every day, that is, they constant invest in themselves to learn more, get better, etc
- But, the author has struggled to complete personal projects to the point where they feel comfortable publishing or sharing them
- The author identifies a number of reasons for this:
- Historically, they have done extra work outside of their main gig to pull in more money. But this has left them with the double curse of less time and more stress when attempting to work on side projects.
- When they have worked on side projects, they ultimately don’t finish due to getting bored or their attention moving elsewhere (author calls this “forgetting”, but I think it’s less about forgetting and more about moving on)
- Author identifies as a perfectionist, which makes it hard not only to finish projects, but to feel they are good enough to share
- Perfectionism manifests itself in such things as going down too many rabbit holes and over-designing in the pursuit of making the best thing
- The author identifies a few ways to deal with this, in order to actually get things done and feel good about the progress:
- KISS (keep it simple, silly/stupid/etc) and Just Do It
- Ditch the extra clients. The additional money did not lead to a step-change in their quality of life, so get rid of them. Frees up more time and lowers the stress level.
- Picked and did a small project, and released it
- Started to go down a rabbit hole, caught themselves, stopped, and just released what they had
- Developing is much more social now. The best way to participate in this is to share code, articles, projects, etc.
There’s a lot to unpack here, and the things that resonate the most with me are the notions of Perfectionism, Boredom, and the Social nature of development. But before delving into those, it’s worth setting the historical context.
25 years ago was 1993/1994, and that’s a long time in Web-years. Even 15 years ago, 2003/2004, is a long time ago for the practicing developer. Google IPO’d in 2004 and had less than 2000 employees then. Twitter started in 2006 and GitHub was founded in 2008. Before GitHub, the main way to share code was either on your own website, or on SourceForge, neither of which was terribly motivating. If your career started after all this, you have a different mental origin story, you’ll assume, and not assume, things in a much different way than earlier generations, and you’ll be on the receiving end of this experience yourself once the current kids are all grown up.
But back to the main points:
Perfectionism is something I have struggled with all my life. I’m much more level-headed about it now, but to say it was disruptive is not an overstatement. For example:
- In my senior year of high school, I dropped my art class because I couldn’t finish a particular artwork (I was copying a National Geographic cover with lizards on it). Rather than hand in something crappy, I quit. Worse yet, I didn’t know how to bridge the gap to get better, and my art teacher was useless to offer help and I didn’t know how to really force it out of him.
- In college, I deferred finishing my neural networks class so I could finish the final project over the summer. I always struggled with picking final project topics in many classes, as I could never find something I was really interested in. I ultimately did finish, and I was glad to have had the extra time, but it’s taken me many years to hone the art of picking good things to work on, at my current skill level.
- And on and on. I could give many more examples of this.
Perfectionism is a real mental stumbling block. So if you’ve struggled with it too, you’re not alone as they say, and I’m still dealing with getting over it too. Like the author, I don’t have the problem at work. It really applies when I’m trying to do something outside of work, that I want to be proud of for its own merits. I don’t have any “silver bullet” answer, but here’s a quick summary of my current plan of action:
- First, I only tackle things I’m truly interested in. If there’s a technology I’m trying to learn, I always try to find an example that resonates with me, even if it’s not cool, flashy, etc. If I feel like I’m doing to meet social or other expectations, it’ll fail, so I won’t go there now.
- Second, I set reasonable expectations. I have only so much time and energy outside of work and family. I don’t need more stress, so I only tackle projects that feel good not only to work on them, but to make progress and finish them.
- Third, I’ve redefined the unit of effort. There’s so much emphasis these days on full projects. I’m much more interested in using programming as an exploratory tool. So the output of that isn’t so much a full project, but smaller-scale things: experiments, small examples and exercises, etc. Think programming “in the small”.
- Fourth, the author mentions “fear of judgment” and I’ve always found that accompanies the perfectionism mindblock. And honestly, the biggest judge isn’t you, the audience, its ourselves and our own self-perception of our work and accomplishment. So I deal with this judgment fear in a few ways:
- First and foremost, focusing my efforts on my blog, on my domain, not somebody else’s turf. My house, my rules. It’s a control thing, absolutely. But it works.
- Secondly, fully developing out the ideas here on the blog, then having them permeate elsewhere (ie to GitHub etc) when the time is right, in stages. This is actually a key point: lead with your strongest skill. For example, I’d rank my skills in this order: 1) Writing, 2) Coding, 3) Social. Thus, I’m most comfortable writing and developing my blog first, and then getting pieces of work (be they experiments etc) onto GitHub, then engaging more directly on the social front. For other people, the ordering might be the opposite.
As mentioned above, Boredom often overlaps with Perfectionism. But I would redefine things a bit. Boredom is definitely a symptom, but I think the root cause is what you could call Disengagement (for lack of a better word), the feeling that you’re not genuinely invested in something, that you’re doing it based on expectation or obligation, real, perceived, or otherwise.
I think a common place this shows up is how many companies do whiteboard interviews of algorithmic questions. Many people feel like they are studying that material to just “pass the test”, and find the end-to-end experience really frustrating.
Similarly, with side projects, I’ve always battled in my head with work that established your Professional Identity (the “hireable” you), vs the stuff that you just enjoy sake (that you could say develops your core “personality”, as expressed not by your clothes or choice of music, but your project-based artifacts and choices).
I’ve struggled with this dichotomy for a long time too. I always felt external pressure to focus more on the “professional portfolio” side, but when I’ve gone and looked at other people’s portfolios (be they developers or designers), sometimes i’ll see some real flashy output, animations, screenshots etc, very glossy and eye-catching and all, but I find myself wholly unimpressed by the substance once i get past the style. Like, it’s clear you just wrote that app to get a job, the lack of genuine engagement and enthusiasm is generally evident.
My current feeling is just to recognize that your Professional and Personal identities are in fact separate, both are important (the professional work puts food on the table, and personal work offers deep satisfaction), and sometimes the two identities overlap, but that’s a very subtle topic for another time.
Of course, time and energy are scarce, so you have to pick a kind of ratio for spending that time and energy on personal vs professional projects. For me, the ratio doesn’t work out at 50/50, so I’m focusing more on the personal right now. The pendulum will swing over time and that’s fine.
As for the final topic, the Social side of development, GitHub and pull requests and open source and all the like, well, I’ve run out of steam for now, so I’ll get back to that later, but it’s probably the topic I have the least insight on.
Now the perfectionist side of me would say this post is too long and rambly, and could use editing, etc. But that’s fine. I’m going to post it. I can clean it up later, in proportion to how much interest it generates. I can also “refactor” writing, to pull good ideas into separate articles. It’s amazing what you can do with words when they are not stuck in dead-tree form!
I’ve been coding for about 20 years now (since 18 in college, I was not an early starter), and I can definitely I feel like I’m just beginning too. But what I’m really beginning, is taking not only this skillset (programming etc) that has historically just been a job for me, but the whole exploratory mindset of just trying things for the sake of it, and making it my own.