Software development is a field that demands continuous skill improvement. Technology advances rapidly and to be successful you must find a balance between a destructive attempt to be up-to-date at all costs and clinging to your comfort zone by taking the same repetitive tasks all the time. There is a huge difference between 5 years of experience doing the same, and 5 years of experience practicing new things and taking on challenges. Here I have some tips from my experience, on how to build your continuous improvement framework.
Mindset is often underestimated as a part of the soft skills family that is not the core of developer activity. However, a proper attitude can be crucial for implementing continuous learning ability. Carol Dweck in her seminal book Mindset: The New Psychology of Success claims that a growth mindset is a natural way for the successful knowledge acquisition process. Here we have a short comparison between a growth mindset that encourages improvement and a fixed mindset that rather inhibits gathering new skills. A growth mindset can unlock your potential and make your mistakes a part of an improvement process rather than indicators of a failure.
System and goals
It is important to have goals that motivate us to improve ourselves. However, to be successful in achieving your goals you should place them within some repeatable process. On the one hand, writing a blog post can be a goal. On the other hand, writing every day something for 30 min can be a system that makes our goals seizable.
Knowledge of the business domain
The goal of software development is not to write code, but to solve business problems (usually by coding). However, you cannot find an optimal solution if you do not have a good understanding of your business domain. It is significant to be efficient and productive in your work (doing things right), but more important is to be effective (doing the right things). The focus should be on outcome maximization (user impact, user experience) while minimizing output (features, tasks). It is the main point of Jeff Patton's great talk about user stories. Be a partner for business experts, stay curious, and question requirements. It is possible only if you understand the business domain.
Find your inspirations
The worst scenario for you is not being aware of your knowledge gaps and deficiencies. To avoid Dunning-Kruger effect you have to be proactive, look into fields that you are not familiar with, and take activities that broaden your horizons, e.g.:
- take part in conferences,
- skim hackernews regularly,
- listen to tech podcasts, watch tech videos, and read blog posts.
The range of inspirations for improvement cannot be too broad, because for sure, you do not have enough time to master all possible domains. You should choose a career path and define areas to grow. Proper direction is as much important as fast progress. One of the useful concepts here is T-shaped engineers that are deep experts in 1-2 domains and are also competent in several other fields to be a valuable member of a team. The above example is probably a little bit oversimplified for a Backend Developer. However, we can design some more suitable charts for the following positions:
Senior Backend Developer
Full Stack Developer
You can do a similar exercise for other career paths, like Software Architect, Engineering Manager, or QA Engineer. While the approach is qualitative (it is not easy to assess the current level of my competence in a given domain), it can be a good starting point for defining personal goals and learning paths.
Remember about fundamentals
Fundamentals give you means for solving technical challenges and can be divided into two groups:
- technology agnostic, like algorithms, system design, TDD approach, etc.
- technology bounded, like a programming language, web framework, database, etc.
The former can frame your solution, while the latter provides implementation tools. Given their significance, both should receive adequate attention.
Document your work
The best approach to boost your understanding of a concept is to write about it or try to explain it to other people.
You can use the hashnode.com platform (or similar) for blogging to document your work. Have you been doing something interesting? Write about it. You do not have to share it. Do it, to organize your reasoning and thought process. If you are unsure of your writing skills use grammarly and quilbot to make the process less erroneous.
Effective and efficient work
Doing a good job for your employer does not always mean maximizing output (see Knowledge of the business domain point again). The best way to speed up and improve your work results is to build a range of skills. Therefore, it should come as no surprise that you devote some of your work time to developing your competencies. Another important factor for effective work is the quality of the work process itself (efficiency). It can be improved by implementing strategies and conventions. Some examples:
- pomodoro technique
- find out your peak state of energy (morning for most), and allocate it for deep work without interruptions (Maker’s Time)
- 3-3-3 method
Sharpen your tools
If something makes you inefficient, tackle it. Sometimes, it would be worth stopping to sharpen your tools. It can be many things:
- your slow computer/lack of additional monitors
- lack of familiarity with basic keyboard shortcuts (run given test, switch file in the IDE, one-click rename variable/class/method)
- clicking a lot of pages to test/check something, instead of writing one SQL query
You have to recognize what slows you down and address it. The learning process itself also demands care and maintenance. I will give two examples of how to upgrade it:
- organize sources you have gathered. Take a convention to keep it ordered using for example google docs and a proper folder tree. Sometimes, I come across a possibly interesting blog post or presentation speech, but I do not have enough time or focus to acquire it at that time. So the best way to not let it slip away is to save it in a retrievable place.
- take notes when you read a book or an article. I found it difficult when it is a paper book, but I discover a great tool: raindrop.io that makes it easy to take a text excerpt photo and tag it.
Nowadays, being a software developer is not restricted only to coding abilities. Building a robust learning approach can be more fruitful than possessing a skill set at a time.
To conclude, take a growth mindset approach, build a repetitive learning system, and detect dull tools to replace them.
Here you have some Twitter accounts regarding the blog post topic that are worth following: