Mike San Román's homepage

A simple plan for becoming six times better

May 04, 2020

"I'm a greater believer in luck, and I find the harder I work the more I have of it"
– Thomas Jefferson.

Imagine going to the gym and only performing biceps curls, over and over again, with the heaviest load you can bear. It's unlikely you'll see much progress working out that way, and because of that, you might get discouraged, or even worse, hurt. Instead, working with a personal trainer and coming up with solid routines that work every muscle in isolation will help you get where you want to be much faster, right?

After I shared last week about the importance of deliberate practice, a few of you reached out asking for advice on how to pick a topic or come up with a plan to be efficient with it. And indeed, having an efficient practice plan is essential to improve our skillsets in the best way possible.

So I wanted to bring up a few things today that I feel are key to create a solid focus on your practice and improvement.

Step one: practice self-awareness

Before you set to create a plan to improve your skillset, you need to have a clear idea of two things: where your skills are, and what would provide the most value to those paying for your skills. It's one thing to learn React because it's the hottest framework, and another different thing is to learn it because your dream job uses it.

Chasing the next shiny tool is always going to get you in a position of scarcity, there is always going to be something more modern that you don't know yet, but pursuing it is not going to be of any benefit for you unless you can find leverage in that knowledge.

With this in mind, prioritization becomes easier. There are things that transcend current needs and tools:

  • You can investigate how to use a frontend/backend framework building a well-known app clone.
  • You can learn about an SQL or NoSQL database.
  • You can read about design patterns and how to apply them in different situations.
  • You can practice refactoring, and work on being able to get fast from one version to another of your codebase while minimizing regressions or bugs.
  • You can learn Git (or any other VCS) so well that the most ordinary things you come across on your day to day (dealing with conflicts, updating a repository, creating new versions, etc.) are second nature to you and you don't even hesitate on them.
  • You can learn to move around your code editor at the speed of light, knowing all keyboard shortcuts that can make you move faster than your current click-click -cmd-c-cmd-v approach.
  • You can learn about test-driven development, and figure out how to be able to test in isolation features and pieces of code you keep coming over and over.

Many things on this list are based on knowledge and tools (refactoring, design patterns, etc.) that have a longer lifespan than many frameworks you might see on Twitter today. And that's the beauty of it: you are investing in a knowledge that not only is timeless, it is also something that can give you a performance boost on your day-to-day work starting tomorrow.

There are other things on this list that while the thing you pick can be more short-lived, like your current editor shortcuts, or if you have terrible luck, the database or framework you decided to learn. But many of those apply similar patterns, so learning the next one will become much easier: learning Laravel was a breeze after knowing Ruby on Rails, and learning React back in the day was quick because I could focus on what was different from Backbone and Angular. That's the knowledge that compounds if you are able to break concepts down properly.

Step two: break it down

But Mike, this is a ton of work! It's going to take me years to master all this!

Yes, yes, it is, if you're just applying brute force to the problem. But just like with the topics to learn themselves, you can break things down here and prioritize by what can give you the most leverage to learn the next thing or to implement the next task at work.

If you keep having issues with Git, and dealing with merge conflicts is something that can ruin your afternoon, maybe you could visit sites like https://ohshitgit.com/, or blogs about how to rebase and then practice on a copy of a big open source repo so many of these commands that you can confidently do it in your work repos without fearing you'll break things.

Maybe you are really struggling with a legacy piece of code that begs for a refactor, but you don't know where to start, and going to wikis like https://sourcemaking.com/refactoring/smells helps you find a code smell that feels similar to what you're facing, and you can fix it by refactoring and applying this design pattern you didn't know it existed.

Is your editor too complicated, and you don't know what keyboard shortcuts to learn? No big deal: unplug your mouse for 30 minutes. Don't use your trackpad. You'll be more aware of which actions you go towards your mouse. Maybe you are navigating through a huge project using point and click on the sidebar, where using a fuzzy finder would give you the file you're looking for in less than a second.

This 30-minute exercise will give you already pointers on your most used actions that you are doing in the most inefficient way (reaching for the mouse). This alone will be a 10x performance boost for you, I promise.

Step three: act on it

All this analysis and tips are worth nothing without action. I've been dedicating between 30 minutes to 1 hour to honing my skills daily before I start working (and sometimes even as I was starting my workday since I know this small investment would yield huge returns to my work anyway).

Just dedicating 30 minutes feels like something that it's not going to get you too far, but you would be dismissing the power of compounding again: if you improve even just 0.5% every day on your work skills, you'll be over 6 times a better professional by the end of the year (1.005³⁶⁵= 6.17).

Feels like a good deal for such a low effort, isn't it?

So go ahead, act on this. Figure out the best areas for you to improve, invest time in creating a strategy to learn about them in a safe environment, work those mind muscles in isolation, and bring them to your toolset day after day. And keep iterating, figuring out what's the next, more rewarding stuff to focus on.

You got this. Hit me up if you want more tips customized to you, anytime!

Thank you for reading 🙏