4/23/2020

How can COVID change the life of programmers?

During the last months the whole world changed a lot. Something happened that was not expected at all. The schools closed in most of the countries and a lot of courses have been started. Most of the companies changed to home office mode or closed down. Anyway, digital solutions have a high role in the current situation. The companies with a good digital background can survive, the rest can easily fail.
Fortunately most of the software companies have a good digital background. But how will this situation influence the life of programmers in the long term?

Finally we can do home office

At most of the companies the opportunity of home office is a big ghost since years. Even if there are no technical obstacles or they could be removed by a simple IT solution (like setting up a VPN bridge etc.), a lot of companies still had a policy of no home office or very restricted rules for home office (like only once a month etc.). In most of the cases they had the impression that working from home is not efficient. Or they just wanted to track their employees more strictly and easier.
At most of these companies it changed now and they changed to an almost 100% home office mode. Which means most of their employees in most of their time are working from home.
I’m sure that on one hand there are companies and projects who are more successful on this change, on the other hand some companies may fail this change.
The reason for failing can be the lack of trust from management point of view, wrong leading strategies in the company, pure technical infrastructure, lack of experience or lack of motivation from the developer side.
But based on what I’m experiencing and what I heard from others at most companies this change was more or less successful, the teams are working from home with similar efficiency as they had before.
From the developer side there are also different opinions. There are ones who hate working from home. For some of them the conditions are not fulfilled at home properly, others are just too social to do it on a daily basis.
But, at least from the ones I know, most of the developers like this situation from a work perspective. I personally also like it, but I would prefer to work from the office once or twice a week.
The other point I often heard is that some of the developers have difficulties to find the work-life balance at home and they are working much longer than normally. You have to be strict with yourself to manage it properly.

What will happen to our projects?

Another perspective is the perspective of the customers. Since a lot of businesses stopped working during the last weeks, for sure there will be a lot of projects cancelled by the customers. On the other hand there are fields where there's a huge need for software developers: online communication and education solutions, digital solutions for shops and services etc.
So I also expect a lot of new projects coming in the near future. However all of us need to be flexible, it can happen that we have to change our profile a bit and to change domain or technology in the future.

What comes after Corona?

As for now most of the well-paying developer jobs are placed in big and expensive cities and expensive countries.
At these places even if you have a good salary you don’t have a huge chance to have your own house in a calm circumstance with a nice garden, these places are mostly too crowded for that and the prices are too high. Furthermore a lot of developers are working far from their home, just to have a proper job.
In the current situation there’s a good chance that companies will realize that home office work can still be efficient and they can save a lot of costs on that (like renting office space etc.), so they are changing fully or partially to this mode in the future.
I already heard some nice visions from programmers about moving to the countryside or back to their hometown and doing the same job for the same salary remotely.
It sounds great, but I doubt if it could work so easily.
If you take a look at how most big companies are working nowadays: they have headquarters and offices in more expensive countries, near to their customers and they have offices in so-called best cost countries (like India, eastern-European countries etc.). The reason is that it is enough to pay much less (sometimes even around 25%) in the best cost countries, than in the expensive ones (US, UK, Germany etc.). But they still want to have a certain amount of employees who are there in place, who can meet any time with the customer, who can be tracked better, who are near to the fire.
So if you are working now at an expensive and well-playing place and you are changing to 100% home office mode and moving to some nice, preferred place your advantage over the colleagues working in the so called best cost countries will be strongly reduced. So that it isn't worth it for your company to pay you 3-4 times more than for your colleagues working in the low cost offices. So most likely they won’t do it in the long term.
On the other hand the disadvantage of being far away from the headquarter will be also reduced if more and more work is done remotely. It makes no big difference if you are working from home in the next street or 2000 kilometers away.
That means if the home office model will become more and more popular I expect the differences of salaries between the different countries to be reduced in the long term.

How to make the most benefits from the situation?

How can we handle this situation?
First of all I have to remark, that we are very lucky compared to other professions, since our job can be easily done from home, so we are not stuck without incoming for weeks or months. On the contrary, we can save some time by not having to commute to work everyday.
One hand we have to do our best for our current work and current project to show that we are efficient developers even from home office.
In order to do that you have to have a strict daily routine and you may have to try out new tools or new ways of working. For example we started to do only mob-programming sessions and I think they are really useful.
On the other hand in your free time you have to learn something new, so that you will be flexible enough to change if it is required in the future. Take a look at the trending technologies and domains. There are now a lot of online courses available for free or for a discounted price. Do them, it makes you really powerful in the long term!

4/03/2020

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.). Some of the developers also have an idea how to achieve it (reviews, TDD, proper design, proper testing etc.). All these practices need to be collected and followed is a way.
Software quality assurance is something that is on the side of any development, regardless of the development process. Some way of quality assurance is used by all big companies. The goal of software quality assurance is to have a clear picture about the quality and try to reach and maintain a predefined level of quality.

Theory of software quality assurance

Most of the companies have a dedicated quality assurance team or at least one dedicated person who is responsible for the quality of the projects. That means it should be someone who is not involved in the project, who makes no development on that, this person rather makes sure that the development team does everything in the correct way. Quality assurance is involved in each and every step of the development process: planning and tracking of the project, requirements engineering, software design, implementation and testing.
The very first point is to set up rules to be followed by the whole development team: how should a requirement be documented, which level of software design is required in which situations, who and how should review the work, which coding guideline is to be followed etc.
Once it is done the role of the quality team is to make sure that during the project everyone is following the predefined rules. To be able to achieve it the activities should be documented in a clear way. For example, if someone did a review of a piece of code it should be documented in a way, that it can be always proved later that the given version of the given code has been reviewed.
There are predefined software quality standards and frameworks, like the different versions of SPICE or CMMI, which have several predefined rules, but every project and organization is free to set up their own ruleset.

Software quality assurance in practice

Setup rules and performance indicators

In practice the very first step to set up the rules for the development: coding guidelines, testing guidelines, responsibility matrices etc.
Some of them should be introduced right at the beginning of the project. But introducing all of them at the beginning can really go against performance and the success of the project. So some of these rules can be introduced in a later stage of the project.
Some of these rules are pretty binary: either they are followed or not. Like the rules in the coding guideline: “don’t use variable names longer than 15 character”. It is very easy to decide if this rule is followed or not.
There are other cases where the answer is not so clear. A good example is test coverage. Most of the projects require unit tests, but it is not needed that each and every line is covered by these tests. In these cases so called key performance indicators (KPI) should be set up. This thing should be quantified and measurable. For example for code coverage there are multiple possible KPI’s: line coverage, branch coverage, etc. It should be decided what is the official measurement method in the project.
These rules can be relevant for any step of the development (planning, requirements, design, coding, testing etc.).

Measure your indicators

Once we know the rules to be followed we have to figure out a way to measure them. The best way is if we can automate these measurements by some tools and integrate them to the continuous integration system of the project. So that you will have continuous feedback about the state of the project, you can follow how its quality changes. It is good practice to introduce these KPIs to the whole team. Most of the tools which can do the measurement on different KPIs are easy to integrate, in other cases you can use some scripts to do the job.

Setup goals

Once the KPIs are measured and known by the team setup some goals. Like “the code coverage should reach 80%” or the number of compiler warnings should be 0, every component has to be linked to requirements etc. Let the team know these goals and let them work on them. Give regular feedback to the team about the distance from the goals and the achieved changes. It can be done by daily report emails. All these goals need to be documented in a clear way.
The most typical goals are the following:
  • Design has to be linked to requirements
  • Code needs to be linked to design
  • Positive review should be done before merging
  • Test should be linked to requirements
  • Coding guidelines should be followed. (for that a proper coding guideline is required)
  • Code should be covered by tests
  • Memory assumption/runtime should be in a dedicated range
  • The piece of change (commit) should be connected to a ticket in the ticket system
  • Tickets in the ticket system should be connected to requirements

Setup gates

Finally, you can set up some built-in gates to the CI system. That means it doesn’t allow to merge code which is violating any of the rules, like: contains compiler warnings, failing some checks, not covered by tests, has failing unit tests etc. This can reduce the speed of development, but increase its quality.
In general too strict rules can be against productivity, pay attention! You should always pass the rules to the project needs. So most likely the expected quality in case of a mobile game will be much lower than in the case of an aeroplane software.

Summary

Quality assurance is nothing complicated. I tried to describe it in a practical manner and not in a principled way. But one thing is important: you have to be strict, the rules which have been set up, need to be followed.

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