“One of the saddest things in life is to get to the end and look back in regret, knowing that you could have been, done, and had so much more.” - Robin Sharma
To start with I want to say that I have a very bold goal: I want to be incredibly good at solving problems with technologies (primarily software) and being able to teach others to reach even higher levels.
I had come up with this goal a long time ago and I spent a lot of my time on figuring out what makes one an expert in technologies, how can you grow your skills faster and more efficient and what one should do to not sacrifice their life on this journey.
Today I want to share with you a thing I called "Software Engineer Evolution Plan".
Note: this is a model. It won't work in all possible contexts and situations.
Right now it includes mostly career-related aspects (no aspects like empathy), but those aspects are very relevant as well.
I will update the Plan as soon as I come up with good deliberate practices and highly-relevant aspects (hence the version number).
I believe this is a good roadmap to becoming a world-class software engineer.
Why I think it is not a BS and is worth your attention
I'll give you some background.
I was trained as a theoretical physicist when I was a student. If there was a single skill I learned during my studies it is finding principles which drive our universe.
During my short career, I've interviewed dozens of great programmers and thought leaders in tech to figure out how Tech Industry works. Also, I've trained several people from zero to competent level (and get some astounding feedback), experimented with technologies, approaches, business domains and human relationships.
I was inspired by great talks (like "Making Badass Developers" by Kathy Sierra or "Simple Made Easy" by Rich Hickey) and great books ("The Passionate Programmer" by Chad Fowler and "Soft Skills: The software developer's life manual" by John. Z. Sonmez)
Last year I've taken a Top Performer course, which was focused on figuring out and designing deliberate practices for fast growth in your career. It was an eye-opening experience.
As a result, I've summed up everything I learned in the "Software Engineer Evolution Plan".
So What Is This Thing?
It is not a definitive guide to success.
It is not the only source of trouth of personal growth as software engineer.
The plan is a set of deliberate practices which are designed to make you better as a software engineer.
They are designed to be challenging and focused on improving several traits and mindset to be efficient in solving problems.
I want to be honest with you: you will not get an overnight upgrade.
Growing and becoming better takes time, effort, dedication and discipline, as well as reframing into a growth mindset.
It will take you several years to come through all the practices and get significantly better.
I tried my best to create a focused plan to help you achieve your goals faster. Even knowing a direction will help you tremendously!
Why there is no technical stuff?
Technologies does not matter as much as we wish them to.
Technologies and our ability to make computers do what we want using code are necessary, but not enough to progress and achieve a professional success in software development.
As a software engineer, you will spend quite a lot of time tinkering with technologies. But on the other hand, you will spend much more time with other people.
And this is why it is quite important to learn how to live with all those people around in harmony.
Having said this, I should note: you will spend most of the time mastering specialisation/generalisation aspects - learning technologies, deepening your understanding of the magic and building stuff.
Apart from technologies, you need tonnes of other things to become a better self:
- Critical and rational thinking
- Obsession with feedback
- Getting things done
You will train some of those aspects naturally by going through the plan, although the plan does not focus on those aspects.
How do I use the Plan?
Success is something you attract by the person you become! - Jim Rohn
First, you need to assess on what level in every aspect you are right now.
How do you determine that?
Answer these questions:
- "Can I reproduce these activities reliably anytime I want?"
- "Is it boring and not as challenging as it used to be for me anymore?"
If you answered "Yes" to both of those questions, you have reached a given level in a certain aspect.
For example, if it does not take much effort for you to talk to people in English daily on casual topics, then you have reached L3 level in "English" aspect.
The main idea of deliberate practice is that it should be challenging. As soon as you have conquered the challenge, you have moved to the next level.
Ideally, you should spend some time daily on practising the activities which will bring you to the next level.
Set aside some time to practice. And get ready to fail a lot :)
Keep in mind, that failure is a source of invaluable experience. And that you can achieve your goal eventually.
And embrace the challenge.
Those activities are designed to grow exponentially in complexity and effort required.
It is totally ok to spend more time on those practices when you get to the next level.
And for the starter, pick any practice which is relevant for you right now and make your first step!
Reevaluate Your Position
It's a good idea to keep track of what is your current level from time to time.
You may want to step a level back and repeat the practice you have mastered already. You will always find some new insights by doing so.
And you will feel better by proving yourself you can do stuff :)
Do Not Learn Alone!
Share this plan with your friends. They may want to join you in this journey!
Find a mentee/mentor. It will be of a great aid to have someone else doing the same things and correcting your steps. Feedback is an invaluable tool for progressing and becoming better!
It is also a good idea to find an accountability partner.
Improve And Have Fun
Moving through the plan will improve your chances to succeed and be hired on a better and more influential positions.
Also, it will provide you with better tools and strategies for solving engineering problems. It's not only about technologies, as you may have already noticed.
Do not rush into levelling up. Take your time to reflect upon changes and enjoy the environment and things you have created!
Eventually, the growth you achieve will broaden your horizon of possibilities and opportunities you will get.
Ask yourself "Do I really want to get into a higher responsibility position right now?". It is quite important to be aware of what is your possibilities and tradeoffs in any given moment.
And last, but not least, be kind to yourself and have fun on this journey to mastery!