Detailed learning plan

My high-level learning plan is already done. This is the time to create a detailed learning plan for the first step.

Overview of the high plan

As I wrote in my previous blog post about my high-level learning plan, I have a lot of stuff to learn during the next year. To learn all of these programming tools and technologies, I going to copy the Microsoft To-Do site. In that way, I do not have to figure out what kind of software I want to build, I just simply copy the functionality of an existing one.

The first step: Test-driven development

Test-driven development is a great topic to start, there were several reasons why I have been ranked that for the first place.

Actually, I do not have to learn new technology, I can use my existing knowledge to do the coding.

It forces me to think about the behavior of my project, ignoring some implementation details, like data storage, GUI or user management. Just back to the plain old basics: play around with some objects.

Set the goal

My goal is to implement the basic objects. As I have checked the Microsoft To-Do website, there are only a few of them: It works with lists and to-do items. That’s all.

At the end of that step, I will have these objects, a service class for each of them that manages CRUD methods, some listing and sorting methods and a mocked list that helps unit testing and all of them will be created using test-driven development principles.

Collect learning materials

To complete the detailed plan, there is not enough just set the goal and start coding. When I going to implement the first step, I do not want to spend hours by looking after information on the internet, so I have collected the necessary learning materials.

Collect all of the learning materials and keep them at your hand

To learn new things, I prefer to use Pluralsight and complement it with written books. And also, I have to watch out also the quantity and the quality of the materials. To check that, I have talked with experienced friends and checked the recommendations of the materials.

My learning materials

PluralSight: Test-driven Development: The Big Picture
That is a high-level overview of Test-driven development.

Test First Development – Part 1 and Part 2
I will find detailed information here.

Ebook: Professional Test Driven Development with C#

As you can see, I prefer to use PluralSight. There is a great video from John Sonmez about the benefits of that tool: I do not have to buy tons of books this is searchable and available almost everywhere.

Learning steps

As I have mentioned before, I prefer learning by doing. But there are a lot of learning materials. Is there any paradox between saying learn by doing and choosing 3 learning materials for the same topic? The answer is no.

My plan is just going through the introduction video. After that, immediately I start to code.

Coding: yes, there is the time to get my hands dirty.

The best part: start coding

Create a question list: If I have a question that needs to be answered as soon as possible, I will know exactly where I have to go to find an answer. When I have a question or just something additional that I am interested in, I just write down to a list.

Write down a question list

When I have ended the coding part, I check the question list. I try to find the answers in the detailed learning materials.

After that, I check again the table of contents of the learning materials and learn additional stuff that I interested it.

Refactoring: You should think now I am done and can go to the next step. Actually, that is the time when I think through on everything that I have learned and refactor my existing code. Remember, every time the last step is just to go back and refactor.


I think I can walk through that list in a week. But I actually, I have a wife and two kids and I cannot imagine anything that can kill your time than a family, so I give 2 weeks for myself.


There is my way to create a detailed learning plan. I have grabbed one item from my one-year learning plan and created a detailed plan about that. There are the learning materials and an action plan. Also, I have defined a deadline and committed to doing my job for the given deadline.

Now, I have everything in my hand that I need. That is the time when I can start my one-year learning journey.

High level learning plan

I think one of the most important skills for a developer is self-education. To get proper results, it is necessary to have a learning plan.

Let me show my learning plan for the next year.

The big picture

Learning list

First of all, I just collect the topics that I want to learn about. At that time, my learning plan just a simple list of buzzwords separated into two groups: one group for stuff that I need for my current day job and one group that I just interested in.

Sort the learning list

Secondly, I try to sort them. I try to figure out, which item has the most benefits in short time and which item worth to rank higher just because it is a foundation of a later item and makes my life easier.

When I have finished the sorting step, I know what I want to learn and which order I want to learn them, but I have no idea how to do that.

My main goals

First part: learn stuff that I will work within the next year

  • TDD
  • Design patterns (I like to le-learn them each year)
  • Core
  • Rest API
  • AWS-introduction
  • Microservices architecture
  • Docker
  • Aurora DB
  • Cassandra
  • AWS-go deeper
  • Jenkins

Second part: something that I am interested in

  • Linux
  • PHP
  • MySql
  • Javascript
  • Symfony2
  • NodeJs
  • MongoDB
  • Redis

Learn by doing

There are a lot of ways to learn new things. For me, I think the best is just learn by doing. Creating such a learning list is not enough: I do not see any benefits of just reading one or two books for each topic – I have to gain some experience, I have to get my hands dirty.

That is the reason why I think I have to code a project. I do not want to waste my time figuring out a new project and thinking about what should do, so I choose the easiest way: just copy something existing.

Learning project

There are a lot of topics to learn in a single year and also, I have to do my day job. That means I have to choose a simple project with small object structure.
After some thinking, I have decided to copy one of the million of existing To-Do apps on the internet. So I have done my research and found Microsoft To-Do: It is a really simple web application, with only a few functions.

Microsoft To-Do
It is hard to find a more simple To-Do app

Review my main goals

This is still not the point when I can start to coding. It is important to get measurable goals. It is not enough to get some titles: I have to assign one small goal for each topic.

Actually, as I have already mentioned it at my other blog post about SMART goals, I define exactly what I going to reach. That means my list will contain not just the buzzwords but some achievements too.

My learning plan with actions

  • TDD – Create the main object model. Unit tests for everything with NUnit.
  • Design patterns (I like to le-learn them each year) – Reread the main design patterns. Refactor my existing code when it can be done better.
  • Core – Create a web UI for my project. Copy the look of the original site.
  • Microservices architecture – Refactor the project. Create microservices.
  • Rest API – Refactor my existing project.
  • AWS-introduction – Create a free AWS account. Host my project in AWS
  • Docker – Use Docker for my solution.
  • Aurora DB – Until that point, I have mocked everything. From now, I will use a relational database.
  • Cassandra – Let’s do one other database provider. From that point, it is configurable wich database the project has to run on.
  • AWS-go deeper – Deep dive to AWS. Let’s see how to scale my app.
  • Jenkins – Create a Continuously Delivery flow.
  • Linux – Use Linux for the whole process
  • PHP – Create a copy of my app. Switch the back-end to use PHP.
  • MySql – Third database provider.
  • Javascript  Refactor the existing code.
  • Symfony2 – Refactor the existing code.
  • NodeJs – Convert UI for a Single Page Application
  • MongoDB – Figure out which part of the application I can use a document store database.
  • Redis – Move session for Redis

And one cheat: I found one goal that I able reach by just using it: Linux. I want to get user level knowledge about Linux.

The first step of learning - Ubuntu desktop

That is the easiest. I just have to use Linux for a whole year as my desktop at home.  Even, now, I write this blog post on my desktop at home on Ubuntu linux.

The first dozen of tickets

KanbanFlow is a great tool to track down my tickets. So I just have to do my tickets and dedicate some time to do these stuff. Actually, I have two kids so I think I have to get up early when everybody sleeps and I can dedicate 3 Pomodoro’s for each day. I know, my goals should have deadlines but having two kids is something very new for me: At now, I have no idea if I will be able to keep the 3 Pomodoro‘s or not, so just decided to do as much as possible.

My learning list is on my weekly board
My weekly board

I know, my goals should have deadlines but having two kids is something very new for me: At now, I have no idea if I will be able to keep the 3 Pomodoro’s or not, so just decided to do as much as possible. That is the reason why I have chosen another way: I have one a little more than one year: I give time for September of 2018 and I want to finish my learning project until then.

SMART goals

Final check: make sure that I have SMART goals:

  • Specific: Yes, the target project and the requirments are well defined. Just have to copy an existing web site.
  • Measurable: Yes.
  • Achievable: Yes. The project not too complex so I will able to try out multiple technologies and design methods.
  • Reasonable, Relevant: Yes. Half of the plan contains only elements that I have to use during my following year. The other half contains my current interresting list.
  • Time bound: Yes. I do not want to spend too much time with creating a detailed timeline for each learning item. But I have a deadline with September 1, 2018.


That was my learning plan. I have decided what to learn and which order. The goals are targeted and the fist steps are defined and also, there is a dedicated daily time to do them.  There are a deadline defined so there is no reason to hesitate: let’s start learning and the most important thing: coding!