Book review: The Clean Coder

Uncle Bob’s book, The Clean Coder: A Code of Conduct for Professional Programmers was life-changing for me. It helps an amateur to be a professional.

Introduction

I was a very passionate coder – As I remember, I couldn’t call that-time myself for a programmer or a professional. I loved to code and thought there is only one important thing that matters if I want to do a good job: I have to write good code.

The Clean Coder – How to be a professional developer

Actually, I was so young and so naive. In reality, I knew little about programming at all and nothing about being a professional.

How to be a professional programmer

That book has great thoughts about some basics of programming. Not about the for-each loop or about the syntactic of some kind of fancy language, but about some coding related knowledge that unnecessary stuff to do a professional job.

It talks about the basics of coding. About the flowing zone and managing interruptions. That was the first book when I read about the importance of Test-Driven-Development (TDD).

After reading that book, I’ve started to plan my days and my weeks. I knew every day what are the tasks that I want to finish that day. Also, I have learned how to estimate precisely.

It’s changed me as a technical person. I became a person who wrote better quality code and shipped most of the tasks in time.

Professionalism in handling people

As I wrote before, before that book, I care only about myself. That book was a life changer. I have started to think about the other people.  Active listening and a good meeting behavior are great.

Active listening and a good meeting behavior are great skills to reduce the amount of time spending meetings.

Interruptions

Maybe the most important advice that I learned from that book as a junior coder is creating a time myself to do my coding job and handling interruptions in a proper way. Actually, it is easy. Before that, I just told ‘Sorry, I am busy now, cannot talk with you’. Now I answer interruptions like ‘Sorry, I am busy now. Can we talk at 2 pm?’.

That seems to be a little change but that was a game changer. Before that, I actually told every person that I really do not want to talk with them and I didn’t give them any information about when we can solve their problem. Now they know that I will take care of them but not now. But I tell them another time when I will be available so they don’t have to come back to me and ask again.

Summarize

I was a good coder. I have finished a lot of tasks in a short period. Actually, I was a crazy person who jumps from one topic to another and sometimes I became aggressive just because I made myself to do a lot of parallel processes for multiple teams.

After reading, understanding and accepting the knowledge of that book, I became a person who I call professional developer. I started to ship important milestones and became a person who can trust in.

And that book had a positive effect on my career too. After about six months of hard work, my team and my manager seen my progress and I got my promotional: I got the Senior Software Engineer title and a good rise – and also some stocks too.

Laziness – I did nothing

Introduction

It is a bit hard, but I had to tell that: Laziness got me and destroyed my last 2 or 3 months.  Laziness is a monster that gets you and destroys everything.

The biggest enemy

During that time, I haven’t written a single blog post, I have learned almost nothing and my diet and exercise plan basically dead.

Forced changes

For the professional part, there were some changes in my life that destroyed my motivation and I needed some time to continue my professional journey.  I think I have created a good learning plan based on our requirements for our next projects in my full-time job. Also, I have started to do a learning project to learn a lot of technical stuff.

And suddenly, company politics entered and our team had to throw out our several month works and we were forced to change our technology stack. That is one part of the reasons why

That is one part of the reasons why laziness got me.

Summer and family

The other reason is simple: Summer was here. We went to visit California with my team. Immediately after that, we went on holiday with my family and when we came back, I had a lot of work around my house. Also, I have played a lot with my kids.

That was a good summer. My relationship with my family became stronger. For professional productivity side, laziness got me and I become lazy, but I think it worth it because I made strong connections between me and my family.

What is next

The summer ends this week so I must back on the track.

Firstly, I was working on my daily schedule. For now, my body used to get up almost 90 minutes earlier than my kids. That means I have about one hour each morning to work on my career.

I am the first who gets up in the morning.

Secondly, I going to review and refactor my one-year learning plan and my long-time and yearly goals.

Thirdly, I start to work on my goals.

Final words

My previous plan had the other issue: I haven’t calculated with my family. Now, my most important goal is to develop a lifestyle that both servers my personal development, my fitness and most importantly, my family life. I have a wife and two kids and my biggest responsibility is to take care of them.

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.

Deadline

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.

Summarize

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)
  • Asp.net 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.
  • Asp.net 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
Ubuntu

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.

Summary

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!

Team mindset

If you want to start working as a remote developer, there are two must-to-have condition you have to have. One is your mindset, and the other is your team’s mindset. You will fail if one of these requirements are missing.

When I have started to work remotely I have not succeeded for the first time. Actually, it was a fail. I was an employee of the company that creates software that allows users to work from anywhere in the world but our team was not prepared to do that at all.

My fail

I was the first person in the history of the company who was allowed to work from home. And I had to figure out how to do my daily job between the new circumstances. I have decided to work as hard as it possible just to prove that was a good decision to make the exception with me.

Alone, far away from your team

In the other hand, I made a big mistake. I have calculated only with myself but not with my team. Actually, I could do anything that I want if my team acts like ’We do not care for you at all’. We should spend time on investigating the hardware and software requirements to involve me in the team’s life.

Personal issues

My team had about 8 members, they are all worked in the same open space. I was the exception who were 200 kilometers far away. They were never told me but it is clear to me: they did not want to work with a remote person at all. There were nothing personal in this. Maybe I was the pain in the ass for them and they couldn’t handle the extra effort.

Used to work together in the same room

For example, they involved me in the meeting only if there were no other choice. And nobody told me the important information or nobody sends me a memo about the decisions. They just ignored me and I had to collect a lot of information on my own.

Technical issues

When we had a meeting, we had only a telephone. They turned on the speaker but nobody cared about me. Usually, I have heard only one or two people and there were a lot of background noise. I asked them plenty of times to be closer to the microphone but nobody cared about it. When I asked, they did it for two minutes and forgot it immediately.

Later, we had a great meeting software, JoinMe. I thought it will be a huge step forward because everybody can use his own mic and we can share a screen with us. I thought great, that will be the breakthrough. And I have failed again. I have forgotten the most important part that is not the software but the people.

Mindset problems

They used to do a meeting in a separated meeting room. Always. And there is no exception. So they have figured out how it will go: They brought one notebook into the room, put it on a desk and started the JoinMe software. After I have joined the meeting, nobody took care of me. The didn’t share a screen and they still used only the whiteboard on the wall and I saw nothing. If you use JoinMe, it is not enough just to connect the meeting. You have to join with audio too. 8 times from 10, they just forgot to join with audio. That meant they didn’t hear me, and I didn’t hear them. Sometimes at the end of the meeting I got an excuse ’Sorry man, we have forgotten about you’.

Please do not misunderstand me, they were not a team of bad people and they did not want to harm me – They were just a group of people who have worked with an in-place team during their whole life. Working with somebody who is not in the room was a too hard job for them.

New project – new team

After about 18 months of suffering, I had a chance to choose between a lot of projects at the company. I knew that is my chance to change my life. I wanted to search a team that is able to handle me. Private talking with managers was a new field for me but I could finish my research with success: I have found a team who works in-place but their management is in another office. That means they have to have a culture about handling a remote person because both of the project manager and the technical leader worked a far distance from the team.

When we had to choose, I did not hesitate at all. I said goodbye to my formal team and started to work with the new one and everything changed. I have found everything is possible if the team has a proper mindset and everybody accepts that you are not in the same room.

Finally, success

Suddenly I have realized there are people who do not have to ask to do a JoinMe meeting – this is natural for them. There was no question about using the proper microphones, sharing the screen and the knowledge. Every time when I miss an important meeting, somebody calls me and tells the information that I missed. I see meeting memos and I we have flows to do the code reviews remotely.

A whole team can change

And what happened to my formal team? Life can bring changes and you can never figure out what will happen. Now they have a remote team member but everything has changed. The remote guy is my friend so I could talk with him and I see, a whole team can change. They have no issue with a remote developer at all. Maybe it took one additional year but they have developed their self: they are able to and willing to work with a teammate who works remotely.

How to organize a remote meeting

Scheduling a meeting is always a challenge. If you want some more challenges, schedule a meeting remotely.

Foreword

The internet is full of information about ‘How to schedule a meeting’ or ‘how to hold an effective meeting’ so I do not want to waste my time for an additional post on the topic. Instead of that, I am going to tell my experiences about remote meetings. Let’s see some examples of my mistakes and their resolutions.

Preparing Steps

As I mentioned earlier, when I talked about remote code reviews, it is important to prepare for the meeting. If you want to present a meeting, you have to write a short description about that: the topic that you want to discuss or present to the others and/or if you have a problem, what is the acceptable output of the meeting to solve that.

Do not invite the whole world to your meeting

You are responsible for the number of attendees. Let’s just think about that. You have a problem and you need the knowledge of your team to solve that. So you decide to hold a meeting about the problem in question. Are you sure that every single person is needed to attend the meeting or maybe it is just more simple to invite the whole team?

I think the best way to think about that is as follows. What would happen if you had to pay the salaries of the attendees? Are you sure that you have to invite eight people or if you choose wisely, you can solve the problem with only two of your teammates?

Use the proper tools to resolve problems

When I was a young junior developer I used to use Skype as a remote meeting tool. I did not even care about the other members. I just started the audio call, told my problem and waited for the solution.

Today, I tend to think more professional. I prefer to use JoinMe or GotoMeeting. I always show my desktop and I am planning to buy a camera to show myself. It just makes the meeting more personal. Both JoinMe and GotoMeeting is able to make a video recording.

Stop Getting Distracted

You can never eliminate all sources of distractions, but you can take some steps to minimalize them.

No Popups

When I start a meeting, I disable all other notifications. There will be no chimes, pop-ups, calls or chats. I want to focus on the meeting.

I create a meeting event in my Outlook calendar. That shows my teammates that I am busy, so “please do not disturb me”.

No Personal Info during the Meeting

It might sound strange, but please, hide your bookmark bar and as many icons as possible. I had never done that before, just used the drag and drop functionality of the Chrome browser if I found something interesting. About 3 months ago, I decided to learn about algorithms. After some search, I have found a Pluralsight course that has a section about how to learn algorithms. I thought it is great, I bookmark that and watch it during the evening when my family sleeps.

A single bookmark bar can crush your meeting

Actually, that was a huge mistake. The course name was ‘Preparing For a Job Interview’. Yes, the module was about algorithms but it seemed I wanted to prepare a job interview. To make it better, my manager was also attending at the meeting.

I have planned to have a short talk about a relatively small problem with my team that should take about 30 minutes. Instead of that, I had to convince my team I did not want to quit my job.

Clothes

When I was a college student I had my first project that paid some cash. I was so young and I had no idea about  ho to deal with people. We have decided to hold a one-hour meeting at 10 pm with the stakeholder about our ongoing tasks.

There were 3 people attending the meeting: I, one of my friends who were a student too, and the stakeholder: a young woman close to her thirties.

I wore pyjamas and drunk a beer. My friend had a singlet and also drunk a beer. The stakeholder has a full dress and makeup and drunk some water. We were just two children who wanted to code and she was a professional.

Conclusion

I hope you got my point. It seems to be an easy task to have an online meeting but it is not the truth. The truth is, you cannot just turn on the mic and eat your lunch during the meeting. You have to act in the same way as it was an in-person meeting. Do not show too much about youself, as you have to  avoid being the source of the distraction.

You have to define the goal of your meetings and you have to appreciate the time of the attendees. This way you can have a meeting with the same productivity as in the case of an in-person meeting.

 

The Importnace of Personal Meetings – Travel Week

Even if you work remotely, personal meetings are really important. Sometimes you have to travel and meet your colleagues personally. In that term, there are only two differences between a regular job and working remotely: first, you have to meet your team – rarely but regularly –  and second, you have to use your time wisely.

Background information

I work in a small city and it takes me about 3 hours  to meet my co-workers personally. But also, our team works together with an other team that is on the other side of the planet: we work in Hungary (UT+1h) and they are working in Santa Barbara (UTC-8h). That means, we have no common time window during our regular workday at all. They just woke up when we go home. It is somehow horrible because it takes one day just to answer a single question. Actually, I am going to write about the time zone problems later, now let’s see how important the personal meeting is and what are my personal goals for this week.

The Importance of Personal Meetings

If you never meet your team at all, you are something like a robot. You get the task as and give the solution as an output. Actually, in real life, you have to deal with real people. They breathe, eat, and they have feelings. They are not robots.

When I have a chance to meet a team personally, the most important for me is to get familiar with the people. I watch them as they speak, I want to know about their family background, their relationships, hobbies, caffeine habits, sports preferences and so on.

You could ask me the question: why I deal with all of these and the answer is very simple; I have to do anything that is possible to make our future work more efficiently. It is a lot more easy to start a conversation with somebody if I know him. I know where they take a small rest in the middle of their sentence, I know when I must not disturb them and I am able to just talk with them how to make our possible professional arguments less painful in the future.

Every single person in the team that I have to work with counts. Also, I need to know how to pronounce their names. For the first sight, it sounds strange but it is more comfortable for them if I call them by their names not just wondering what I should say.

My first-day results

Just during the first two days, I have collected a lot of information.

I know that my boss likes to play ultimate frisbee (that is a crazy sport if you have never had to run in the sand of the seaside). I know he has a son who plays in a rock band and he has to carry instruments in his car.

Our architect is going to be a father in about two months and likes to fly. He is a member of a local airplane group and he flies regularly. He also likes to drink a beer and has been working with the fellow engineer for about 10 years. They can understand each other’s thoughts in a second without saying any words.

Final Words

I could write a long list about the rest of our team, but I think you already got my point: I make personal connections to make our work easier. And that pays off in the future!

Online gaming

Online gaming is the biggest time eater in the 21st century. And it is even more dangerous if you work remotely because nobody sees how you spend your day.

Online gaming – The good side

If you work remotely you will be the invisible man. Humans are social beings. And you will work alone. Yes, that is true: nobody works alone, but you will not have physical contact with your team, so you will start looking for ways to get closer to human beings and the easiest way to do that is simple: You have to install a great game with huge user base and you will be able to play with living people. And you will also be able to talk to them. I know that is still something fake but you will really feel you belong to somewhere. You can find new online friends, you can chat and talk them in every day and you do not have to leave your room to do that.

Online gaming – The bad side

There is nothing bad in playing several times a week, but there is one big problem with online gaming: I know nothing more addictive, moreover you can get it for free. You can play 10 thousand games without spending a single dollar on them. Most of the most popular online games are completely free. You just want to play one or two games with your friends and 1 year later you will find you played 1000 times in a single year and the average game time was 45 minutes. It is not too hard to calculate how much time is that: It equals 93 working days in a regular 8 hour job.

You could have created a side project or learned several technologies in that time, but instead of that you just played with people you actually do not know at all. You have your virtual playground but there is no human connection in your life.

How should you play if you want

Online gaming is something similar to drinking alcohol, with only one difference: It is something relatively new. Maybe you have already seen your drunk father and you saw the side effects of alcohol but it is of good chance you have never seen your parents siting at their computer and playing online games day by day. The solution is something similar to the solution of alcohol problems. If you are an addict already, you have to find your way out.

That life is well known for me, so I know how to deal with it. I have tried uninstalling all games from my computer, then reinstalled all of them in one or two weeks. Also, I have tried to say no to my online friends,but I have started to play again in one or two weeks. There was one good way for me to handle online gaming: I have a daughter and a son. I really love them but from productivity aspect, they are my biggest time cunsumers.

Conclusion

Every minute is of high value in my life. I have to take care of my family, do my regular job and I want to do some productive stuff in my free time. I still play online games but I have a strict rule on them: I play maximum 3 times a week. It takes 3 hours in total. And my personal development, my blog and my side project has higher priority than playing some games. Online gaming is a reward for me. I plan my week and if I can finish every task on my list, I reward myself with playing some games. Basically, I had a bad habit that I have replaced with a good one. When I want to play a game, I just check my kanban board, if there are any items on my to do list. As soon as my list is empty, I reward myself with playing.

 

Rules

I have spent many years as a software developer who did everything that was needed and yet could not step forward. I was the guy who suited perfectly to his job but nothing more. When I look back I see I have wasted a lot of time without developing myself. I think one of the reasons was that I did not have any rule that I could set on and I could be strict to.

When you start switching your job from a regular 9 to 5 job to remote working you will be invisible for all of the people around you. Before the change, your family knew you have a job and you have to work. Before the change, you were visible for your teammates. From one day to another you become the invisible programmer, and you have to find your way to work effectively and become visible. To do that you must have some rules.

Distractions at home

I remember my first day as a remote developer. My whole family knew I came back to the city where I was born and I was going to work at home. Actually there are almost nobody in my family who could understand what computer programming means and what it means when I say I will work at home. On the first day I got multiple requests from my family: My mother asked me to go to the pharmacy and get her medicines, my sister-in-law wanted to me to do her shopping and I got a request to go to the post office to post some letters. Actually nobody thought I will work. I believe they had a picture in their mind about me playing computer games the whole day and that I have a lot of time.

And there was one additional source of distraction that could highly affect my performance. In that time I played a lot with an online game called League Of Legends (LOL). This is a really good game that can burn all of your time if it grabs you. As I remember, the average gaming time was about 40 minutes and that means you can waste a really huge amount of time if you do not control your playing habits. I believe online gaming is an invisible distraction source that can the most of your time.

Rules to reduce distractions

So as you can see not only my family but I was a distraction source for myself too. On the first day I have learned I need some rules and I have to be strict with them. The first rule was: my working time is my working time. I have to act the same as when I work in the office with my colleagues.

There is no exception. So I have started to say no: No, I will not go to the pharmacy, no I will not do the shopping or post letters. And I had an other important rule: I will never play online game during my working time. Maybe it seems to be funny that I have to create a rule about online gaming but the truth is my brain fall into a habit: when I sit down my computer I start to play. And it is terrible.

Rules about rules

Actually there are some rules about having rules too. First of all, not enough just write down your rules, you have to commit to them. Every time you go close to break a rule you have to ask a question to yourself: ‘I am sure I want to break that rule? What will happen when I break that rule? What happens when I break that rule multiple times?’. I am sure the answer is simple: If you have committed yourself to your rule, you will not break that rule. Of course there are some emergency cases when you have to break them. If your pregnant wife asks you to call the ambulance you will not tell her ‘Sorry honey, this is my working time and I have committed myself to not to care about my family during my working hours’.

If somebody asks you to leave one hour earlier and drink a beer with him it will be a lot more easier to answer the question. And the reason is simple: if you have a rule you do not have to decide if you go to drink a beer or not. You have your rule and you have accepted the fact you will not leave sooner. Because if you leave sooner today, you will make the same decision tomorrow and the next week too.

Conclusion

To summarize that, You have to create your rules. If you are at the decision point you do not have to do a decision if you have a rule, just follow your rule. And do not forget sometimes to review your existing rules and do not hesitate to modify them.

And finally I highly recommend you to use rules not only for your work but for your personal life too.

 

Example

You have your goal. You want to lose some weight. To reach that goal your goal has to be specified: You have to write down your target weight and your deadline. You cannot choose a short deadline. You have to give time for yourself. It cannot be done in one week. So choose one year or a half year. The internet is full with calorie counters and they will help you a lot. You enter your age, your gender, your current weight, your target weight and your deadline. After that you just have to enter every meal and every drink that you take and follow one simple rule. Never eat too much and never eat more calories than your daily limit.

When you are committed to your goal and your girlfriend asks you to eat some cake, or your friend calls you to drink some beers you do not have to choose. You will see how many calories you would eat and you will simply able to answer no. And you say, sorry, but I cannot eat that or drink that because I have a goal and I have a rule that helps me to achieve my goal. And your goal will be simple: I will never eat more than my daily limit.

I had that rule for a year. There was a new year party when my weight was about 99 kilograms and I told myself; it is enough. I will never reach 100. So I have set my goal to reach 88 kilograms in a year. I have started to use a calorie counter software. And after I was strict to my rule I could check my weight again on the next new year eve and it was about 86 kilograms so I think the method works perfectly.

Actually after I have reached my goal I made a big mistake. I have forgotten to follow my rules and now, about 2 years later I am at 92 kilograms and I know what I have to do. I set my calorie counter and I start to follow my rule again.

That is my experience about having rules. I hope you enjoyed it and you find that article useful.

Time management

It is 5:44 am and I am writing an article about time management. More precisely, about how to schedule my time. I know that sounds crazy but believe me there is a good reason for that crazy time.

At a regular 9 to 5 job

When I had a regular 9 to 5 job I had no problem with time management. I knew I have to arrive at 9 am and I will go home at 5 pm. And the reason is simple: I had an employer who have created a rule and my employer decided when I have to start and when I finish my work. It is really easy.

Freedom when work remotely

In 2012 my life has been changed. From October, I was the first in our company who was allowed to work remotely. There was no culture of remote work, there were only a few rules and I had to figure out how to do my daily job. I become the invisible programmer. Everybody knew about me but nobody saw my face.

That change meant a lot of freedom for me. It is something similar to the change when I have left the high school and started the university. In the high school I had to attend every class and when I didn’t go to the school I had to bring a medical certificate about my illness or I have been punished. Opposite of that at the university nobody cared about me. I had completely freedom of what I do and when I did it. I just had to pass my exams.

Time management problems

When somebody works remotely it is really easy to lose control over the time. Sometimes you start your work a bit later and sometimes you finish it at midnight. Or You might have a good idea at 10 pm and you sit down to your computer and start to implement it. At first hearing, it sound good but actually that means you have no idea about how many hours you actually work to your employer and when do you do that.

It causes two problems: First of all you don’t know how much your salary per hour is, because you don’t even know how many hours you have worked. Secondly, your team does not know when you are available for them. You will be the invisible programmer and nobody will know, when they can reach you. And it is horrible because you work in a team. You have to find a way to be visible for the others. And that is what I want to write about in this blog: how you can be visible, when you are the invisible programmer in your working environment.

Proper time management

I think the best solution for time management is simple: You have to define when you will work. In 2012 I had a simple solution for that: I decided to work from 10 am to 18 pm and set my alarm clock to 9:45 am and 17:55 pm. That was my crutch to be strict on my time, and I knew when I will start and I when I will finish my work.

I have decided to do that in the same way as working in the office. When I was late or I had to go out somewhere I always sent a message to my manager and my team and they knew when I was unavailable. They knew they can call me from 10 am and they knew when I went from my desk and when I will response their messages.

It was a bit easier when I had worked in the office: when I left my desk everybody saw I am not here. I am visible at the office. When I came back they could ask their questions. And I have created a rule that fakes that I am in the office so my team could trust me because my behavior was transparent for them.

My example

It is now 2017 and there were a lot of change during the last five years: I still work at the same company but the company is way larger, today I am not the only one who works remotely, I have two kids, I work on a way different project and I have my own side project so my schedule changed a lot. But I show you my daily schedule at the moment:

  • 05:00 – 07:00: Working on side project
  • 07:00 – 09:00: Family stuff: breakfast bring the older to kindergarten, etc
  • 09:00 – 11:30: Work
  • 11:30 – 12:30: Lunch break (I know I should work on that. It takes a bit more time than it needs)
  • 12:30 – 17:00: Hard work
  • 17:00 – 19:00: Family stuff
  • 19:00 – 19:40: Fitness break
  • 19:40 – 22:00: Family stuff / Learning something If I have time

That is my basic schedule. I try to keep the timing, of course I cannot be strict to that schedule all the time but I think this is a good frame for my day.