Don’t Focus on Coding Mastery — Focus on Getting Better Each Day
June 25, 2020
I’ve had a pretty short career as an engineer. I’ve spent ten years writing code in a professional context across a few different companies, and only 6 of those as a full-time engineer.
In that short time, I’ve had those moments where I realized I wasn’t where I wanted to be as an engineer. I was taking a while to code seemingly simple solutions, and I felt like no matter how hard I tried, I wasn’t getting that much better.
We all want to become masters. We want to become expert craftsman (or craftswoman) in the art of coding. We want to have those moments where we see a problem, know how to fix it, and then execute as if it were an intuition rather than conscious thought.
While I applaud the goal, I want to caution you. There is a good chance that by focusing on that goal, you will only feel constantly discouraged and constantly unmotivated. Focusing on becoming a master will always leave you feeling wanting because you will never “arrive” like you think you will.
Here are some reminders to help stay motivated and encouraged on your road to mastery.
Mastery Takes Time You
I’m sure you have all seen the tweets or heard the stories of developers going from junior to senior in a few short years. These stories might be factually correct, but I’ve found many of them aren’t telling the whole story.
I’m not claiming these engineers are dishonest or phony. They indeed worked hard and put it a ton time to get to where they are.
But, whenever I’ve dug into the stories of these seemingly fast stars, what I find is many, MANY more years of work than what it appears. It might not all be years of coding mind you. Some spent years building businesses as a teenager and so had built up many other skills besides just their coding. Others were at the right place at the right time to accelerate their growth because they put in the years before to get that job in the first place.
In either case, there is usually a long road that they took to get where they are. To be a master software engineer, you need experience solving a vast array of problems to become a master. Don’t be discouraged if you haven’t made it yet when you’ve only been in the industry for a few years.
Focusing on Mastery Diminishes Actual Progress
When you spend all of your time thinking, “I’ve got to become a master! I’ve got to become a master!” you never realize how far you have come. You will forget what you have already learned.
I experienced this a few years ago. I was dealing with a framework and had struggled to understand it for the past several months. I wanted to become a “guru” in this framework since our whole company was using it — I wanted to stand out from the crowd. Sadly, the process wasn’t going so well.
Then one day, I had a breakthrough. I had one of those days that most developers dream about. Everything fit perfectly in my head. I saw a problem, knew how to solve it, knew how to code it, knew how to test it. It was the peak of a psychological state of flow. I intuitively knew exactly what to do.
If you had asked me that same morning where my level of understanding was in the framework, I would have shrugged my shoulders. I would have said, “I don’t know it that well. Still learning.” But I was further than I thought.
Now would I call that experience mastery? No! I now know far more than ever before that the framework I was using is more complicated than I had thought at the time. I am still learning it today.
But it was a small win, and that is important.
Focus on Getting Better Every Day
It sounds like just psychological mumbo-jumbo, but you need to focus on your small wins. Focus on getting only 1% better each day (see the chart above).
James Clear (and many others) have talked about the idea of “continuous improvement” and the effect of compounding. And while it isn’t stated exactly that way in the Agile Manifesto, there is a real sense of continuous improvement within that framework as well.
So how might you start this journey towards getting better every day? Here is one way that I do my best to follow.
Pick an aspect of your code or your skills to improve each week. Write it down. Focus each day on improving that one skill for the week.
At the end of the week, reflect on how you got better, celebrate your improvement, and then pick a new one for the week ahead.
Picking a skill to focus on like this is effective because instead of having to become a master, you just need to improve a little on one thing one week at a time. If you take that seriously, then by this time next year, you will have spent focused time improving or building 52 skills. 52!
What most people do, though, is this. They dream of being able to code like a master but never take a coding challenge or a difficult story. Wish they could communicate clearly and effectively, but continue to stay silent and never write, blog, or propose an idea. Sulk about not knowing more than one language instead of asking their manager for 1-hour a day to learn it, outlining the benefits it would have on them and their team. They are frustrated at themselves for not having a mentor instead of reaching out and asking a senior engineer they admire to mentor them.
Create smaller goals that you can achieve by the end of the week. Its the culmination of achieving those sorts of small-wins consistently over time that will take you to the next level.
Becoming a master software developer is indeed worth aspiring too. It requires time, effort, and mentors to help get you there. But it shouldn’t be your focus.
Instead, be patient, celebrate your small wins, and focus on getting better each day. Identify a specific skill each week to improve upon and reflect on your progress after. You will become a much better developer in just a few weeks.
If you enjoyed this article you should join my newsletter! Every other Tuesday I send you tools, resources, and a new article to help you build great teams that build great software.
Dan Goslen is a software engineer, climber, and coffee drinker. He has spent 10 years writing software systems that range from monoliths to micro-services and everywhere in between. He's passionate about building great software teams that build great software. He currently works as a software engineer in Raleigh, NC where he lives with his wife and son.