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.
It had been a long time since I really felt I was working on a big challenge, something I could really put my teeth into. This is caused by the nature of most of the issues I was working on, as they were merely small bugs. Besides that I also felt a couple of other problems within the company. Many of those I have already discussed in earlier blog posts. It is a combination of these that I felt the need to search for a new challenge and a new environment.
A challenge many software companies face these days is switching to an agile methodology. Agile has grown a lot since it’s initial start and it is now widely accepted as a good methodology to develop software, and in many cases even better than the original waterfall principle.
As can be expected many companies will want to change the way they work to take benefit of this. However, such a drastic change involves more than one might think. To get a clear view of this, I will discuss the original situation coming from a waterfall based way of working and what the ultimate goal is.
A waterfall approach usually involves many different people/teams, each with it’s own purpose and role, fulfilling one step in the model. Teams are managed by a team lead which fits best in the typical hierarchy of the company. Spending a lot of time in such an environment will create a narrow vision, where each person/team is only focused on their own part. On top of that a common phenomenon is that of “throwing stuff over the wall”, which means that as soon as you are done, you don’t really care about it anymore and it becomes someone else his problem.
How do we transform this to an agile approach where there is more involvement of all the stakeholders? The big difference between waterfall and agile is not that your team becomes responsible for everything, even when using an agile methodology everybody has their own responsibilities. The big difference is that everybody is committed, and a much more interaction between all the different parties is required.
As mentioned in the previous post, software development is a create process craving for freedom, but at the same time should the freedom be limited. In this post I will go a step further and look at why a developer should ‘restrict’ himself, take away a part of his freedom. This holds both if he is working alone, or in a team.
The kind of restriction I am talking about is formalizing the entire software development process. After all software development is still a process and to control and monitor a process we need to have a ‘path’ specified for the process. Only then can we find out what went wrong and where improvements are possible.
If you use an agile method, such as SCRUM, you will likely already have a clear process. This is resembled by all the stages an issue has to go through from being submitted until being resolved. This often includes steps as ‘In Development’, ‘In Review’ and ‘In Testing’, what happens at each of these phases can however vary a lot and it is important to define the responsibilities of each of them. By doing so you will be ‘formalizing’ the process.
The process of developing software involves a lot of creativity from the developer. Some would even say that the software that can be developed is only limited by the creativity of the developer. Whether you agree with this is not important, what you need to realize is that developers are often creative people (in their own way).
The more creativity a process requires, the harder it will object against any form of restrictions. The same goes for people, a very creative person will feel best when he can use his creativity to the fullest. An individual can never have complete freedom in a corporate environment:
- The company needs to be profitable
- A company involves many individuals that need to work together
- Pressure on the individuals to come with results