2/28/2019

Efficient home office

One big advantage of working as a software developer is the possibility of working from home. Although it is possible practically most of the companies does not allow to do it for all of their colleagues and there are also many developers who doesn’t like to work from home. The companies are usually arguing with non-trackable and not effective work and with pure communication. The developers has often also problems with the same points and they also think that is a bit depressing to work always from home.

My first experience with home office is coming from right the beginning of my career. It was the last semester of my bachelor studies. I only had to go once a week to the university, the other days I was just working on my thesis, which was a software with documentation, and next to that I was a trainee at a small company, where I was working in remote mode. I got my tasks and once a week I needed to present my results. So I had two big topics to work on from home and my time schedule was really flexible. First I thought it will be a really great time. After some weeks I realized that it is not good at all. In the morning I didn’t wake up in time, as I woke up I didn’t start to work, I rather watched some series. I started to work just right before lunch, then I got hungry soon, so I took a long lunch break. In the afternoon I tried to concentrate on working again, but most of the cases some friends just called me to go out somewhere and I could never say no for such invitations. So I went out until late, thanks for that next morning I couldn’t wake up again. Usually the day before my meeting I realised that I didn’t have any progress, so I was working all night long. Some week before the due date of my thesis I also realised that it’s not in a good shape at all, so I was working all weekends long on that. After a while I was totally stressed, because I always had the feeling that I should work. Next to that since I had a lack of experience I often faced with technical issues and since there was no one around who could help, it took me long hours to find a solution or I needed to wait until the next week meeting and in the meanwhile I was totally blocked. All things considered it was horrible.

After this experience I tried to avoid to do any home office, I was rather in the office until late or requested for a holiday if I had any issue at home. The years flied and 5 years later I found myself in a totally different situation. In the meanwhile I collected a good experience in software development, I became father and with that I also changed my lifestyle. At the company where I’m working I had sometimes chance to do home office and in the previous time I did it a lot. At the beginning I felt myself a bit uncomfortable at working from home, but it changed, now I really like to do it and I realized that I’m more effective at working from home as sitting in the office. But to achieve it there are some points to follow.

  1. Do follow a preset daily working time
    As normally you have any kind of working time what you are following (like you are arriving at 9 and working until 4.30 in the afternoon) set up your working time at home as well. You can save your daily travel time, it is already an advantage. So let’s decide that for example you start to work at 8 o’clock. Then really wake up at 7.30, have your breakfast and start at 8. Be strict to yourself. And let’s concentrate on working until the end of your working hours. Out of your working hours be also strict to yourself: do not work. That’s needed to be able to make a difference between your professional and private life.



  1. Do have your proper workplace at home
    This is the point what I couldn’t achieve in our current flat, but it is also needed. You should have a seperate working place at home, the best if it is a seperate room, where you have your desk and a proper working environment with all your needs: good chair, big monitor, sunlight, proper temperature etc. Be here during your working hours and don’t be here out of your working hours.

  2. Change your clothes

    Of course it’s nice to be whole day long in your pyjama, but in that case you have the feeling that you are at home and not at work. Change your clothes. Of course you don’t need business outfit at home, but at least take a T-Shirt and trousers.

  1. Your family needs to understand that you are not at home, you are at your workplace.

    It should be also clear for your family that you are not at home during your working hours, even is physically it is not true. You don’t have 2 minutes to help, you can not answer a short question and you shouldn’t be disturbed.

  2. Keep on communicate with your colleagues

    It is also important not to be totally isolated from your colleagues. Keep on communicating them with some chat client or through phone. It is also good to have a daily status meeting which is done through phone. With that you and your colleagues have the feeling, that you are not working alone.

  3. It is not working without enough experience

    The other thing I realized is that as a junior programmer at the beginning of my career I got stucked really often. That time just googling did not mean always a fast and working solution. But to ask a more experienced colleague helped really fast most if the cases. From home you can of course write to your colleagues or call him. You can also use a screen sharing application. But it is simple not so effective. That’s why I don’t suggest working from home for juniors.

  1. Set up your daily targets

    It is also a good strategy to set up your daily target in the morning, what you would like to achieve until the end of the day. Don’t stop working before achieving it. In this way you will be really motivated in concentrating on work. You targets should be realistic, so doable, but not to easy.

  2. Schedule your breaks

    If you are working in the office you are also taking breaks: going out to the kitchen to drink a coffee, chat with your colleagues etc. At home you also need breaks at work. I would suppose to stand up from the computer during your breaks. But you can use it as an advantage and you can do some house work during this time: bringing down the trash, do the washing up, put the clothes into the washmachine. Since these activities are much different than sitting at your computer it will be good to do them and as an advantage you won’t need to them after work.

  3. Don’t do every day home office

    Working every day from home can be really depressing on long term, which leads to losing your motivation. My suggestion is to work 2-3 days per week from home, otherwise work from the office, if it is possible. It makes you able to keep networking with people from personal and professional point of view and it is keeping some routine in your life.


2/21/2019

How to measure the productivity of a developer?

How to compare the productivity of developers? Is it possible at all? Is the more productive developer also a better developer? How do increase your productivity? These are all topics for this article.

Why does it make sense to measure the productivity?

Let’s start at the beginning. Why would anyone measure the productivity of the developers? I think it all comes from management side. The management needs to have countermeasures. The management needs to know how good, how productive are the developers to decide about salaries and promotions. And of course the goal of the management is to increase productivity, but how could they prove that they are successful in this field without having a clear measurement methodology? One of the definitions of productivity is result per time. But can result be quantified? The sales team needs to quantify the results to be able to set prices for tasks and projects. Can they do it in a trivial way?
I think the answer is for all of these questions. It is not possible to quantify productivity and result. If you are telling the programmer A is more productive than programmer B that is only your personal opinion, but nothing objective. Let’s see why I am thinking like this.

Measurement methods

There are several measurement methods for productivity I read about or I experienced. I’m trying to list them and show one by one why are they not really correct.
  1. Lines of codes / day
    I think this is the easiest one to prove that it’s totally bullshit. I can implement the same feature in 100 lines, or in 10 line by using the built in functions of the environment. From quality point of view reusing already working and tested features is much better, than reinventing the  wheel, but it can take more time to figure out which functions are to be used. So if I’m choosing the 10 line solution I’m pretty sure that my LoC/day will be less, than by choosing the first solution.
  2. Number of commits / day
    A commit can be small, a commit can be big. A commit can be trivial or can be difficult. Sometimes it takes days to find the root cause of a bug and to fix it I just need to modify one line and push it in one commit after long days of investigation. Other days I’m implementing small and trivial new features, pushing one feature per commit and I can implement 4-5 small features one day. Am I unproductive at bug fixing? I don’t think so...
  3. Achieved features / day

    This is also connecting to the previous point. Sometimes to implement a new feature no investigation is needed, can be done fast, sometimes it takes long days to figure out how a new feature can be implemented in the current environment. And a user of the program can not see the difference, sometimes easiest features are the most valuable ones for the users.
  4. Estimated hours / used hours
    It is also a popular strategy that someone (the developer himself, a technical lead or the team together) is doing a time estimation on the task and later on this estimated time is handled as target. So if you are achieving the task faster than the estimated time you are very productive, if it takes longer you are unproductive. What is wrong here? Who is doing the estimations? If the developer himself than he just need to overestimate everything and he will be the most productive programmer of the world. If a technical lead did it or the team together the situation is a bit better, but in a lot of cases, especially if you don’t have deep knowledge about the code base it is not easy at all to make estimations. I often face with issues, which were not counted at all and takes long time to solve them and it also happened multiple times that I expected a task to be really difficult to achieve and I found an easy solution in one hour. In this can it is again not really about productivity, rather about luck.
  5. Earned money / day

    This method is mostly used by freelancers. They are just measuring their productivity in earned money / day. Well if you are encounting money as result than it is correct. But what about days when you need to reinstall your working environment or learn something new? You are not earning anything, but you are working hard all day around. Are you an unproductive developer on that days? No I don’t think so. Or what is the difference if you are developing the same feature for an open source project or for a well-paying customer? Does it make any difference in your productivity? No, it doesn’t.

Connection between productivity and quality

Another important point is the connection between productivity and quality. I think that is common that none of them can be quantized. You can not prove about the quality of your work that it is better than the quality of a colleague. Simple there are too many perspectives.
But what I wanted to say here, that it is faster to produce a code with worse quality: don’t think about tests, code maintainability, documentation etc. For sure you will be faster (more productive) on that one task. But later, when it needs to be extended, or a bug is appearing you will losing all your productivity at figuring out the shit what you have written. You need to find a compromise between quality and productivity.

Productivity of team vs. productivity of an individual

Most programmers are working in teams, but does it make sense to measure the productivity of individuals in this case?
Let me make an example: during the last days I was working from home, I finished much most tasks as I could finish in the office. But after two days my colleagues started to call me, because they had technical issues, which were blocking them. So until I was personally mega effective my teammates were blocked, because I was not there to help them. The summarized productivity of the team was bad due to this issue. If I’m supporting the team mates then my personal productivity will be worse and the team productivity will be higher. That’s why I think measuring of productivity on a personal level is really counterproductive. It motivates developers to support their colleagues what is making the whole development slower. I measurement of productivity is needed, please do it on team level!

What are the influencers of productivity?

The productivity depends on thousand of things. I won’t be able to give the whole list, so I’m just mentioning the most important ones: the developer needs to have the right technical knowledge for the tasks, good experience on the piece of code, a good working environment (good hardware, calm environment), unnecessary meetings and communication should be avoided, good mental state is needed and maybe one of the most important point is the motivation. This topic is such complex that I will write a seperate blog post about that.

Summary


As you can see productivity is a really difficult, but also important topic. I would suggest to avoid quantifying productivity and if it is a must to do it, rather do it on team level, than on personal level.

2/14/2019

Possible career paths as programmer

During the previous weeks I was writing a lot about the career possibilities of programmers. First in the article “How to choose the right company for you?” I tried to give on overview about the different kind of companies. After that in “Levels of freedom as a programmer” I wrote about the opportunities of independent working as a programmer. This time I would like to summarize the career opportunities as an employee inside a typical company.

If you are working at a company and you are developing yourself and getting better and better sooner or later you will reach a point where you need to choose the direction of your carrier. These career paths are existing at most of the big companies, however it can be that they have a different name. If identified three main career path: team manager, project manager and technical expert. But next to these three I would like to mention about some less other possibly positions as well: these are the quality manager, technical sales colleague and the trainer. I identified these ones as main orientation opportunities. In case of smaller companies it can be that these are not strongly separated. I also tried to give a short description to each of these positions to help you to decide which is the most fitting one for you.

The technical expert

The usual development of a programmer is something like: junior developer, senior developer and what is coming here? Usually this is the point where you need to decide if you would like to keep on programming or rather concentrating on something else. If your decision is next to programming then technical expert can be a good path for you. Technical experts are often overtaking the role of software architect as well. That means they are designing the new software modules and taking the whole development under control from technical point of view: doing code reviews, supporting technical decisions, supporting other colleagues in technical problems. Quiet often technical experts are also going deep in one topic and getting real experts in that field and supporting colleagues in the special field all around the company world-wide.
But you need to know that technical experts are also not coding all day long: they need to attend several meetings, do discussions with others, support the project managers etc. If you would like to stay technically deep in the topic this is the right path for you, but don’t forget: next to great technical skills you will also need good soft skills.

The project manager

About the role of project managers I have already written in article How to understand the managers?. They are responsible for time and cost planning and tracking of the project. They are communicating with all the stakeholders (customer, high management, developer team etc.) and they are creating a lot of documents (mostly plans and reports). They need to attend usually a lot of meetings. The life of a project manager is typically stressful, since you are responsible of a whole project or subproject. You will need really good communication and stress handling skills. The most typical programs you are using for your work will be Excel and PowerPoint. Usually the project manager is not deeply involved into the technical topics, but it is useful if the manager has a rough understanding of the technical aspectives of the project. At the beginning most likely you will be only responsible for a smaller subproject, but later on you can either overtake a project or all projects of a specific customer. In this case you won’t have any direct connection with the developer team anymore.

The team manager

About the role of the team manager I also wrote in article How to understand the managers?. They are responsible for having a technically fit, well-motivated project which can successfully overtake all projects. For that a team manager needs to attend interviews, 1:1 meetings with the team members, need to define a vision and goals for the team and track them, next to that it is also needed to be in connection with the project managers and with the higher level management. What I see here as the biggest challenge is to communicate in a way with all of your team members which is giving the a good motivation and inspiring them for self-development and for a good quality work. For that you will need really good interpersonal skills. Although the team manager is not deeply involved into the development it is also needed to have a high level understanding about what the team is doing. If you are choosing this direction most likely first you will be responsible only the a small part of the team (5-6 persons), later for a whole team (15-30 persons) and later on you have chance to step one level higher and be responsible for a bunch of teams or a whole department.
If you think you can resolve all conflicts between people it is the right choice for you.

The technical sales colleague

The sales of a software company is responsible for extending the business of the company. To find new opportunities and new projects. Furthermore to figure out the correct price for the projects to be done. For that kind of activity they will need some technical support who can identify the technical strength of the company, who can understand the technical content of project opportunities and propose further features and who can do a good high level estimation of needed development time and needed skills for the projects. These are usually the tasks of a technical sales colleague. If you have more interest in business, but you still want to use your technical knowledge this is also an opportunity for you, however this as a career path is not highlighted at most of the companies.

The quality manager

The quality manager is someone who is responsible for the quality of the products. To be able to do that the quality engineer needs to support the optimization of the development process and take care about that that all developers team are following the process, especially its quality related parts (reviews, documentation and testing). To be able to do that the quality manager is in connection with different development teams usually through the project manager and regularly control the project documents. For this position you need to be precise and quality oriented enough.

The trainer


Most of the big companies have their training sessions for the employees. They are either done internally by colleagues of the company or by an external company. In both cases these trainings are held by professional trainers. The topic of the trainings can be either technical or soft skill oriented (communication, time management, stress handling etc.). This is also an opportunity to orient yourself into this direction and become a professional trainer. It is not taking 100% of your time in every cases, so you can do it next some other activities (like next to being a technical expert).

2/07/2019

Levels of freedom as a programmer

As developer we are different and we like different kind of challenges. Some of us likes to concentrate only on the technical part of the development, other ones like have an overview on management, sales and marketing topics as well. Up to that what you prefer you have several opportunities to be employed. The scale is wide: from the absolutely employee status until leading your own business. But between them there are several steps which are maybe fitting better for you. In common what I can tell that there are ways to be employed with less freedom. In this case your tasks are simple given to you and you have a fix salary. And there are ways to be employed with more freedom. In such a situation you are also responsible to find the next projects to be done, to find new business, sign new contracts, to communicate to the customer and you have much higher level of responsibility for the successful delivery. Usually in such cases you need to handle multiple topics (development, management, sales, marketing etc.) in the same time, you have a higher risk, but you can also achieve a higher salary. In this article I’m describing you what are the different steps of freedom as a programmer and what are their advantages and disadvantages.


  1. Internal developer at a product/service developer company

    I think this is the most comfortable option for the ones who would like to concentrate on the pure development. You are working for a company on their own product or service and that’s it. As advantage you have a fix monthly salary and fix amount of payed holidays. Independently from the success of your projects you get the same money. You don’t need to deal with project contracts etc.That also means that even if the product is really successful and it is earning a lot of money for the company, you are still getting just your salary and maybe a small bonus, which is absolutely not as much as the benefits of the company. So in this case you have low risk, low possible maximum profit. In this case your company is taking the risk (risk of you are producing less as your costs).


  1. Working as external for a product/service developer company

    In this working model you are employed by a company, which has a contract with a product/service company. You are working there like the internals of the company, so you are working in their office, together with the internal colleagues of the company, there are certain tasks assigned to you. The product company is paying on a time base for the employer and you have a monthly fix salary. So from salary and holidays perspective it is the same as working directly for the product company. The only difference is that you can be any time moved to an other company to work, based on the needs of your employer. That’s a good opportunity to get familiar with different technologies, processes and working cultures. It is also a good chance to extend your professional network. Here you are still working with low risk for not such high salary. In this case the company contracted with your employer is taking the risk, since your employer is payed time based.

  2. Working at a consulting company, developing service based for different customers

    In this case your work is provided to other companies by your employer, but your employer is not payed on time base, but on result base. The price can be paid after each small task or after a whole project. You are always focusing on one project, you are not in every case onsite at your customer. You may work in a team of colleagues employed by your employer. Up to the working culture of your company you can also take part in searching for new project opportunities. You still have a fix salary. In this case you are typically changing projects often, you are working on different topics for different customers. Your risk and potential profit is still low, your employer is taking all risk. In this case your employer is taking all the risk. I think it is a really good position to learn about business without taking any risk. It is a good step before starting your own busies.

  3. Working time based as a freelancer


For me being a freelancer means, that you don’t have a long term contract with a company, you are always just signing contract for a shorter period (some months) or for a project. You are either working at your customer on site or from home. One way of this kind of working is to be payed time based. So you are signing contract for a fix period and for fix price. In this case still the company is taking the risk, but you need to always looking for new projects and for that you need to have a really good reference. That means your previous customers needs to be really satisfied with you to be able to win well-paying projects. To reach here a good salary rate you need to be really good in your area and you need to build up a good marketing for your self. It’s good to take part in open source projects, networking on social portals and technical forums, write your own blog and to write technical articles. Pay also attention on the fact, that in this status you don’t have payed holidays or payed sick leaves and you need to take the costs of all you hardware and trainings. You need to calculate with these costs.


  1. Working as a freelancer result based


The next step of freedom is to work as a freelancer on result basis. That means you are asking a fix price for finishing a certain project or task. If you can achieve it fast you can have a high profit, but if you are going out of time you can also have a really bad profit. In this case you are taking all the risk, but that also means if you are good you can reach much higher profit than as a normal employee. Marketing yourself, networking and searching for new projects is also part of your daily routine. In this case you are usually working from your home or from your own office.

  1. Working as a freelancer on your own product

    The idea is here to figure out your own product or service which can be for example a mobile application or anything else. Develop it and try to sell it. In this case your risk is really high. It can happen that your product can not been sold at all, so you are working a lot for nothing. But it also can happen that with a pretty easy program you are earning millions. Just remember on AngryBirds or Facebook. In the case you need to concentrate on topics like marketing, market researching etc.

  2. Leading your own company
The highest responsibility is of course if you are not only responsible for your own work, but also for the work of others. That means if you are building up your own team or company, the company can either build an own product or work for other companies on time or result basis, but you are the one who is responsible to sell their work in a well-profiting way. In this case usually you are not really working as a developer anymore. You need to really focus on sales, marketing and management topics.

Hopefully all of you will find the most fitting way of be employed and if you are getting bored from the current working mode feel free to do a change in your career any time.

Software quality assurance in practice

Introduction Every software developer has some idea of a good quality project (bug free, fast, easy to adapt, readable code base etc.)....