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.

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...