The struggle is real

When new joiners ask me what's the best way to learn something, I had often struggled to find a good way to explain my way of learning. I want to tell them to learn everything, because everything is connected on some levels in the world of software development. To be a good developer, it takes a lot more than knowing a framework (e.g. React) very well. Other questions comes to mind too: "how did you structure your project and why?", "which build tool did you use, how do you plan to publish the code?", "have you considered the other tool/lib/framework?", "what is your testing strategy?" and etc. All of these are common and practical questions people ask when they join a project, a good developer should be able to explain them. But it takes a lot more than reading a few article to truly grasp answers for these questions. So I often default to saying "depending on what you are trying to do...".

I personally also struggled a lot in this area, because I'm interested in a lot of areas: frontend, backend, mobile, and etc. It becomes increasingly difficult to keep track of everything as I learn more. Knowledge, like a spider web, the area increase exponentially as it grows. When I talk to people about this, the more senior developers often say that I should pick one area and focus on it. And they would go on to quote the following line:

Jack of all trades, master of none

On some levels I do agree with it, I only have finite amount of time like everyone else. So even if I work twice as hard to learn I still won't be able to learn everything I want. But at the same time, I don't just want to give up. I have experienced the benefits of full stack, the ability to see a problem from different perspective and being able to find a solution that make sense overall.

So what then?

I wanted to find a way of learning that is practical and easy to follow. It needs to be something that can be followed by an individual as well as adopted by multi people team.

Path to the solution

I analysed my situation and what is going on at my work place. Unsurprisingly, I found quite a lot of problem.

I decided to first write down my way of learning to see where the problem are:

  1. Read articles and find out about something new.
  2. Keep track of it, so can back to it at a later point.
  3. If something came up a few times, I then spend more time doing some quick research on that topic. This could be reading the official documentation, and checking out a few blog posts online. I don't spend too much time at this point, the aim is to understand the high level gist.
  4. If I find it interest and I have the opportunity, then I go on to get some hands on experience through personal project or other means.
  5. If I get stuck I'd google for some tutorials in that specific area

Surprisingly enough, this process is actually okay I think. The area that I struggle the most with, turns out to be keeping track of things to learn and how to best management them. I had done an exercise to tackle that separately (I'll cover it another time). But this is really good news to me, since this means my learning process itself is fine.

So how about my work place? Here are just some of the problems I identified:

  • Our internal training mostly focuses on topics are a deep dive in certain areas, which can seem overwhelming for people who are new to them. It is also difficult to get on these training, due to the limit slots.
  • There is a lack of structured learning in general within the company, what you learn and what you get to work on is mostly luck based. There isn't much support in terms of learning either, for graduates just came out of university it is easy to feel lost.
  • Senior developers and coaches are too busy with client work and aren't too interested with helping junior people. Even if they wanted to, this can be quite difficult because they are based in different locations.
  • There is little focus on training our non-technical people about the technical side of things. So very senior Business Analyst might not understand concept which a junior developer work with daily. Which makes the analyst's job difficult when they have to understand the challenges or gather valuable from stakeholders.

Based on my own learning process, I came up with a new model of learning which can applied to teams. I call it Triad Learning.

Solution: Triad Learning

I decided to give it this name because it is made up of three parts: Presentation, Workshops, and 1:1 paring. Each part has its target audience and goal. Any of the individual parts on their own aren't groundbreaking, the fundamental idea here is that by combining them we create reinforced learning. Rather than just telling people about high level ideas, or do a deep dive on a topic people aren't familiar with. The goal of Triad training is to take some topic from the basic high level concept all the way down to practical hands on experiences.

image

The follow sections will be explained in a team environment, please refer to the five points I stated above if you need more information around applying this for your own individual learning.

Presentation

Talk or presentation is probably the most common verbal way to share knowledge. This type of training/learning aims to give large group of people a high level understanding about a topic.

Example: if I want to train people around automation testing. I might want to give a presentation around why we test and how we might go about it. The target audience could be technical and non-technical people.

Workshops

Workshops are quite useful due to its discussion nature. These kind of sessions will offer two things: 1.) give people an opportunity to try something simple out with guidance and support. 2.) the other advantage is allowing people to listen to what others are talking about so more introverted people can also benefit from it.

Example: using the automation testing as an example, this could be doing some TDD with a smaller group of people. The intended target audience is more developers in this case.

1:1 Paring

It is extremely frustrating when you can't get something to work. It is very helpful to have someone there who you can bounce ideas off. Even if they don't say much, explaining the problem to someone forces you to think about it more. Often, I end up solving my own problem half way through the explanation. The idea of 1:1 paring is for just that. To give other people the opportunities to approach the trainers and ask questions and bounce ideas off.

Example: back to our testing example, this could someone asking how to mocking in Jest. Something that is very specific which doesn't interest everyone, but it will speed up the learning of the person if they had someone who could answer their questions or point them to the right direction.

Final words

The main focus on Triad Learning is around reinforced learning. The first layer of the pyramid is to understand the high level concept. Then you go on to understand how it works through more hands on and a deeper dive. Lastly, you'll learn through more practical and encountering challenging problems.