In my four year carreer, I recently started my third job. This may make me come over like someone who very quicky changes jobs but I never changed job for the money or some other better deal I would get at the new location. I have always decided to leave based on the work I was doing at that time, altough I must admit that in no circumstance I have ever changed to a job that was offering me less then what I had. My quick passage at jobs may sound like switching could have been the wrong choice and that the previous job wasn’t that bad after all, this is what I will elaberate on during this blog post.
At my previous job they were starting up a new project on which many different people from different locations would contribute to. To give you an idea of how distributed the team would be, it would consist of 7 people in 4 different locations. Altough we have come a long way, and communicating with people all over the world has become possible without much effort there still are some problems that could arrise.
Software has a very unique characteristic, you create it once but can deploy it as much as you like. This goes beyond the limitation of other industries such as architecture, manufacturing, etc. In those industries you design it once, after which you can mass produce it, but the production itself has to happen every single time. Software is not bound to this as it does not deal with any physical objects. This makes software a good fit for a product approach, were it not that people have different preferences and like some customisation.
The product we create is a combination of hardware and software, and recently we have introduced the policy of doing a factory acceptance test (FAT) for every vehicle (AGV) that leaves our company. The FAT is meant to make sure that every vehicle that leaves the company works correctly, at least that is the theory because in practice we still have a lot of problems with getting everything working on the customer’s site. The goal of this blog post is to go into depth about the reasons for doing a FAT, the pros and cons and why it is failing for us.
For companies it is hard to have a promotion path for software engineers. Some companies may have the option to promote to a leading role such as a team lead or a software architect. This promotion however contains a complete different role for the software engineer as he will no longer do any of the actual programming anymore. For some software engineers, among which I count myself at the moment, this is not desired, as it is the passion of the actual writing the software that drives us. This however means that some people will always be ‘stuck’ in the same role at the same level.
From this a different type of promotion path was created: the path of expertise. A software engineer with a lot of experience could use that experience and become an expert in some domain, giving him more responsibility for that part and decisions that have to be made. This is often indicated with the levels: “junior”, “medior” and “senior”.
Every company nowadays needs some software to operate, ranging from a public website to an internal shared drive to some 3rd party software for managing finances and customers. Typically this software would run at a server inside of the company but with the rise of cloud software more and more companies allow you to run their software on their servers instead of having to run it yourself.
This is nothing new as most often companies already out-sourced the management of the website to a hosting company that takes care of security, maintenance and availability. Now it is possible to do this for other software as well, but should you? In this blog post I will discuss the advantages, disadvantages and some remarks that must be taken into account when thinking about switching to the cloud.
As a software engineer you often don’t have much impact on the team structure and you just have to deal with what management decides is best. Management however often does not know the impact of team structures on the produced software. Splitting up people in teams will make this separation clear in the code as well simply due to the extra barrier communicating with other teams and code being developed in parallel without much knowledge of each other.
A number of factors that in my opinion affects productivity, quality and performance of your team are:
* Amount of teams
* Number of people in a team
* Skills of the people in the team
* Structure of a team
In this blog I will go over each of these topics and discuss them shortly.