What is more relevant to you - being busy or being productive? And how do you actually measure your progress?
Searching for a deeper wisdom, we run into the "10,000-hour rule" which states that if you spend around 4-5 years perfecting a specific skill, like coding in Python or any other programming language, you might become the best software engineer in the world. But is it that simple to succeed?
The rule was promoted by the bestselling author Malcolm Gladwell, who wrote in his book Outliers that "a deliberate practice can make you a world-class in any field". This formula was later disputed by numerous studies, but the principle still remains true - you need to continue learning and practicing until you get better and better, and then maybe become the best in your field.
One of the examples in the book is Bill Gates, who in 1968 had a rare access to computers at the age of 13. While his friends were playing sports, he kept coding during his teenage years, which after 10,000 hours (or five years) gave him a unique opportunity to discover the potential of new technologies. He was 20 when he founded Microsoft.
But the 10,000-hour rule is challenged because the deliberate practice is simply not enough. How long it will take you to be the best software engineer becomes irrelevant in the face of factors you need to include in your quest for knowledge.
For example, the advantage Bill Gates had was that his parents gave him an early access to computers and enrolled him into a private preparatory school; additionally, his father was an experienced lawyer who helped Gates work out an early licensing agreement with IBM. What is more important are the decisions you make in your journey to becoming the greatest in your field.
Will 10,000 hours make you a better software engineer?
The good answer is yes, no, and maybe. Let me explain. Yes - because practicing a skill for more than 5 years will make anyone good at anything. And although the 10,000-hour rule doesn't work in different fields - like sports where you need genetic characteristics, such as physicality - it does work well with programmers who use their intuition and experience, and who can boost their intellect with practice or knowledge.
And no, the rule is not true - because to become great you need something more than just repeatedly practicing a skill. You need to take into consideration that you need a lot of time to practice a specific skill, more than five years; you can’t practice it every day for 10+ hours each day, because you'll eventually die of exhaustion.
In that time span, a lot of things may happen: like real-life events that will have an impact on your ambitions, or improvements in technology that may render your skill useless. For example, you may practice to be the best driver now, but in 5 years, you will have an autonomous car to drive you around.
Take the advice from Justine Musk, the ex-wife of Elon Musk - the founder of PayPal, Space X, and Tesla Motors - about what it takes to be a billionaire, and you'll understand why determination and hard work is just not enough to succeed in the real world:
"Determination and hard work are necessary, yes, but they are the minimum requirements. As in the bare minimum", Mrs. Musk said in a Reddit AMA.
"Ask yourself what you have the potential to offer that is so unique and compelling and helpful that no computer could replace you, no one could outsource you, no one could steal your product and make it better and then club you into oblivion (not literally). Then develop that potential. Choose one thing and become a master of it. Choose a second thing and become a master of that. When you become a master of two worlds (say, engineering and business), you can bring them together..."
Stubborn perseverance will make you better and more specialized in a skill, but you need more to be a better software engineer.
If hard work is not enough, how do I become a better developer?
OK, first the bad news: you have to be talented to be world-class in any field. Having a talent in mathematics can help you become a better coder, being a charismatic person can help you become a better team leader, and controversially, being better-looking can get you a higher paycheck. You can't change the predetermined factors that you acquire by luck, by attribution of your family genes, or by the environment you've grown up into.
And because you can't change predetermined skills, you don't have to worry about them. Either you have a talent or you don’t. Run with what you have. But the crucial thing is to find out what you are good at, and what you lack to become better. Then start improving and start practicing and learning.
Your high IQ or genes are not enough to get better. You may be a mathematical genius, but if you don’t learn to code, you can’t become a programmer, let alone a good one.
You need an education in a particular field, a love and determination for that field to have the motivation to improve, and you need regular practice to reach true expertise. Luck, opportunity, hard work, education, a good team, and even a location can contribute to your success.
Education is the key to your success
There is a disconnect between what you learn in the classroom and what you need to know when you start working in startups or any tech company. Because of this, continuous education becomes the most important factor in becoming a better and more successful professional.
This is especially true if you are a software engineer, because we see technology trends emerge every year or two. Four years ago, it was important to understand social media, now we are into building bots and improving machine learning, and couple of years from now, we'll get to live in smart homes, and maybe read news written by robots.
In a tech world, the software developer can become a king ... if he keeps educating himself. There is an abundance of online classes to learn theoretical knowledge, and you need to hit those 10,000 hours of coding and learning through experience. It’s a simple endeavor.
The 10,000-hour rule is a valuable practice, although you might want to push yourself to 20,000-hours (and more) because of the competition in the tech industry.
If you spend 10,000-hours learning to build ships in a bottle you may become the best mini-boat builder, because there aren’t many hobbyists or much demand for those miniature wonders. But kids nowadays start learning to code from an early age, and as the title ‘software developer’ becomes a highly paid and attractive job, so the competition gets fiercer.
To win over the competition, you need to become an expert generalist. And this is where the 10,000-hour rule folds.
You need to know a lot of skills to be better than the rest of the highly-trained and dedicated software professionals. As we noted earlier, hard work and dedication alone will not make you better, because everybody is trying to do their best. What you need is to learn the truly valuable skills.
Discover the right skills to practice
To become more productive and better at your job, you need to understand what purposeful practice is. Discover your talents and the skills you lack for a certain goal, and start practicing in such a way that you can actually improve those skills to reach that goal. You may be a good coder, but if you need to learn how to lead a team to make your startup a success, then you should practice your team-leading skills.
Of course, you can just practice the same skill over and over again, until you learn everything there is in that field. But you will reach a point when you either won't improve more no matter how much you practice, or you'll be so completely specialized in one field that you will become dependent on certain technologies.
You need to prioritize your learning on essentials to tackle hard real-life work problems with ease and with more expertise. Being specialized in one skill is awesome, but being versatile in few can actually help you finish more work. On the plus side, you'll be more competitive in a highly combative industry.
Learn from others, get better from their experience
It is OK to ask for help and guidance. Ask often. Find a good mentor who will point out how to improve your most common mistakes, or use his acquired knowledge to explain to you how to make things better, or how to leave out things that are not as important for the project you are working on.
The challenges you face are rarely unique, maybe that is why there is always a YouTube tutorial to help you out; so having a mentor is a good thing.
You should be always open to criticism and other people's opinions on your work. Why? Because you'll notice things that, in your practice, you've missed or considered unimportant. As soon as you improve your work you can get back to your critics. But until then, accept the criticism.
Practice, learn, then practice some more
There is a simple design in practicing. You can't just go on practicing the same thing all over again unless you take a break and reflect on what you've learned from the process.
Discover the point when you need to stop with your practice; take a break and reflect what you've achieved so far - maybe set up goals to measure your journey - and always ask for feedback from others. A mentor, a friend or a more experienced coworker can tell you if you are showing improvement, or if you are making common mistakes in your practices.
It is not important how much time you need to be the best software engineer. Five years or fifty, it will never be enough until you find the right balance between practicing, educating yourself, and working with other professionals to learn what are the priorities for your work. This is how you become great.
You have to love working as a software engineer
According to Anders Ericsson - the psychology professor who did research on the 10,000-hour rule and proved that practice actually makes perfect - you need to be fully dedicated to your work. That means that you should do what you love because if you don't love it, you are unlikely to work hard enough to get very good.
He has a valid point: after all, he did the research, and you should take on something you enjoy practicing for countless hours. No matter how talented you are, if you don't love your job, you'll eventually get bored, stop trying, and focus on something new and more exciting.
Basically, it comes down to this - if you love to work with software, as we do in Syncano, spending hours coding and working on software projects will never feel like work. There is no pressure to reach this limit of 10,000-hours to be great, and the obsessive practice actually becomes an enjoyable experience to build something new and really cool, no matter how many hours you've spent on it.
Thanks for reading, we hope you’ll continue to practice and become a great software engineer. :)