Showing posts with label carrier. Show all posts
Showing posts with label carrier. Show all posts

10/11/2018

Being a specialist vs. being a generalist as a developer

Introduction
It is not easy for everyone to decide which carrier path would be the best for you as a developer, some of the developers know since their childhood in which field they would like to learn and others have an interest in almost everything. On the other hand it is not always up to you in which direction your carrier is going, sometimes your carrier is just driven by the opportunities which are coming. There are lot of different directions to improve yourself: different fields, programming languages, industries and roles. After some years of professional experience you will see for sure which is your direction: choosing one field, one language, one industry and one role and learning everything about that and being a specialist of the topic or working in multiple fields with multiple programming languages in multiple industries and changing between different roles, having a good overview of everything, but not really being a specialist in any of them. Both of them are quite typical and of course it’s not always binary, sometimes you are just half way between being a specialist and being a generalist, yes, life is complicated. But both situations have its own pros and cons, I tried to collect them.

Being a specialist

You count as a specialist if you have on really specific field and you are deep into that topic, but about other topics you don’t really have a knowledge.

Pros

  • A lot of big companies are searching for these people
  • You can reach a very good salary in that specific field
  • If you are finding a position with that in that field then you have very good chances
  • You are much better than most of the people in your field
  • If there are good freelancer tasks in your field, then you can earn a lot of money as a freelancer
  • You only need to be up to date in one topic

Cons

  • It can be difficult to find a position very really your specialisation is needed
  • Sometimes the specialisation is really company dependent
  • If your used technology is getting obsolete, you need to start something new from scratch (like most of the Delphi programmers)
  • As a freelancer the scope of tasks you can overtake is quite limited
  • You are in trouble if you are getting a task where you used use an other technology

Typical work opportunities

  • Senior software developer especially at big companies
  • Freelancer with a specification
  • Research projects at university or at a company or institute

Being a generalist

Pros

  • You have a good wide-range overview on the topics happening in the tech world
  • You can learn new technologies fast
  • You are very flexible if you need a new job
  • You are facing with any tasks you will find a solution
  • At first round job interviews you can do a good discussion about a lot of topics
  • You will find always new challenges
  • As a freelancer you can overtake almost everything

Cons

  • You need to follow the news regarding a lot of different languages and technologies
  • There is not special field where you are the best
  • However it is easy to find a new position, it is difficult to show that you are the best candidate
  • Most of the cases you can not have such a good salary
  • It is difficult to reach the next step of your carrier if you are changing your fields too often.

Typical work opportunities

  • Start-ups/Small companies
  • Consultancy companies
  • Freelancer
  • Start own business

Summary

As you can see both of them have advantages and disadvantages. I’m personally rather a generalist, maybe that’s why I could fine more pros there. I still think that to optimum is somewhere in the middle. For example a lot of companies are searching for people with “T-shaped” knowledge. Which means you are a generalist, but you are a bit deeper in one topic.

So I think it is always up to the person which sounds better. But I’m pretty sure that most of you have some experience in this topic. Feel free to share it as a comment!

9/05/2018

Why are companies not making more effort for keeping good developers?

This today article will be a bit different from the earlier ones. In the previous articles I always try to give some suggestions to solve some problems, but now I would like write about something what I never understood why? Of course I have some ideas how can you as a developer handle the situation but I will write about that an article later.

During my working years I understood a lot of mysterious things how they are working, even if I really did not understand them at the beginning, but there is something what I couldn’t understand and that is the following: why are companies letting to have such a big fluctuation in their teams?

There are many reasons for changing company: no more technical challenges, boring projects, bad working environment, bad connection with the team or with your boss, but there is one reason which is coming up almost always when someone is changing company: the salary. Most of the developers are changing their job to reach a higher salary, but of course in most of the cases it is not the official reason, but it is almost always in the background.

Nowadays there’s a high competition on the market of software developers. Most of the developers has already a salary above the average, but most of the developers are still not satisfied with their salary. At most of the companies you can reach around 4-8% increment per year up to country and company. But if you are changing company you can reach much more. When I left my first company I got more than 50% more at second one. I think no one would tell no for this opportunity. In my view that’s one of the biggest reason for developers are changing companies often.

On the other hand I can see that loosing a developer is a big loose for the company even from financial point of view. The developer will need a replacement, who has similar skills and knowledge. That means normally months of recruitment and interviews with multiple candidates. After finding the right candidate it takes weeks/months to do a rump up for the projects. At this phase support of other colleagues will be needed for sure and sometimes external trainings are necessary as well. And after several months they have a developer who has still less knowledge/experience with the project, but already can work on that.

Let’s make an example:

George is Java developer, with 3 years experience of bank security, he is working since two years on the project and has already a good knowledge base. George is asking his boss to increase his salary by 20%. Based on the salary rules of the company his boss can only give him 8% in that year. After this decision Georg is deciding to change to an other company where he will work on a similar project for a higher salary and resigns from his current company.

The company needs a replacement of George, so they start to recruit someone with similar skills and for the same salary as George had. They are paying the amount of 2 months salary for the recruitment company and George boss himself is taking part on 3 interviews to find the right person. After 2 months they are finding John who is a Java developer with 2 years of experience, but he is having much less experience with bank security. He is joining the company for 10% more as George’s previous year salary was. Since John has a notice period at his earlier company he can start only 2 months later. During his first working months he needs to take part on a bank security training, it costs a half month salary. Additionally he need to do a ramp up for the project, it costs him time and the senior developers who are working on the project needs to support him. John is doing well, after one month he can overtake tasks from the project, but of course he has still less experience than George had, so he needs frequent support from the others.

Let’s see the numbers:

To get a replacement for George, who can overtake his tasks took 5 months (2 month of recruiting, 2 month of waiting for his notice period, 1 months ramp up). That’s causing a late delivery of the project.

The costs during these 5 months where the following:

  • 2 months salary for the recruitment company
  • 0,5 month salary for the bank security training
  • 1,1 month salary: John’s salary for the ramp up month (he’s salary is 10% more than George’s last year salary)
  • Ca. 0,5 month salary: The time of the boss to take part on the 3 interviews and to deal with the recruiting company, the time of the senior developers on the project to support John’s ramp up, time of the HR department for administration, time of the IT for installing John’s new computer with the working environment

That’s altogether costs: 4,1 month salary and the company is getting no added value from that (no work on the project).

The costs for John for his first project year is (12*1,1+4,1)= 17,3 times George’s last year salary.

If George would get his requested 20% of salary increment there would have been no need for John, for the next one year it would have cost (12*1,2)=14,4 times George’s last year salary.

That means with the decision of not increasing George’s salary by 20% the company paid 2,9 month salary more in that year. Did it really worth to the company? I don’t think so…

And now you could tell that it worth on long-term, but after one year John is requesting for a higher salary and the story is starting from the beginning... And I think it was still a lucky situation where the company found a correct replacement quite fast. And it could be even worse: the new colleague is leaving the company after 2 month, because it’s not meeting with his expectations, our simply he can not take over the tasks.

I know, some parts of the example is simplified, but I think it is representing the situation well. Why are companies doing it? I don’t understand. Do you have any idea?

Next week I’m collecting you some tips how to make sure your boss about increasing your salary!

All the best!

RelaxedProgrammer

7/20/2018

How could your manager understand your technical issues?

Talking about technical issues with managers, this is really a challenge, but it is quite often needed.
When is it needed:
  • When you have a really good idea and you need an agreement from your manager to work on that. 
  • When you need more time to finish your task as estimated. 
  • When you need help to finish your task. 
  • When it is technically impossible to finish your task with the current requirements. 
  • When you need to show to your manager that you did something really great. 

Why is it so challenging? However most of the managers never forget to mention that they were developers at the beginning of their carrier, practically it happened in the previous century or in their previous life. To be serious of course they were developers, but it happened several years ago, so their knowledge is not really up to date and they forgot already a lot. On the other hand mostly they were not the best developers, that’s why they have chosen the manager carrier path.
So your first option to present your issue to tell it with every details in the language of developers, like:
“There is a potential memory leak in this class, because there’s an exception thrown in the desctructor before the deallocation of memory.”
Most likely your manager won’t understand why is it a problem at all so he/she will just ask “Is it a major or a minor bug in the system?”, “Does the customer know about that?” or something similar. Additionally he/she will probably feel frustrated. I think that’s not what you want. But of course if you are talking to an other developer or to a software architect this is the right way to tell it.
Second option is to present the problem like presenting it to you grandma who has no clue about programming, like:
“My code is doing what it should, but there is a small chance that something is going wrong.” The answer will be most likely be: “A code shall work always as it should, quality is very important for us, why are you implementing bad quality code?”. And he/she will think that you are totally stupid. OK, still not the expected reaction.
So what to do know?
  1. You need to bring some technical details, but not too much.
  2. You need to describe the technical background, even if it should be trivial for a developer.
  3. You need to make the feeling to you manager that you are sure that he/she is understanding every technical details, like:
  4. “I’m sure you understand that if you are not deallocating the memory it will cause memory leak”
  5. Always start with a short introduction: what you code shall do by requirements, what is it doing know, what is the missing functionality.
  6. Always mention the estimated time as well what you need to fix the issue.
  7. Always mention the benefits of your change from the view of the user, like: the software will run faster, won’t use so much memory etc.
  8. Talk slow and calm, look confident.
An example:
“I need to implement the shopping list functionality. I estimated 8 hours for this task and until now it took 7 and a half. Right now I can add elements to the list and modify them later. I have already implemented the remove element functionality, but when I was checking my code I realised an issue. The issue is the following: an exception is thrown in the desctuctor of ListElement class if the element does not have a valid id. The problem is that the deallocation of the memory is done after this exception and you know, now there’s a risk that the memory won’t be deallocated, which causes a memory leak. To analyse and fix this issue I need one more hour. After this fix the program will work as it shall and the memory usage will be optimal.”
Of course it is not taking one hour, just 15 minutes, but now you can have a long cafe break. And you manager will have an idea about that what you are doing, will have the feeling that you are doing something important and of course you can have some extra time to fix it. Furthermore he/she will have the feeling that you are a good developer who is finding bugs, communicating them in the right way and who is confident in technical work. On a technical level he/she will understand that something was wrong at memory handling and in our case it is enough.
Maybe it won’t work with every manager, but for me it helped a lot in my carrier.

What are your experiences? Do you have any other tips?

Best regards,
RelaxedProgrammer

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