This post is part of a series of 7 blog posts on the topic How to create a learning culture for software development teams:
Knowledge sharing is one of the top challenges in software engineering. Software is eating the world,” wrote Marc Andreessen in the Wall Street Journal in 2011. The years that followed clearly support his view. Investments in digital technology continue at breakneck speed, and the beginning of the 2020s, despite a global pandemic, has not slowed down the growth of IT, the opposite even happened. There is no shortage of figures to illustrate this trend. For example, GitHub recorded 1.4 million additional users in 2021 and 64 million new repositories. The Cloud Computing market is growing stronger every year, and forecasts for the coming years indicate a continuation in this direction.
Software is everywhere. It is a significant business vector for many companies. The slightest malfunction and parts of the business risk collapsing. Functional or technical bugs have a major impact, and delays in delivery or features that don’t arrive generate frustration. You have to deliver value regularly and know how to perform and accelerate.
DORA (DevOps Research And Assessment) is a research group that has studied for six years the characteristics of successful companies in their ability to deliver value to their customers. Every year, they produce a report that provides the latest trends and insights. Moreover, this level of performance is mainly measured through the 4-key metrics :
The initial results of this study were in fact, the basis of the excellent book Accelerate, published in 2018. In particular, this work led to establishing an initial set of 24 Capabilities identified in high-performance companies. In 2021, this number increased to 27. Among them, one, in particular, interests us:
Learning culture: high-performing companies have established a culture that values learning and continuous improvement. Beyond the positive impact on 4-key metrics, this state of mind is virtuous for team cohesion.
Who benefits from this learning culture? We distinguish three levels:
Therefore, the interest in a knowledge sharing culture is shared by a vast range of players within an organization. The larger the organization, the more complex the challenge. How do you promote sharing and access to knowledge among dozens of teams who do not always know each other and work on functional areas that are sometimes quite distinct? (And yet, they share similar technical contexts and therefore common practices?)
Moreover, it is essential to clarify what knowledge culture (or learning culture) means. What knowledge are we talking about here? We are mainly interested in best practices, standards, techniques, and know-how that facilitate the production of clean, readable, easy-to-understand, sustainable, and maintainable source code. That’s what we call code quality, although this notion often remains subjective.
Producing high-quality code is learned and learned in an organization that will invest to achieve this goal. The mindset to adopt in this context is summarized by this quote from Mathias Verraes:
“Don’t spend more time on code quality. The real powermove is growing the skills and habits that give you quality in the same timeframe”.
To rephrase, instead of investing time in fixing your software’s design flaws (the famous monthly refactoring/cleaning-code half-days), let’s invest that time in learning how to do things better, and we’ll avoid reproducing design flaws.
Depending on their context, development teams will also have to increase their skills in performance, security, eco-design, Web accessibility, or even on specific languages or frameworks. This further broadens the learning spectrum for teams. Moreover, software quality can also be evaluated through user experience, ergonomics, reliability, and response times. Therefore, it will be necessary to meet the challenges of our software.
The culture of knowledge and the learning of best practices are even more necessary in a sector that suffers from one of the highest turnover rates in the market. As a consequence, knowledge is volatile and ephemeral if nothing is done to capitalize on it and make it last. And ideally, one should not wait until a person has resigned before worrying about the knowledge they have to pass on. Moreover, the onboarding of new recruits costs time and energy. Some studies show that optimal productivity can sometimes reach seven months. A person who joins a new environment, and therefore a new technical context, must familiarize himself as quickly as possible with the best practices in force. The better they are formalized and known, the faster they will be adopted.
From our point of view, an organization that expands its development teams should not only look for highly qualified profiles with a solid technical background and good experience on their CV, but also for people who can bring or maintain this knowledge sharing culture to help the company grow. If we assume that we have to live with turnovers, we should arm ourselves as best we can to face its consequences.
One could legitimately question the importance of this culture by asking the question: “Don’t all developers have the same technical background?” Yet, as we said earlier, one of the particularities of the profession is the diversity of knowledge domains that make it up: algorithmic, software architecture, software testing, continuous integration and deployment, Cloud Computing, … not to mention the business domains and technical specificities to each company.
We often hear that technologies and languages “change all the time“. We can easily find examples to illustrate this, like the TypeScript language, whose first version was released in 2012, missing from the annual reports produced by StackOverflow in 2015, and in 2021 finds itself 7th among the most used languages within the same StackOverflow community and 2nd language that we want to learn. This latest 2021 report shows that React and Angular are among the four most used web frameworks, even though they were released in 2013 and 2016. The two were absent from the 2015 report.
In addition, topics such as GreenIT are much more present in 2022 than they were ten years ago, mainly because of current societal issues and awareness about sustainable development. The design of mobile applications also experienced a significant boom in the 2000s with the democratization of terminals such as smartphones or tablets. Developing software also means knowing how to adapt to the evolution of our societies.
And all developers are far from having followed the same training and career paths. In 2021, the number of developers worldwide was estimated to be 24 million, compared to 18 million in 2013, and with predictions of 45 million in 2030! The market also sees an increasing number of “heterogeneous” profiles in terms of training, particularly those who have undergone professional retraining. In teams, we regularly find people who followed a 5-year university course and others trained in a few months. This richness and diversity also bring additional challenges, particularly in exploiting this knowledge capital and achieving harmonized solutions to our problems in this software engineering discipline.
This diversity of profiles and knowledge in the software development profession brings a consequence: Everyone who practices this activity has his areas of expertise and gaps, areas for improvement, which we call areas of incompetence. This can be related to a language, framework, architecture, or security principles. If this phenomenon is natural, it presents risks: a lack of knowledge sharing on best security practices can introduce flaws in my source code. Within an organization, the objective will be to fill in areas of incompetence thanks to a collective increase in competence and internal knowledge, or even external knowledge in some situations.
Promyze, the collaborative platform dedicated to improve developers’ skills through best practices sharing and definition