9/12/2019

How do you know that you are working for the right company? - How to build up your career

Introduction
One of the most difficult things in life is to find your proper partner. There are a lot of things what should match and the worst is that often you don’t really know what are these things exactly. If you find a candidate you have to decide after a while: “do I want to marry this person or not”. So you can only say yes or no and you have no idea about the other candidates. Maybe the next one will be better, maybe not.
To find your proper job at a proper company is almost as difficult as finding your partner. Here the only advantage is that you can change it easily whenever you want. But it is still the same: really often you don’t know what you are really looking for, you can always just say yes or no for an offer, but you have no idea what is coming in the future etc.

Collect your expectations

First of all before doing any change you have to collect what are your expectations. Of course your expectations can change from time to time based on your private life situation or by collecting some experience, so it is a good practice to update this list every year. Just as an example as a single you are glad to do a lot of business trips, but if you have small children most likely you will be looking for a job with as less business trips as possible.
I collected some ideas what can you consider on this expectation list:
  • Tasks which you would be glad to overtake (doing pure development, being a manager, support sales, do testing etc.)
  • Your salary expectations
  • Your preferred working hours
  • Amount of business trips
  • Used technologies
  • Overall topic of the project
  • Level of responsibility
  • Location
  • Work environment
Regarding all these points consider what would you prefer and what can’t you accept at all.
If you have such a list that makes it much easier for you to find a proper position or making decisions.
Based on my experiences each and every company and position has its advantages and disadvantages. You will never find a job where all your expectations are properly fulfilled. But you can find one which is more or less covering the points which are the most important for you.

Be the best in an average team or average in an outstanding team

You should also decide what kind of team and what kind of challenges are you looking for?
The first option, which is proposed for the ones who are still in the first part of their career is to find a team/place where the others are technically very good, so that you can learn from them a lot.
The other option is to find a team or company where things are not going so good and you think you could help them. Join them and try to improve things there. I propose this option if you are well-experienced and you are looking for something challenging. While fighting to make a place better you can learn a lot. And you can also take over higher level positions very fast in this way. However I don’t suggest such an opportunity for people, who don’t have enough experience, because they can not really improve themselves in such an environment.

Plan the next steps

To be able to make a good career you have to always think about your next steps: what would you like to do, which new responsibility would like to overtake etc. Be always open, check regularly the open positions at other companies, but even the internal jobs at your current company. So that you should always know what are your choices as a next step. It is also good to know which direction you are pushing your career. But don’t stick too much to your plan.

Summary


It is difficult to find a good job, but it is not impossible at all, focus on your goals and you will find the right path.

8/30/2019

How to make yourself more efficient? - Efficient working hours

Introduction
If you want to grow as a software developer you need to have good time management skills. Unfortunately this whole business is a race with time. All projects needs to be done as fast as possible. Next to that there are always new technologies which you need to learn to stay up to date. In such an environment slow programmers have no chance. I also knew several developers who were technically good, but they were mega-slow. Unfortunately they couldn’t do a nice programming career.
Of course you can do more by working longer (do overhours), but it has a huge negative effect on your private life on long turn.
So the question is: how to do the most within your working hours. I collected some ideas.

Pomodoro

There is one famous time management technology called Pomodoro. The idea is to work always 25 minutes in one piece, when you are really concentrating on work and nothing else. And then have 5 minutes break. After four sessions (after ca. 2 hours) you can take a longer break.
At most companies it is difficult to implement it: there are meetings, your colleagues are often interrupting your work with questions etc.
But what is really important: take regular breaks. These should be real breaks when you are not sitting in front of your computer. Without breaks you are becoming less efficient.

Organize your work - optimize your meetings

To be a bit more practical, I think the most important thing is how you are organizing your work and meetings. The worst thing that can happen with a programmer is getting interrupted. A two minutes interrupt means at least 10 minutes loss from work: to find again what did you do before, get back to your previous ideas. It all takes time. The goal is to minimize interrupts. The most common interrupt are the followings: meetings, your colleagues asking you about something, you have to ask your colleagues about something, receiving emails or you have to go to the washroom.
You can not avoid any of these activities. What you can do is to organize them into blocks and organize also blocks when you are working. These blocks should not be too short and not too long and they should not be interrupted.
The good thing with meetings that you can plan with them: you know when they are and if you are the organiser you can decide when they should be. In that case I suggest to make large blocks from meetings, like organize all meetings for the same afternoon, so that you can concentrate on technical work on all the other days. On the other hand organize your working blocks always in a way that they should not be interrupted with a meeting. If between two meetings you have only a short time, like half an hour, don’t start with deep technical work, do things that you can do fast: read/answer emails, book your working hours, schedule meetings, go out to eat or to the washroom, ask your colleagues for inputs for your upcoming tasks etc.
Otherwise all these activities should be done between the technical-work blocks. Never start a technical-work block until no all inputs are clear, or any of your colleagues needs input from you. Go to the washroom and grab some water and fruit before starting such a block, so that you can minimize the chance that you are getting interrupted. Do not read your email during these blocks.
The length of such a block is up to you, you can feel how long you can concentrate.
If you are still getting interrupted by a college always ask if it is fine to help them a bit later (when your block is over).
One more trick: if you have a headset on that decreases the chances that someone starts to talk to you.

Efficient communication

The other activity where you can lose a lot of time is the communication. If you are communicating in an unclear way or asking the wrong questions you can lose a lot of time. So before communicating try to summarize for yourself what do you already know and what information is really missing. After that find the right person and ask your questions.
If it is urgent to get the answers (it is blocking you) go and ask personally.
In every other case communicate by emails. They have two big advantages: the answer is well-documented and you can reread it any time later and they are not interrupting anyone during the communication. They can be answered when you really have time for them.

Know your goals

It is also important that you have to know all the time what you are doing and why. So for example if you are implementing a new function for your class you have to know why you are doing it, when will that be useful. So if you are not sure, just ask yourself: “why am I doing it?”. And if you don’t know the answer just stop doing it. You will win a lot of free time with this method.

Know when to ask

It is also difficult to know when to ask. To ask everything and ask too early if definitely a bad practice. First try to understand things on your own, so that in the meantime you can collect information from the whole environment.
On the other hand it is also a bad practice to suffer alone days long with a task, until your colleagues next to you knows the solution by hearth. So if you are stuck, before losing too much time ask you colleagues if they have any idea about the solution. Collect all information from them and try to solve the problem alone again. If you still can’t achieve it ask again, but this time don’t let they go until the problem is not solved.

Summary


You can see that efficiency for programmers is important, but it is not trivial how to improve it. But by following these suggestions you may be improve your efficiency.

8/20/2019

How to enjoy your project? - How to improve your technical skills during work?

Introduction
Independently of the project what I was working on I always had teammates who were not satisfied with the project. At most of the projects they were the majority. Their points are always the same: not challenging enough, not innovative enough, boring and the most typical point: I don’t learn anything new in this project.
After several projects I started thinking about this issue: does it mean that all projects are boring after a while? Yes, they are boring, unless you are finding your own challenges in the project. And if you can find your own challenges, you can always learn something new. So it is always up to you if your projects are boring or not. But how to make them more interesting?

How to find new challenges?

Fortunately, there are several ways to make your daily work more interesting. The main goal is to find new challenges so that you will enjoy your daily work and keep on learning something new every day. Let’s see some ideas.

Find your motivation in the project

If you are working on a project you have to know why you are doing it at all? Will that project to help people in their daily life? Will it make the world a better place? Will it make life easier? Will it make people happier?  Is is saving the environment? You have to find your motivation and keep it always in front of your eyes. You need to believe that you are working on something useful. That will make your daily work much better.
For example, during my work with driving assistance systems my motivation is to make driving possible for people who couldn’t drive otherwise due to health issues and to increase accidents on the roads.

Find new responsibilities

For most people it is motivating to feel themselves responsible for something. But it is also important to find responsibilities which are matching with your knowledge and interest. It must not be something too complicated. For example you can be responsible for reviewing the code of others, to support technical job interviews, to participate in project planning in tracking, to coordinate testing activities, to mentor the new team members, to integrate the code or to act as a software architect. Your responsibility can be also more project specific, like being responsible for the communication with the customer or being responsible for on software feature or component.
If you are having the right level of responsibility that will keep you motivated and it is giving the opportunity to help a lot. But pay attention: too much responsibility is making you stressful which destroys your motivation.
It is also important that you can also find a new responsibility for yourself. Just start to do new things during your daily work and with time you will become responsible for that thing.

Learn new technologies

Learning is very important in the life of the programmers. It is making you motivated and it is also required to stay up-to-date to keep your value on the market. So if you are working on a project where your colleagues are using a solution which you don’t know, just take your time to understand it. Don’t repeat always the same solution, always check for alternatives and if you find one, even if you don’t know it in details, try to understand and use it.
Always try to use the newest technologies: if there’s a new library which solves your problem just use it. Check always the solutions of your team mates: for sure you can learn something new from them. Keep on searching for topics to learn and take the time to learn them.

Find things to be improved

Things are never perfect. That’s true for your process, for your software design, for your code quality, for your testing strategy and for your teamwork as well. Find always things to be improved, point them out and try to make them better. By doing it you can learn a lot and if you are handling it in a positive way it can also motivate you.

How to improve your daily work on the project?

These were the high level ideas. Let’s see some concrete examples of what you can do.

Better code quality

Code quality is a subjective topic, but it always could be better. Keep on doing some refactoring on the codebase to make it more readable. To work with a nice code is always more motivating than working in the middle of chaos. You can also improve the process to ensure a higher quality of code: do regular code review, do pair programming, improve your coding guideline or setup a static code analyser tool.

More teamwork

Teamwork is challenging. Anyway most programmers like to sit alone in front of your computer with a headset on their ears and listening to some music.
So doing pair of mob programming is moving them out of their comfort zone.
But that’s exactly why it is making your alldays more colorful and more challenging. You can learn a lot from each other. Not only technically, but you can also improve your interpersonal skills: how to present your ideas, how to communicate with your colleagues and how to handle your anger. Not easy, but challenging. And it can be a motivation factor as well on long term.

Automate boring parts

Most projects have some parts which could be done easier and faster by some automation. It can be a part of testing, integration of just the generation of a part of the code (like getter functions, easy conversation functions etc.). Try to identify these parts of your project and automate them. For this purpose you can use some pre-implemented tools or any scripting language (like Python). You can learn a lot by doing it and at the same time you are eliminating the boring part of the work. So two points for your motivation.

How to motivate your team members?

You are behaving just like the people around you. If your teammates are demotivated that can destroy your motivation very fast. So it is also your responsibility to motivate your team. By doing it you are not only helping them but even for yourself. There’s nothing worse than working in a demotivating environment.
You can use the above mentioned points to motivate them: help them to find new responsibilities or things to be improved. Try to understand what motivates them the most and try to find the most fitting tasks for them.

Summary


As you can see, you need to do your daily project work anyway and it is much better for you if you are motivated in the meanwhile. Luckily you can do a lot to improve your motivation. Just do them and be a happier developer.

8/02/2019

How to ramp up for a software project as fast as possible?

Introduction
If you are working as a software developer you have already faced with the situation that you are starting on a new project, where you don’t understand anything, but you should start to work on the tasks as soon as possible.
Of course it is not an easy situation, but it goes much faster if you are doing the ramp-up process in the correct way.
And if you can understand the project fast you will be encountered as a good professional.
I collected some suggestions based on my own experiences below. I hope they can help you.

Tips and Tricks

Understand the current and the expected functionality

Before going into technical details you have to understand two things: what is the program currently doing and what is its expected behavior once the current task/project is done.
You should start this process by reading the requirements or the user guideline if they exist. Then you should start the program and play with that. Try to figure out as much functionality as possible and make notes. Collect also questions in the meanwhile and ask them from your colleagues before going into technical details.
Reading the already existing test cases can also help a lot.
Never start the implementation of the new function until it is not 100% clear how it should work, what should be its outcome.

Get a technical overview

Once the functionality is clear you should get a technical overview. As part of this you should read the technical documentation and the software design if exists. You should focus on the following points: which technologies (language, framework etc.) are used for which purpose, what are the main components of the software and how are the components communicating to each other (which interfaces are used, what is the information flow etc.).
In this stage you should setup your development environment, checkout and compile the source code and run it on your own.
You can also draw some diagrams for yourself to get an overview.

Identify smaller parts of the code

Once the high level components are more or less clear you can go deeper for the ones which are relevant from your tasks. If you are analysing a piece of code (class, function, subcomponent etc.) always concentrate on the following questions: what are the inputs, what are the outputs, how does it produce the output based on the inputs (which algorithm is used etc.) and who is using the code.

Don’t get lost in the details

At the beginning you don’t need to understand every small detail. If you already have an overview and if you have an idea about which part of code needs to be modified, you should just jump into the water and start to implement the first part of your task. You will understand the details during work.

Ask in a structured way

The best if you can understand as much as possible based on the code and the documentation. But most of the cases it is not giving a totally clean overview on everything. In such cases you should ask your colleagues. But you should do it in a professional way:
  • Collect what do you already understand and what is missing
  • Collect your questions on a paper
  • Tell briefly your current understanding to your colleague and ask if it is correct
  • Ask your questions
  • If something is still not clear try to ask by focusing on the still open points.
  • After the discussion make notes and check everything again

In the beginning always ask your colleagues to review what you have done

Since there can be some misunderstanding in the beginning, it is good to ask your colleagues to review your changes in small pieces, even if it is not part of the company culture. Be always open on critics and suggestions.

Summary


Every start is challenging, but if you are doing your ramp up in a well-structured way you can make it much easier.

7/28/2019

Programmers and soft skills

Introduction
Who are the famous programmers? Everyone knows Bill Gates and Linux Torvald. A lot of programmers also know Uncle Bob (Robert C. Martin). Why did they become famous? Are they so deep technically? For sure they are technically good, but there are a lot of programmers all around the world who are technically awesome and almost no one knows them. Why are they special then? They know something what others are lacking. These are the so called soft skills: good communication, marketing skills, self management, time management, great presentation skills etc. These skills are making them different, these skills are making them outstanding. And these skills can help every programmer to get a better job, to do a better career and to be more successful. There’s something great: you can improve these skills any time. And it totally makes sense to improve these skills. This is the way to success.

How to improve soft skills

As I just mentioned you can improve these skills anytime. One hand most companies realized how important these skills are, so they are offering trainings for these areas. Join these trainings!
On the other hand you can read a lot about them on the internet or you can buy some nice books.
But what is more important: these are practical skills. It is not enough to learn the theory. You have to use them in your daily life. You can always pay attention on practicing them as much as possible. And not only during work. You can practice them at home with your family or with your friends as well.

The most important soft skills for programmers

Time management

As a programmer have to answer emails , participate in meetings, help the other colleagues and be done with your tasks until the due date. This is really challenging. Either you are doing a lot of over hours or you are starting to use some time management technologies, like prioritizing your tasks based on their urgency etc. Without good time management skills it is really difficult to survive as a programmer.

Self management

If you want to do a career you need to be able to find the right positions for yourself, you need to see when do you have possibilities to prove your skills, you need to know when is the right time to change. And you need to be able to show to others that you are working well. Most programmers who are not getting promoted only because their outstanding programming skills, they are also able to sell their work to the management.

Communication

Programming is not the profession of lonely wolves, even if several people things that it is.
Programming is teamwork and to be able to work in a team you need very good communication skills. You need to understand the problems of the others, you need to ensure them about your solution and you need to be able to communicate your status in a very clear way. You also need to communicate to your managers and in several cases to the customer as well. It is really important to communicate to them in a nice and clear way. As a first step I would suggest to learn about assertive communication.

Presentation

As a programmer, especially if you are on a higher rank you have to do several presentations. These are either technical presentations (kind of trainings) or presentation about the content and the state of the project. These presentations should be done in a professional way and you need to learn it, what does it mean exactly.

Stress handling

Working as a professional programmer is mostly stressful. Stressful because of the strict due dates and because of the conflicts inside the developer team or between the team and the management. You need to be able to handle this stress in a proper way, otherwise you become either aggressive or depressive, worst case both of them. And this can have a negative impact not only on you and on your work, but also on your family and on your friends.

Basic marketing skills

You need some marketing skills if you decide to do your own business, it is pretty clear. But also as a developer if you are looking for a new job you need to do a kind of self marketing. You are basically a product on the developer market and you have to sell yourself for the highest possible price.

Summary


As you have seen you need several soft skills to be successful and a developer, but luckily you can learn them easily, it takes just some time.

7/18/2019

Motivation and developers - what is in the background?

Introduction
Most of the software companies are suffering from the high fluctuation of their employees. It makes them big difficulties and their are losing a really huge amount of money on recruiting constantly new people and ramping them up.
On the other hand it is also bad for the developers if they can not find a place for themselves where they are  feeling comfortable.
So the situation seems to be bad for everyone, but as for now there’s no solution for that.
Of course I also can not solve it, but I took some effort to analyze the situation a bit to have a picture about this whole process.
There are of course different people, different situations and different decisions which are not covered by my model, but I tried to cover the most typical career paths.
The purpose of this analysis is to help for the developers to find their optimal place as fast as possible and to help the employers to keep their employees.
It was prepared based on my own experiences, but I am interested in other opinions as well.

The model

I just prepared a short state diagram to have a graphical overview of my model.




If you start to work at a new place (mostly new company) you will start as a novice. This covers the first weeks and months. This is about introducing yourself and exploring your new place. In this period you are having the first contact with the team, with your new boss and with your new customers, you have to show your best side. On the other hand, you need to understand the working process and the technical background of your new project and achieve your first tasks. You need to prove that you are good enough to work there.

This stage can end up in three different ways.
The first one that you or your boss decides to not continue your work there. It can happen either if you are not fitting well to the team or to the project or if the workplace does not satisfy your expectations, so you decide to leave.
Otherwise you are staying at the company. But it makes a big difference in which way you are doing it. The first way is that your boss has the impression that you are better than expected. In this case you will be in focus and you will get several opportunities to grow (new responsibilities, new roles, etc.), but this means of course also higher expectations against you. If you are accepting this challenge you are becoming a rising star: being always in focus, getting new challenges and good career opportunities for the future. There are such people in each and every organisation who are reaching new levels of the hierarchy pretty fast. But this status also has a dark side: most of the cases you will irritate your co-workers who are working there already for several years and now having such opportunities.

But it also can be that you are “just” fulfilling the expectations and you are becoming a totally average “grey” co-worker. You are part of the team, you are contributing, but you are not really stepping further in this stage of your career. It is also fine for a while, since you can learn a lot during the first period and you can feel the lack of high responsibilities. There’s sometimes opportunity to change from this state to be a rising star, but it is not typical. Usually it only happens if something is happening with the current rising star (changing to another place etc.).


After sometime you are changing your state again, for some people it is coming sooner, for others it is coming later. Being a rising star is exhausting on long term and the magic of chilling as a grey co-worker also does not take forever.
From now on there are two opportunities again: finding your comfort zone or becoming unsatisfied. And the best part, that the same is happening both with the rising star and with the grey co-worker.
As rising star you will grow until a while, but once you will reach the state when you feel that it would be uncomfortable for you to take over higher responsibilities. For some people it is a position of leading a small project team, for others it is a CEO position, it is up to your personality. In the ideal case you can keep this position for you which makes you really happy, so that you can just work from your comfort zone in the next decades.

But it also happens (unfortunately really often) that you are not reaching this state, because always more and more responsibility is pushed on you (you can keep the one which is comfortable for you), you don’t agree with the direction of the company or your salary is not following your new roles and responsibilities. Of course there’s several additional potential reasons. In this case you are becoming an unsatisfied employee.

As a grey co-worker you also have these two options: finding your comfort zone, or becoming unsatisfied. There are several people who don’t want to have high responsibilities, they just would like to do a job, which is kind of OK for them and don’t make much stress on work. If such persons think that their place in comfortable (salary is acceptable, the project is fulfilling their expectations, there a good work-life balance) then they are finding their comfort zone as an average developer. They are usually the one who are living a stressful and well-balanced life, their are doing their tasks, but nothing more and they are happy with that.
But if the average developer would like to reach more (getting higher responsibilities etc.), but their doesn’t have a chance for that they will become unsatisfied as well. It can also happen if other conditions are not optimal (salary, work environment, work-life balance etc.). It is important to mention that each developer needs different kind of motivation. For some of them work-life balance is very important, for others it is more important to have interesting projects etc.

As a boss (team manager etc.) you need to know your employees and their motivation of work. You also need to understand in which state they are in their career and what is their future expectation. If it is so you can set up actions which can keep your employees at the company.
Pay attention: if the circumstance is changing it possible that employees from the comfort zone are changing to be unsatisfied and it is also possible to happen in the other way around. But this is unfortunately not so typical.

From being an unsatisfied employee there’s a highway to burn out. Burn out is bad for both parties: developers with burn out are depressive, demotived and not effective. They are just making the team slower and they are suffering at going to work day by day. From burn out there’s no way back. If you reached this state the best what you can do is to change company as soon as possible. But it is better to do this step before reaching the burn out state.

After leaving the company you need to do a restart at a new place and it will be pretty clear more difficult then your start at your previous place: you are older, you are having less motivation, you would like to reach everything faster what is mostly not possible.

What are the consequences for developers?

First of all you need to decide what is the position what would make you satisfied. Maybe you can figure out at the beginning that you are pretty happy as a simple developer without high responsibilities. In this case you have an easier way to your comfort zone.

Work during your first week and months based on that: if you don’t want to be a rising star just try to do the same level as the others, otherwise do your best. If at the end of this period you can already see that it won’t work at all at the company don’t hesitate to leave, instead of reaching the burn out state very fast.

If you are becoming a rising star try to keep a balance and not to grow to fast, because then you are losing the chance of reaching your comfort zone. And the most difficult: tell stop in time.
If you are a simple “grey” developer just do what is expected: not more, not less. And try to orient yourself to a position (project, topic etc.) which makes you happy.

If you are grey developer you still have some chance to become a rising star if you want. In this case just try to do your best and be patient.
If you reached your comfort zone try to keep it, try to avoid changes which can bring you out from this state.

If you are becoming unsatisfied let’s figure out if you still see any chance to find your comfort zone. You can talk about that to your boss, you can evaluate the opportunities. But if you see too low chance for that: change company before it is too late and don’t waste your time!

What are the consequences for employers?

As a boss (team manager, team leader etc.) you need to protect your employees from reaching the burn out state. It is even better if they are not reaching the unsatisfied state, but from that state there’s still a way back. If you find any of your employees in unsatisfied state support them to find their comfort zone to be able to keep them as a valuable long term employee.
Next to your rising stars, always pay attention also on your “grey” developers, understand their goals and support them to reach it.

If your rising stars are telling “No” accept their decision, it is very important!
And maybe one last point: if you can see at new colleagues that it won’t work at all, just resign them as soon as possible, otherwise both of you will have a lot of difficulties. Sooner is always better in such situations.

Do you agree with these points? Or you have other experiences? Don’t hesitate to share them!

7/11/2019

How to perform a code review?

Introduction
At most of the companies and projects there is something called four-eyes principle. That means noone is allowed to make changes totally alone, at least one more person needs to approve the changes. One popular implementation of four-eyes principle is doing code reviews. As alternative you can do pair programming. But what is a code review? How to perform it in an efficient way?

What is the goal of a code review?

Code review is one quality gate for the implemented code. The goal is that other (often more experienced) colleagues are checking the code changes, makes suggestions (so called findings) and decides if the code can be merged, or still some changes are needed?
The results of the code review needs to be documented.
The goal of code reviews is to achieve a better code quality and to share experience inside the team.

What is to be checked during a code review?

The first goal of the code review is to check for potential bugs in the code: check if the code is doing what is should, check for mistakes like usage of uninitialized variables, endless cycles, incorrect handling of memory, dead code etc.
Furthermore most projects should follow a predefined coding guideline. This guideline is up to the used programming language and it is describing how the code should look like: which missconcepts needs to be avoided, what should be the order or declarations, how to name your file, which language elements can or cannot be used, how to name your entities (functions, classes, variables, etc.), how to organize your code etc.
During the code review it should be also checked if this guideline is followed or not.
At last suggestions can be also made for the developer of the code how could it be done in a better way.
It is important that several of these points can be checked by automated code analyzer tools (dead code, naming conventions etc.), it is always a good practice to use such tools.
It is also a good practice to have a common checklist about what should be checked during the review. So that the reviewer can go through that checklist point by point to make sure to not miss anything.
It is also a good practice to make a difference between major and minor findings. Major findings are must to change and minor findings are just “would be nice to have to be changed”.

Possible ways of performing a code review

There are two main ways of performing review: do it online (face to face) or do it offline. The online version takes more time, but it has some benefits.

Online review

Performing code reviews online means that the author of the code sits together with one and more other developers. The author shows the code what he implemented and describes their implementations details and design decisions. The other developers can ask questions and make suggestions at any time.
A protocol should be created, which contains every point of the review meeting.
The big advantage of this way, that the reviewer can understand better and deeper the implementations, decisions can be clarified in a fast way and the author of the code get a detailed and direct feedback.
In case of too many findings the review meeting needs to be repeated once the findings are fixed.

Offline review

For offline review it is good to use some kind of online tool. In this case one or more developers are reviewing the code changes offline on their own at their computer and adds their findings and questions in the tool. Then the author of the code needs to answer the questions and fix the findings. It needs to be repeated again and again until the reviewer does not approve the changes. The advantages of this method are that the reviewers and the developers doesn’t need to be at the same place, they can perform the review in different time and different reviewers can review totally independently from each other. The disadvantages are that the reviewers are not going so deep into the details, in case of a lot of questions it can take long and the author of the code does not get a detailed (verbal) feedback.

Who should review the code?

It is always up to the project. In case of some projects any developer can perform a code review (usually in more agile teams). This is usually the case if the team members are on a similar level of knowledge.
In other cases the review must be performed by some domain experts, technical experts or software architects. Multiple reviewers are always welcomed. This is usually done in structures with a lot of different expert roles.

Summary


Code reviews are important quality gates. The best way of performing reviews are always up to the project needs. But anyway it should have a clear and documented process and documented results. Otherwise performing code reviews can be just a waste of time.

How I prepared my first online course

Since long I didn't publish anything here. It's because I was busy with some other topics, but now it's time to share the result...