March 16, 2014
One of the core lean principles, also applied in agile context, is “amplify learning”. The reason is that software development is a complex endeavor. We deal every day with new things, either changes in the market, in the user behavior or in the technologies we use. Sometimes, we feel that it’s impossible to keep up. That’s why improving the way teams and organizations learn becomes a strategic advantage.
When we talk about learning in software development, we have three different meanings:
- “Learning a new technology” means getting at the point when you are able to use that technology to create a product. For example: “I learned Java”
- “Learning a new skill” means getting at the point where you use that skill even when under pressure. For example: “I learned refactoring” (or TDD, or writing tests on existing code)
- “Learning what the users want” means understanding and adapting to changes in behavior that are not directly related with software. For example: “we learned that our users never use the upload file screen; they always upload multiple files”
Different strategies that allow for faster learning apply to different types of learning. We’ll explore in the rest of this post some of the strategies that you can apply as a manager, HR professional or software developer to help your teams learn faster.
A man only learns in two ways, one by reading, and the other by association with smarter people. Will Rogers
This is the least mysterious of the three. Reading books, writing applications while increasing their complexity, discussing with knowledgeable colleagues or friends, attending a course or a conference are good methods for learning a new technology. Still, some tricks exist that allow anyone to learn a technology faster.
Trick #1: Use social learning
Learning alone is the default way to learn for developers. Yet learning alone means limiting to one brain. It’s possible to use other’s brains as well:
- Get early feedback through code review or pair programming: Shorter feedback loops allow for faster learning. The simplest way to do it is to write an application in the new technology and give it for code review to someone who knows the technology better. The resulted discussion will help both developers understand more faster. Pair programming is even better because it’s really just-in-time code review.
- Use the communities: Every two weeks, the AgileWorks community organizes an event called “Code and Beer” in Bucharest (for more than a year) and in Cluj (second edition coming). The idea of the event is for software developers to learn anything they want from anyone attending. This is just one example.
- Get a mentor. We are sometimes asked to help developers learn a new technology. This translates into developers having someone to ask when they get stuck and someone to be available to review their code when they have just started. This type of relation is easier to accept by most programmers than the idea of showing the code to unknown people (like in the community).
Trick #2: Present the technology to a (friendly) audience
Nothing helps accelerate learning more than the prospect of explaining a new technology to an audience. Suddenly, the mind is focused and can read tons of articles and create lots of code samples in a much shorter time. Explanations become clearer, and the presenter is much more likely to ask for help than if learning for herself. The probable reason is the adrenaline rush created from the fear of public speaking.
Of course, the audience should be friendly. We don’t want to make the experience unbearable, just increase focus.
Learning a new skill (as in: “I have to learn to speak French”)
Flying is learning how to throw yourself at the ground and miss. Douglas Adams
When it comes to skill acquisition, we usually talk about mastery. Mastery is the situation when, even under pressure, you still use the skill flawlessly. In software development, using a new skill is fundamentally different from using a new technology; when developers are under pressure they still have to write the software in Java, but might stop writing unit tests. This fundamental difference means that different strategies need to be used for mastering skills.
Trick #3: Deliberate practice
A fascinating psychology study (pdf) has discovered that “the differences between expert performers and normal adults reflect a life-long period of deliberate effort to improve performance in a specific domain”. The study identified how expert performers practice. They combine five elements:
- Aimed at improving performance
- Designed for current skill level
- Combined with immediate feedback
The software craftsmanship movement is focused on finding such ways of practice. I will only mention: coding kata, coding dojo, code retreat and games such as: brutal refactoring game, Taking Baby Steps, TDD as if you meant it.
Trick #4: Get a coach or attend facilitated practice sessions
Deliberate practice sessions are hard to design. The best way is to have it designed for you and facilitated by someone who can make the experience seamless for attendees and who can give immediate feedback.Our workshops focused on skills do exactly that. The unit testing workshop, for example, is a combination of providing relevant information to move to the next step (roughly 30% of the time), practicing a certain subset of unit testing while getting immediate feedback from the trainer (about 50% of the time) and discussing or answering specific questions (about 20% of the time).
The Brutal Refactoring Game is a session where a facilitator looks at the code written by the attendees. Whenever he notices a problem, he sticks a post-it on their desk describing it. The rules of the game state that in this situation, the developers are not allowed to add code anymore but have to fix that problem first.The facilitator / coach can work with a team or with one developer, depending on the needs.
Learning what the users want
Prepare for the unknown by studying how others in the past have coped with the unforeseeable and the unpredictable. George Patton, US General in WW2
Users are fundamentally unpredictable. Not only they don’t know what they want until they start using the application, they also change behaviors in time. Software development has tried to cope with this problem unsuccessfully for years, until realizing that implementing a change as soon as possible and getting user feedback is the way to go. But how do we know what users want?
Trick #5: Experiment
The lean startup movement has the answer: create small experiments (either as features in the application or in other ways), measure the results and act upon the learnings. For example, try changing the color of the “Buy” button and measure the number of clicks for each color during a specific period of time. Designing and implementing experiments require of course specific skills, which means the team needs to prepare for it beforehand. We’ll talk more about experiments in a future blog post.
It takes all the running you can do, to keep in the same place. If you want to get somewhere else, you must run at least twice as fast as that! Lewis Carroll, Through the Looking Glass
Continuous improvement is the key to stay relevant on the market. At its basic level, continuous improvement is continuous learning and experimenting on all levels. Knowing how to learn faster is a strategic advantage.
Yet, many managers stumble on these concepts. The main impediment to continuous learning is understanding its value. Learning is an investment, but it’s often seen as a cost. Any investment is based on the trust that it will pay off in a certain time span.
The software industry is very dynamic. Everything changes: new technologies appear, new useful skills are discovered and users change their behaviors. Keeping up with change is impossible without effective learning. This blog post has given you 5 tricks to amplify learning for yourself, your team or your company:
- Use social learning
- Present to a friendly audience
- Use Deliberate Practice for fast skills acquisition
- Get a coach for personalized learning
How do your colleagues, teams and company learn? Let us know in the comments!
We like to help companies figuring out how to learn. If you want to discuss your learning strategy, set a meeting and we’ll be glad to help you.
Or just ensure your colleagues benefit from our expertly designed learning sessions.
- We can help with assessing various capabilities of your organization: process, technical, people skills.
- Learn more about technical practices at the
– Legacy Code Retreat workshop, also available in-company
– Unit Testing Core Practices workshop, also available in-company
– Test Driven Development workshop, also available in-company