Managing Technical Learning

As a Software Developer I am continuously learning, trying to improve my skillset and stay on top of the latest advances within the industry. Very recently I have been finding that I have a long list of languages, tools and techniques in my head that I want to learn more about. These can be anything from a new language that I've never touched before through to more advanced principles that build on my existing skillset. This poses a problem; by keeping this list in my head it remains unstructured and therefore either I never get around to learning it or due to the lack of direction, I spend very small amounts of time on each thing and never learn enough to benefit me.

This got me thinking, maybe by using an approach such as Kanban I could better track what I want to learn. This would then mean I can visualise what I'm concentrating my efforts on currently and what the next thing is I want to learn. With this in mind I setup a trello board to manage my learning.

I can quickly note down anything that I may be interested in learning in the 'Todo' column. At this point it doesn't necessarily mean I am going to spend time learning it, just that some further research into whether it may be useful and worth spending time to learn, should be done. Once I have decided to 'commit' some time to learning it I can move the card into the 'Committed' column. This is where I will find the next item to spend time on once I have more time available or have completed everything that was 'In Progress'.

Setting up this board and defining the process raised some other questions. At what point does something become 'Done'? If it's a book like in the above example 'Agile Principles, Patterns, and Practices in C# (Robert C. Martin)' then it's fairly obvious however take the example of 'Function Programming (F#)' once I begin learning this how will I define that I have learnt enough? Enough that it will benefit my development career? I need a process that allows me to quantify what it is I want to learn.

I recently discovered a process that is used by squads at Spotify to promote continuous improvement within each Squad, Toyota Kata. This process consists of 4 parts.

  • Defining the vision or direction, Definition of awesome?
  • The current position/condition, what’s the current issues/state?
  • The next target condition, how can you quantify/define that some progress has been made?
  • The steps required to progress to the next target? Obstacles may arise as you progress that must be overcome.

By using this process with my learning it gives me a quantitative measure of when I can move something from 'In Progress' to 'Done'. Not only this but also it enables me to define, in more details, what I want to learn and also put some constraints on how I will focus my efforts. This is important as time is precious and therefore we can optimise how we spend our time learning to get more out of it.

I created a template that I would use for each topic on my board based on the Improvement Theme I found online.

I then began with the 'Functional Programming' card on my 'Todo' list, I came up with a definition of what I would consider to be a really good place to be in terms of my F# learning and added this to the 'Definition of Awesome'. This may change over time especially as I learn more about the topic however for now this is my long term goal.

Next step was to honestly document where I think I am. This belongs in the first box, 'Now/Problem'. I then decided on a realistic next target condition. I could also put a time frame with this however for now I haven't. I think it's important to make this quantitative however as you can see the first 2 out of 3 on this first example are open to interpretation.

My final step was to find some first steps to help me on my way to meeting the next target condition. The final outcome is here:

This is then added to the card on my Kanban board so I can refer to it. You'll see that I also renamed the 'Todo' column to 'Explore', this is because I may decide that after some more thorough investigation there is little or no benefit in spending any more time on a particular topic.

This process is evolving and I may update or change it over time however this is how I'm going to stay on top of what I'm focusing my limited learning time on in order to progress my development skills.

Please let me know if you find this useful or have any suggestions on ways it could be improved.