Most developers have heard of or read the book The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt and David Thomas. There's a great quick reference guide for the book by Jeff Atwood at Coding Horror. It contains the tips and checklists from the book.
Re-reading that quick reference guide got me thinking about ways I can improve how I code everyday. Do I focus on my weaknesses or make my strengths even better? Is there a way to identify the skills that my job need the most yet I'm not strong? The Stephen Covey prioritization matrix provides a great way to visualize this idea.
I need to improve the areas that are in the two important quadrants.
You'll notice the quadrant in the top left is all about fires. If I'm working on a small team and we lose the only DBA, someone needs to figure out how to handle the databases.
The Important/Not Urgent quadrant is often the most overlooked. It's like exercise. We don't feel like we have to exercise every day, but if we don't, we'll end up out-of-shape with heart disease. Are you looking to become a technical lead on a team? Work hard on the skills related to that position (leadership, managing, communication). You might not need them tomorrow, but they will help as you progress.
Avoiding time in the bottom two quadrants is not easy. Twitter/Reddit/Facebook are easy to get sucked into. The biggest "not-important and not-urgent" thing you're doing every day and not knowing is e-mail.
"Nothing good comes from checking your email in the morning; except it's a great way to time travel into the afternoon"
Speaking of not-important and not-urgent, I've been playing at lot of Football Manager lately. It's a simulation game where you are the Head Coach and General Manager of a football (soccer) team. You are in charge of:
- Strategy for each game
- Starting lineups
- Substitutions
- Playing formations
- Signing players
- Training players
- Evaluating talent
- Hiring coaches
There are coaches that will help with each of these items, but you can will get fired for not living up to expectations.
The game has helped me gain a better understanding of the nuances of football. Plus, it helped me learn the names of the players on my favorite team, Arsenal.
A way to judge a player in Football Manager is how they score on a specific set of attributes. Each player has an evaluation on a scale of 1-20 for each skill. A player has a score for each skill but only certain 'key' skills are required for their role on the field pitch.
This idea isn't new. Dungeons and Dragons has been using it for years.
For example, here is Cristiano Ronaldo's skills. He's the best player in the world. He ranks high for most skills. Notice that he ranks low on many of the defensive skills (marking, tackling, and positioning). This isn't a problem. He isn't asked to play defense.
When we highlight Ronaldo's main role, you see that he has high values.
His job is to score or get other people to score. USA fans won't forget his memorable cross in the 2014 World Cup.
Using this same idea, I came up with a list of attributes for a software developer. I'm sure there are skills I've left off the list and ones I've added that aren't worthy of being there. Some skills relate to developers (Algorithms and Data Structures) while others don't (Marketing and Sales). For certain teams, having a developer familiar with marketing will help with the final product.
There are 3 categories: Technical, Mental, and Physical Skills. They match the ones the Football Manager. Some of the mental and physical skills can swap categories. I wanted an equal number of technical and mental skills so it looked pretty.
Here's the list I drew up:
I took five minutes to fill in my own skill set list. I'm sure several of you would dispute the scores.
Using the same idea as Football Manager, I identify which roles I'm best suited for. Should I be a DBA? The skills I think a DBA need are: Databases, Design (not just UI), Network Technology, Systems Architecture, Web Applications, Attention to Details, Concentration, Critical Thinking, Finishing the Job, Work Rate, and Professionalism
It's a good thing I'm not a DBA. My technical skills aren't good enough.
I'm a desktop application developer. Let's see how I'm doing at those skills.
Definitely a lot better than my DBA set. I need to improve on my knowledge of algorithms and data structures to be first-team starter.
To move up the ladder and become a team lead or software manager, I need to improve on other areas. My low skills in bravery, leadership, managing, and persuasion show that I have room for improvement. I'm reading several books on those topics to help get those to at least a 15.
In software, we see a lot of developers who have high technical skill levels promoted to management. A good developer != a good manager.
Being a master is more than just technical skills. Remember to focus on the mental and physical side.