A true story
We were having a meeting with a customer and he had just presented a project idea. He wanted us to give him a draft system architecture, supporting his project technical requirements. At one point, I was telling him that incremental development requires architecture evolution as well.
When I said that finding the right architecture is also a learning process, he cut me off short of the following sentence:
Do you expect me to pay you to learn?
To save the day, I told him I was referring to the business domain, we needed to fully understand in order to provide the right architecture.
Do you want your project to be developed by an unskilled team?
Unless you hire a highly expensive consultant, chances are you need a software development team for more than a few months. If the project spans over a year or more, how would you feel about a team that never has time to level up?
Software development is one of the most knowledge-driven industry, yet many expect developers to be readily equipped with everything it takes to solve any given problem.
Languages keep on evolving. Relational databases keep on adding new features. There are a plethora of NoSQL databases most have never ever worked with. Successful frameworks keep on releasing new versions. New techniques emerge (e.g. reactive programming or microservices), while others keep on getting more and more traction (e.g. functional programming).
To master all these technologies and techniques you need to spend a considerable amount of time.
When are developers supposed to level up?
There are extremely passionate developers dedicating their spare time to read books or technical articles or studying new technologies, but they are an exception to a rule.
Most developers acquire all knowledge during their job and if you don’t invest in their skills they will never grow within your team.
The right place and time to learn software is during your job.
Unfortunately, not everybody in the software industry shares this vision of mine. Business owners don’t want to spend resources (time and money) on training developers.
I really believe it’s a matter of perspective. If you don’t manage to get any direct or indirect revenue, you might be tempted to think you’re wasting money. But if you plan it properly, you can easily turn it into a very profitable investment.
Learn for profit
High-quality software demands solid knowledge and expertize, but accumulating skills requires more than just reading. You need to become an active learner to maximize knowledge acquiring.
I used to be a passive learner myself, only reading books and articles while constantly having the impression that I don’t actually make too much progress.
When I started writing this blog, I realized I was now learning through teaching.
When I became an active StackOverflow user, this feeling was reassured.
When I started an open-source project, I finally realized that learning is only a side effect of hard working.
All these examples are what active learning is all about.
From the business perspective, it’s not difficult to foresee where the return of investment might come from:
- A more skilled development team can leverage more complex projects with a lower risk of failure.
- You can master a certain technology and start offering professional training and consultancy services
- You can write books and sell them through a self-publishing program. Ninja Squad’s AngularJS book (French) was a profitable investment after all.
All in all, expertize always sells.
Investing in development skills can definitely pay off. Many developers enjoy a working environment where they can grow, so this move can actually be beneficial for employee retention as well.
Starting on this journey is not as difficult as one might think, and I’m going to present some of my favorites active learning activities:
Preparing a training material
Let’s say you want to acquire a certain key technical skill in your company. Some developers should be partially allocated for studying and preparing a training material on this subject.
A workshop is always a better choice than a simple presentation. When the training material is ready, you have accumulated both knowledge and a training base too. You can now start offering training or consultancy services on that particular technology.
A company blog
Every software company accumulates experience, yet few of them actually share it with the rest. A company technical blog can be a great marketing instrument. A high-quality blog can prove your domain knowledge and expertize.
Answering StackOverflow questions
Contributing to StackOverflow is totally underrated. If you really want to become an expert in a certain domain, you should start answering questions on that particular tag. When you answer a question you are reiterating your knowledge.
Sometimes you only have a clue, so you start investigating that path, which not only provides you the right answer but it also allows you to strengthen your skills. It’s like constant rehearsing.
After all, repetition is the mother of learning.
Contributing to open source projects
If you want to boost your design and coding skills, you should probably start contributing to open source projects. Browsing code can unveil certain patterns you’ve never previously applied.
Most frameworks authors are incredible craftsmen and their code review can teach you a lot about best programming practices. If your company makes heavy use of a certain open source technology, it’s a great idea to start contributing back. The best way to deal with an annoying framework issue is to actually fix it.
Nobody knows a framework better than its own maintainers.
Writing and selling books
You can summarize all your experience in a book. Writing a book is a very intense learning process as well. By the time you are done with it, you can really say you’ve come to master the subject.
I chose Leanpub for my High-Performance Java Persistence book and it’s been a wonderful experience so far.
Amazon offers self-publishing programs and selling books can become an alternative revenue source and an advertisement as well.
Embracing learning can be a competitive advantage for your company. Your products carry your company name, and a software product quality mirrors the development team professionalism.
In the end, you are not only investing in individuals, you are investing in your own company as well.