18 April 2014

How to divide learning time

As software delivery professionals we constantly need to learn and practice to keep our skills sharp. Last year I even spent three months pair programming to do exactly that. Possible activities required for learning and related to the sharing of knowledge are:
  • (a) studying, e.g. reading technical books or blog posts, watching (recorded) presentations as well as any form of consuming knowledge.
  • (b) practising, e.g. doing code katas, attending Coding Dojos or working on fun (but otherwise useless) projects.
  • (c) experimenting, which includes creating prototypes or trying out new frameworks or ideas.
  • (d) creating something real, e.g. hobby projects or maybe contributing to Open Source.
  • (e) documenting and sharing, e.g. creating how-to documents or writing blog posts.
  • (f) teaching, e.g. preparing presentations and talking at user group meetings.
Why are documenting, sharing and teaching considered learning activities?
Obviously sharing is no learning activity by itself but the process of analysing and describing things improves our understanding similar to Rubber Ducking. For example writing an article about some topic is a great way to bring one's thoughts into order and learn more about it. Documenting and sorting knowledge is also part of PIM (Personal Information Management) which is related to learning as well. Teaching is considered a learning activity by most people. Teaching is a great way to perfect the understanding of an idea. This is sharing on steroids as you are forced to dig deep into the topic to be able to explain it to others.

Piano LessonsHow should I divide my learning time into activities (a) to (f)?
With the start of 2014 I came back to (sort of) regular work and obviously my personal time for learning became limited again. I was not sure if I spent the available time in the most efficient way and looked for guidelines how to divide my learning time into these activities. All activities (a) to (f) seem vital, but likely do not have the same priorities. For example there are so many important books to read, I could spend all my time on reading alone, which does not feel right to me. Sören Kewenig pointed out that items (a) to (f) might be seen as the phases of a project: a -> [c,d,b] -> e -> f, which also indicates that all these activities are important and related.

This question is subjective ;-)
As usual when I have a question I ask StackOverflow. In this case I asked on Programmers. Unfortunately the question was closed in less than 19 minutes as being off-topic. (Many of my questions I ask on StackOverflow get closed but 19 minutes is my personal record so far ;-) While it is true that learning is a subjective process, there might be some research that gives clear advice how to optimise learning activities.

Comments suggest that practice is the key.
Nevertheless I was able to harvest at least some comments from my StackOverflow question. Robert Harvey wrote "if you're not writing code that illustrates the principles being taught, they won't stick. [...] I am saying that, without practice, the other stuff won't matter." I conclude that there needs to be a strong focus on (b) or (d) until the newly acquired material is incorporated into the daily work and applied every day. Then I asked my fellow craftsmen of the Softwerkskammer, the Software Craftsmanship Communities in Germany, Austria and Switzerland. Sören answered me that he used 50% of his free time for Coding Dojos (b) and 50% for working on Open Source (d). Jan Sauerwein spends his time on code katas (b) and preparing a lecture (f). Franziska said that she liked learning with others and therefore favoured (b), (c) and (f). Ulrich Merkel said that developing skills needs as much practice as possible - (b), (c) or (d), but probably he was talking about real work - together with discussion and feedback as corrective. So all answers agree that practice, either by real work or (b), (c) or (d) is important.

How I divided my learning time till now
Franziska asked me how I divided my learning time till now. Yes I should have checked my own time before asking ;-) So I started tracking my learning time. For several weeks I spent an average of 10 hours on learning activities.
  • (a) studying: 20%. I spent some time reading. I am participating in an online book club which forces me to keep up reading and allows for discussions afterwards. I read the book while commuting. Further I browse my feeds of blogs and news to get an overview about what's going on and to stay aware of new trends.
  • (a) studying: 30%. I watched presentations. This includes user group presentations as well as recorded ones.
  • (b) practising: 20%. Once a week I meet online with a friend to do remote pair programming. We schedule the appointment up to one month in advance, to make sure it even happens when workload is high - and it usually works.
  • (d) creating stuff is still part of my job, although recently I am not doing as much development as I used to do.
  • (e) documenting: 10%. I used some time to look up slides of seen presentations and to take notes about what I have learned.
  • (e) sharing: 20%. An average of two hours went into writing blog posts, which was not enough to publish a full article but I worked on fragments of posts which eventually will be published.
  • (f) teaching is part of my new profession and I prepare a presentation now and then. Sometimes I also present something at user group meetings.
My Learning Time % Till Now
This looks pretty balanced, there are no huge gaps. I am surprised how much I do read because I always feel like I should read more but then I am too tired most evenings. Maybe I should watch more demonstrations though. Also 20% practice might not be enough compared to the previous comments by Robert and Sören.

The Learning Pyramid
Not all learning activities are equally effective. For example I remember a vivid discussion about something much better than just reading about it. Edgar Dale summarises these findings as Learning Retention Rate which ultimately leads us to the Learning Pyramid. In the Learning Pyramid, the learning activities are ordered by how much they pay off.

Learning Retention Rate % by Edgar Dale
When looking at these rates I see that I need to add another activity to my list: discussion, which might happen during user group meetings, practice with others or teaching. So let me revisit my tracked learning time and distribute it according to the pyramid.
  • Lecture, 5% retention. Next to real lectures that I sometimes attend, I consider some user group meetings to be in this category. Sometimes presentations are of mixed quality and there is not much discussion. 15% of my learning time (a) goes here.
  • Reading, 10% retention. I spend 20% of my time reading (a).
  • Audio-Visual, 20% retention. To be fair, not all presentations I see are boring, so I consider some of them to be of this category. Here I spend another 20% of my time from (a).
  • Demonstration, 30% retention. It is difficult to assign one of these categories to a typical user group talk or conference presentation. Some presenters give high quality demonstration, but I see this rarely, maybe 5%.
  • Discussion Group, 50% retention. Especially in the reading group (a) there is much discussion. Maybe 10% of my time is of this category.
  • Practice by doing, 75% retention. With two hours of pair programming code katas (b) each week I score 20% here.
  • Teaching others, 90% retention. As I teach as part of my day job (f), I did not track the time. Also I am left with two hours documenting and blogging (e) which do not fit into the pyramid. To make things easier I will just award myself honorary 10% here.
When multiplying my learning time by the retention rate I end up with a weighted learning time, let's call it my "effective" learning time:
My Effective Learning Time %
  • Lecture 2%,
  • Reading 5%,
  • Audio-Visual 10%,
  • Demonstration 4%,
  • Discussion 14%,
  • Practice 40%,
  • Teaching 24%.

How I (maybe) should divide my learning time
It is time for a conclusion. I have spent some time analysing the topic - and this made some things clear to me - call it meta-learning. I do not know if the final distribution of my effective learning time is well balanced or not. On one hand the activities with smaller retention rate obviously do not pay off, so there is no point in doing more of them. On the other hand - maybe - there would be some benefit in spreading the learning across all activities. As the retention rates (5, 10, 20,...) look (sort of) exponential, the effective learning would also look exponential for equally distributed learning times.

Now I see that my feeling about not reading enough comes from the fact that I do not learn enough while reading, which is obvious when looking at my effective learning time for reading. Even if I would add another hour of reading each week, it would not make much difference. But I still believe that it is important to read technical books, because it is a good way to cover a topic in depth. So I will stick to my reading routine of one to two hours each week. I will continue watching presentations, because I usually watch them during cardio-workout. I will add demonstrations, but I am not sure where I could find these. Maybe I will look for user group meetings with live coding. I am doing a lot of practice already, and it is dominating my learning. I will have to think about this. Just half an hour moved from practice to teaching each week might improve my effective learning. So even if I give presentations as part of my day job, I will look for user groups willing to listen to me ;-)

As others already pointed out, different people have different learning styles. Learning styles might even change for the same person over time. I am very interested in your take on dividing learning time and how you think the few hours of personal learning could be spent best.


Anonymous said...

It is a very interesting topic you discuss here as continuous learning is so important for the quality in what we produce as developers. I do myself mostly work in large development projects with high pressure on the costs and staffed with resource consultants that produce code with a very large technical debt. I see a fairly large need for more learning in these projects but the majority of such developers never read any technical books because they cant read on paid time and the quality for the produced code is usually very low, at least when it come to the object oriented principles. I can't say how I divide my learning time but like you do I feel that I not have time to read as much as I wish I could. I have read a lot but still feel that I have a lot left to learn to fill knowledge gaps. Particularly do I try to use some of my travel time for reading as I commute weekly between my home in Lund in south of Sweden and Oslo in Norway where I work currently on site 5 days per week. But with full time work and some hours of overtime every week is the time for formal learning very limited. I have some leisure projects I work with occasionally as good opportunities to experiment what I have learnt from literature but now when I travel this much do I feel that I seldom have time for own development. My chances to practise what I have learnt is instead the work where I try to apply what I have learnt to create code with high quality as much as I can within the scope for the tasks I am given. I am not satisfied with that situation. But one thing I think deserves to be highlighted is the importance of teaching! There is very much learning in activities like writing presentations or, better as I am not a big fun of presentations ;), user guides on the web, like quick start guides for a useful topic. I have unfortunately seldom time for that now but have learnt a lot from such activities before. A true professional should be able to talk about and teach his knowledge!

Peter Kofler said...

Thank you Jonny!

From what you write I assume you divide your learning time mainly into reading (a) and experimenting (c). I also know that you publish blog posts (e) quite often, which you did not mention but as you said is a kind documenting and teaching.

As you are also a community builder, I would say you spend time on teaching others, but probably more on a meta level, e.g. getting more people into reading groups and such.

Anonymous said...

There is now a another thought that also have come to my mind since I read this blog entry from you ... That we live in a binary world. There are they that never read anything because they can't read on paid time. Or maybe because they not really are interested in working as developers? But there are also they like you that already read a lot to learn more but still feel that they not read enough and I am myself often frustrated because there are so many books that I not have had time to read yet. This is a bit crazy and I wish that they that are serious about their learning because they want to do a good job and care for the quality could get more credit for it. I don't know how that could be achieved but one step toward it that would be simple enough to apply could maybe be if our customers begin to request a 30% discount for developers that not are certified for example as Java Programmers. They have at least learnt that topic and that would also be a very clear metric to look at in the salary negotiation. Are there other similar ways to reward they that learn continuously?

Unni Vemanchery Mana said...

Your post is very impressive. Ideally the points you have mentioned in this post are really valid. However, I want to add one more item here in your "a-f". It is related to "Pair Programming" you had mentioned in your old posts.

Pair Programming is a kind of learning process nowadays though I have not done it personally. This will open up many ideas and new learning opportunities.

Peter Kofler said...

it is a difficult question "how to reward they that learn continuously". While I understand your good intentions, I am not sure such a measure would benefit. Like all metrics it would be played.

On the other hand, there is a reward in its own, but it is not immediate rather long term. If you know more, you will be recognized for that sooner or later. In the case of your (and my prior) employer it opened many opportunities for me.

Peter Kofler said...

thank you for your comment. I had not considered it before. Indeed Pair Programming is a powerful tool for knowledge sharing and learning. Probably this is because it contains aspects of both discussing and teaching.

We can always learn a lot from each other. Usually pair programming would be done for activities b to d, but sharing and teaching (e and f) can be done in pairs do. I have heard great stories about pair facilitating workshops for example.

So it seems to always pay off to learn in groups both on company and on private time.