Do you feel left out? Make the best of it!

I have read a blog post about feeling left out on the Aha!’s blog and a lot of old memories came into my mind that I have to write out.

My background

About 4 years ago I was working with a centralized team and nobody was prepared to that. Not them or I. After I went through on almost all of the cases in that post I have changed a lot. And after that, I was able to turn these disadvantages into benefits. That is what this post about.

Centralized decisions

Feeling left out

The team was working together in the same open space for years. And suddenly I came into the picture. My experience is the same as in the referenced post: usually, they just simply forgot me at all. They haven’t even thought about me. Actually, nobody cared about the lonely man far away.

Feeling of left out
Feeling of left out

Sometimes they even forgot to tell the decisions after they made. So not only I couldn’t participate but had less amount of information than the others.

Work more than ever

That situation was very frustrating during the first several months. After this struggle, I made the following decision: Fuck that!. I cannot really force others to take care of me or count me as a person. But I can improve myself. I can solve the most amount of ticket, answer on the largest portion of live issues and get the deeper knowledge on the part of the system that I work on. 

Work hard
If they ignore you, you get extra time to get things done

After several months of hard work, their attitude started to change. Actually, I think, I become a person who hard to ignore. And believe me, if a team needs some help, they do everything that needs to get that.

And get the results

My hard work got a great result: At the end of the year, I had to take care on one of the new hires (who was working in the same place as the others) and I had to do some ‘technology lead’ like role in a big project (in that time I was the only remote worker on the team).

Delayed responses

When you work in the same place as the others and you have a question, you have a lot of information: first of all, you just see if your teammate is at his desk or not. Secondly, it is a way harder to not to answer you. If you write a message, there is no guarantee that you’ll get an answer at all.

That is also a topic that you cannot change. I cannot jump into my car at every single question, drive 2 hours and ask the person directly – usually, I have to wait. To solve that problem, I had two strategies:

More tasks – gain benefit on the wait time:

I always keep more than one todo item on my list. And prepare the case when somebody doesn’t answer. You cannot just sit at your desk and get blocked because you are not the top priority on some others job. But you can work on one of the other tasks or learn something new that makes you smarter.

Don’t let you left out – action plan to reach out people

I have collected as many private phone numbers as it possible. And also made an agreement with one person in the team: if I cannot reach somebody and it is really urgent, I can call him directly and he speaks with the person to please answer me. In that way, I had an emergency method.

Forgotten timezones

That is the only point that I was lucky with. We were living the same timezone so there was no question about that.

My current team is an opponent with that one. Now we have to work together with the other team and we have 9 hours of time zone differences. That basically means, there is no common time window for us and we are facing a lot of challenges.

I could lie if I would tell that I know the best answer – I think that is something that we still need to work on but we are improving day by day.

Technical disrespect

I couldn’t call that technical but simply disrespect. There is nothing more frustrating than being part of a meeting and missing the main information just because the others are using whiteboard just because it is comfortable for them.

I have to tell, in that case, I have only a small amount of patience. After I ask a team several times to please not do that because in that case, there is no reason to me to be involved in the meeting, I just say goodbye and ask a meeting memo. After that, I can work on the next important thing and wait for the meeting memo.

In the case if the topic is urgent, I’m sure, there will be some solution. In the worst case, I can ask the team to read the whole whiteboard to me. Or they can take a picture for me in every five minutes to get updated but these are not solutions.

I think maybe the best solution is just asking to be the presenter and do the job that nobody wants. And drawing the diagrams online (prefer to use a company wiki just to keep the information searchable).

Final thoughts

Working remotely with a centralized team is really hard and needs a lot of patience and I bet every single person who had to try that, lost his calm blood at some point.

My closing thought is that: yes, it is really hard when you feel left out, but there is your choice how you will respond to that. You can sad or you can make the best of the situation – It depends only on you!


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.


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 behaviour are great.

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


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.


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.

5 mistakes you should never do

There are a lot of best and worst practices during our work life. Let’s see my top 5 mistakes that you should never do.


Talk about religion or politics

These are the topics that can poison a good relationship. Let’s think about the never-ending arguments in family dinners when somebody comes with their political views or arguments with the older generation about religion.

There is one common thing in these two topics: the argument will never-ever be finished. Almost nobody will change their mind and it is completely wasting our time.

Talking about these topics in a working environment can have two negative effects: firstly, it can destroy a good relationship between coworkers; secondly, it can waste a lot of time. And of course, time is money, so it purges money without any benefit.

Undervalue others work

My work is my child. If you criticizing my work, you are harassing me. That feeling is the same on the other side of the mirror.

If you undervalue a co-worker’s work, do not wait for a positive attitude from them. Yes, you can have other view or you have to talk about possible mistakes, but you have to do that in a really assertive way. You cannot afford to yourself to destroy your connections.


There is a thin border between joking and insulting. A joke is when everybody laughs, insulting when there is one person who feels sad.

For me, it is really hard to keep myself in the border. Maybe one joke is safe for one of your teammates and insulting for the other. There is no choice: you have to be careful about your humor.

Passionate argument

Arguing is a part of the teamwork. There is no reason to build a team full of the same personalities. Different person thinks differently.

There is no question: if you work in a team, you will have arguments. The question is only that: how you want to handle your arguments? You let yourself to say any word that you want or take care about your sentences.

If you let yourself raging, you will have a lot of passionate argument. For a short time, you can win some of them, but in the long-term, nobody will want to work with you. And if you do that, you will find yourself alone, even if you are a part of a team.

Arguing is good. That means both parties wants the best. Every professional has to learn how to argue well, how to control their feelings and how to get the most benefit of arguments.

Denial of talk

When I was a young junior developer, I made all of these top 5 mistakes. Thinking back, I think the 5th is the worst. There was one time when I had a really bad argument that became very passionate. We were even shouting with each other and at the end, I have cut the line. I just closed our IP application and didn’t answer for any of the phone calls.

With my current experience, I think I was a lucky guy. In the worst case, my employer should fire me and I should tell my pregnant wife that I have been fired because I cannot do a professional argument.


These were my top 5 worst mistakes. I believe these are the 5 mistakes you should never do. There is no reason to allow one of these for yourself.

We spend most of our lifetime with our co-workers and it means, we have to handle them in a correct way and build good relationships.

Review and refactor plans


Such like in software development, we must be agile in our personal life too. There is not enough to create and complete our plans. Our life always changing and we should be prepared to the changes. That is the reason why I regularly review and sometimes refactor my plans.

Review and refactor goals


I had a great training plan that should cover all of my learning for the next year: I have decided to gain a basic knowledge about web development using .Net related technologies. My goal was creating a clone of a Microsoft Todo site on my own and on every step, I wanted to learn some new stuff.
There is only one fix point in our life. That fixpoint is changing. Life does not care at all about my goals. We got a great push at my employee and we must change our technology stack. We have to use a Java stack instead of .Net.
That basically means, for me, there is no reason to finish my learning plan just because I do not even know if I will be able to use that knowledge at all. Instead of that, I will learn Java stack.
For me, that is not a big change but a change. It is relatively small change because I will still work on a web project. That means I still have to learn web development. But the technology stack will be another than the chosen one.

Reviewing plans

Reviewing our plans is really simple. We just have to go through on our goals and check their progress and their purpose of existence. By checking progress, we can review our time estimates. We can see if we need more or less time for a given kind of topic and we can modify our deadlines. When we are reviewing our goals, we can validate if we still need for a given goal or maybe we have to alter them or drop a goal at all. Maybe we can reprioritize our goals and add new ones.

How often

I think the scheduling is very important. If we review our goals every week, we will be stuck in the first step and go nowhere. For me, the best way to review my goal is really simple: I create an event into my calendar in every quarter to review my progress and I review my goals every year.
Between these checks, I just Trust the process and do my job as good as it possible.
Do not forget. These are not rules, just recommendations. As I had already given an example, in the beginning of this post, sometimes I just cannot wait until the next goal review session – In that case, I just do it as soon as possible to avoid to do unnecessary work.

How to review our goals

For each goal, and each larger step, I ask the following questions for myself:
– Is that goal still valid? Do I have to complete it?
– Could I make progress? Can I hold my deadlines?
– Do I need to refactor the goal or align more time?
– Has the priority changed during the last period?

Question list
Go through question list

After answering these questions, I will have a list of actions that I have to do.

Refactor plans

After the review, there comes a refactor. The result of the review progress is an action plan. I just go through my action list and do all of them. After that, my review and refactor session is complete. I just open a beer and start to work.
Do not forget to refactor all the key points
One thing that I cannot tell enough time: It is really important to check the deadlines, priorities and our committed time that we want to spend on achieving our goals.
There is no reason to just simply modify our goals without thinking through the deadlines. Also, lifestyle changes and it means maybe we cannot spend 15 hours of learning in the week just 10. Skipping these can cause some unacceptable results on our next review session.

Closing thoughts

As you can see, making our plans is not enough: we have to be prepared for change. There is no reason to fear the change or fight against it. We just have to accept it and make it as less painful as it possible. Also, as much as we can we have to be proactive instead of reactive.

Laziness – I did nothing


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.


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!

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.