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


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.


How to understand the managers?

All software developers need to corporate with managers and it also helps a lot for you carrier to have a good relationship between you and your managers, since mostly the managers can decide about your promotion, salary, project etc. Quite often the personal goals of a developer and the goals of a manager are going against each other and that means conflicts between managers and developers. To avoid such situation as first step all developers need to understand, responsibilities and goals of managers. By using this knowledge you can get better results from the discussions with your managers.
First see really briefly what are your main goals as a developer: you would like to have enough time to work on your tasks in a comfortable way, you would like to use the most modern technologies and try out all your ideas, you would like to participate on technical trainings, you need a good salary and good work-life balance. Most of these points costs money for your manager, but you can ensure all managers about your needs if they can see that it is beneficial for them as well.
As many companies so many different manager positions with different role description. I would like to focus on two main type of managers: the project manager, who is responsible for a project or subproject and the team manager who is responsible for a developer team. In some cases the two responsibility is owned by the same person. In other cases these roles have a different name. And of course there are other manager roles, like sales manager, but most of the cases they have less connection with the developers.

The team manager

The team manager has a team of developers. Usually the team manager’s responsibilities are the followings:
  • Find the right team members (do the interviews etc.)
  • Support the integration of new team members to the team
  • Monitor their performance and skills
  • Let them improve their skills in a defined direction based on project needs (for example sending them to trainings, find a proper mentor for them etc.)
  • Provide the right developers with the correct skills and experience to the projects
  • Collect feedback from project managers
  • Do regular feedback sessions with the team members
  • Setup goals for the team
  • Organize off-work programs for the team
  • Do decisions about salary changes
  • Decide about holiday requests
  • Remove the members from the team which are not fitting well into the team
  • Regular feedback to the high management about the results of the team
That’s a lot, right. And to be able to do that the team manager needs to have a technical overview to identify the needed skills and good interpersonal skills.
There is one more important thing: most team managers has its own budget. That means the team manager is also responsible for some money. Here the incoming is from the projects achieved by the team. For example if the team is finishing with a milestone of the project there’s a predefined fix price coming to the team budget.
The costs are the following: salary of the team members, training costs, costs for equipment (computers etc.), cost for the office (rental fee, coffee etc.), costs for off-work programs etc.
Until the incoming is more than the costs everything is going well, otherwise the team manager will have certain issues. The project prices are usually designed in the way that if the team can achieve the projects within the planned time frame the team has profit and everything is fine. This will happen if well-motivated people with the right skills are working on the project. If you are in such a situation (you are working effectively and successfully on your current project) you will have a good chance to get higher salary. Or for example if you can prove that taking part on training is making you more effective on your project then you have a good chance to be sent to that training. Otherwise not, your manager won’t pay for a training which if not making your daily work on your current (or upcoming) project more effective.
Let think about situations like ramp-up time of a new team member. This is something called overhead, it costs a lot (salary, trainings etc.) but doesn’t earn money directly. Such periods need to be planned as short as possible. That’s why for example changing projects too frequently is not a good idea.
As summary: the goal of your team manager is to keep the budget balance in positive, so what ever you are asking from him need to refer to the fact that you work producing a good money for the team in the past or the investment would make you able to produce more money in the future. Of course it is not the best idea to use these words, but you should keep these thoughts in your mind.

The project manager

The project manager is responsible for one project or subproject. The goal of the project manager is to make the customer satisfied and to make the project beneficial for the company. So the tasks of a project manager are the followings:
  • Regular communication with the customer
  • Create time planning for the project (including main milestones, etc.)
  • Create cost planning
  • Create resource planning of the project (how many developers with which skills are needed in the different periods of the project)
  • Track all progress in the project
  • Regular reporting to the high management
  • Organise the project meetings
What is important here: it is not a goal for the project manager to make you happy. His goal the reach the milestones in time. If overhours are needed for that the project manager doesn’t mind. If you are not working well the project manager will send a request to the team manager for an other developer. The goal of the manager is just to keep the plan.
The project manager is also responsible for the project budget. From cost point of view it means: the incoming is the paid price by the customer. The costs are the money paid for team manager for the work of the developers, the costs of the meetings, software licences and the travel costs.
So if a project manager asks you to do overhours he is just trying to achieve his personal goal. On the other hand it is good to have a good relationship with the project manager, because he is giving feedback about your work to the team manager, which can strongly influence your career. To be able to achieve a good relationship try to help him at planning phase with estimations which are as good as possible and then try to achieve them.

As summary it is good to have a good relationship with your managers. Never forget: without them your wouldn’t have a job, they are also part of the big machine, just like you. To be able to have a good relationship always try to understand their goals and try to support them to achieve these goals. That’s the best what you can do.


How to choose the right comapany for you?

To choose the right company for yourself can be really difficult, because each company is different. Of course it makes sense to read the evaluations of companies on websites like glassdoor or ask people who are already working there. But as a first step you need to figure out what kind of company are you looking for.

I tried to set up four main categories of the software companies. Not all the companies are fitting 100% into one category, some of them are overlapping between multiple categories. I tried to cover the four most typical type of company, describe how are they to working, what are the advantages and disadvantages of them. This is mainly written based on my personal experiences and experiences of friends.

Let’s see the four big categories:

  1. The multinational company

There are several well-known multinational companies all around the world which are working with software developers. Their main focus is not always just software development. Most of these companies are well-known, so if someone is asking you where are your working you can proudly tell the name of the company and everyone around the world will know it.

These companies are usually to really directed by one person, in a lot of cases the one who established it already died years ago. The same company is usually present on multiple continents and in multiple countries. Some of these companies were either startup or family business at the beginning.

Advantages of at a multinational company:

  • Salary over the average
  • Connection with people all around the world
  • Well-defined processes
  • Good opportunity for specialists to go deep into a topic
  • Option for travelling
  • Good company events (Christmas party etc.)
  • High variety of trainings
  • Long future at the same company


  • High bureaucracy
  • Quite often it is difficult to change to new technologies and new topics
  • Usually the work is done in big open-offices, which can be stressful
  • Strict due dates
  • To high manager/developer rate
  • Often not enough space for new ideas (you need to use what is already done)
  • These companies are often stucked to 20 years old code base

  1. The startup

A startup is a new company with a new idea. At the beginning it is usually financed by sponsors. The successful startups will either become a multinational company with time or they will be simple bought by an already existing multi. The unsuccessful startups will either just go into dept or they will stay as family business.Working at a startup is in my view a bit more than a normal job. You need to believe in the goal of the company and you need to do everything for that.

Advantages of working for a startup:
  • New technologies
  • Great technical challenges
  • Big freedom
  • Interesting product


  • Uncertain future
  • Less focus on work/life balance

  1. The consultancy company

A consultancy company is a software house which is overtaking projects of other companies (most of the cases it is a multinational company). If you are working at such a company you will change your projects frequently, you will work with multiple technologies and multiple code bases. Most of the cases communication with the customer also belongs to your tasks. You can learn a lot of technologies, but the constant changes can be stressful after a while. Your freedom on technical topics can be limited by the customer (you won’t be allowed to make bigger decisions).
One of the most difficult issue for the leaders of such companies is to be flexible enough. Just imagine: your customer which was using 10 of your developers for a project just telling you that from next month you need only a team of 4 developers. You need to plan something for the other 6 developers urgently. Or other way around: all of you developers are busy with projects and a good opportunity is coming where 10 developers should start from next week. This is challenging.

Advantages from developer point of view of working at a consultancy company:

  • You can learn multiple technologies
  • You can get connected with a lot of people
  • You have always new challenges
  • You can work for multiple companies without changing employer


  • Frequent changes can be stressful
  • It can happen that you are sitting without project for a while
  • Most of the cases you can not go deep enough into topics

  1. The family business

Not all the companies in this category are really a family business. I mean here the mostly smaller companies which are working on one product or service for long time which has a certain amount of users. The company is not taking big risks and not investing too much into new products, they are just doing the same thing since long. It can be either some web application (like creating really similar webshops) or a mobile application (again nothing really special) or anything else. It is also typical for such companies that they are using some older technology which is working well, so they are not changing it. These companies are usually not really growing. It is ideal for people who doesn’t like stress.

Advantages of working for such a company:

  • Less stress
  • No needed learning curves
  • Good work life balance
  • The team is like a family


  • It can be boring to work there
  • Not all of such companies can survive nowadays
  • No opportunity to build a real carrier

I hope you could get some info to start to figure out which type of the companies is really for you.


Typical software developer collegaues

As I worked for multiple companies and get known more and more developers, after a while just got the feeling at new colleagues that “hmm, I know his style”. Normally I strongly against categorising people, but I think there are typical software developer characters and they are appearing at almost every company.

  1. The workaholic
    The workaholic has no private life, no family, no hobbies. The workaholic is just living for the company. He is the one who is staying long in the evening and who is also working during weekends, even if it is not really needed. The workaholic always reminds you that he’s working a lot, like “yesterday I was in the office until 11”, “oh, I was working all weekend long”. On the other hand the workaholic is always tired and most of the cases he is not working in an effective way at all.
  2. The antisocial 
    The antisocial is mostly a good programmer, but only in topics to be done individually. Team work is totally not for the antisocial. The antisocial is arriving to the office in a sneaky way and hopes no one will realise him. The antisocial is taking a brake only if no one else and he is just disappearing during lunch time. It is a challenge to work with the antisocial, because he can never tell you clearly what he is working on and what is his status, you are just getting the results randomly.
  3. The demotivated - type 1
The first type of demotivated is quite often sitting in the kitchen and telling speaking loudly about how much he hates to work for this company and how shitty is his current project. Normally the first type of demotivated is good at programming and instead of his demotivation he is doing his job on the project, he is trying to do his best. But never forgets to tell to the colleagues: “I hate this project”.
  1. The demotivated - type 2 
    The second type of demotivated has only one goal: survive the day without any productivity. And survive every day without any productivity. This strategy is working well: he is working so slow that after a while he is not getting any urgent task. After a while he will be moved new projects, but by following the same strategy there he can still avoid all kind of work successfully.
  2. The bullshitter 
    The bullshitter likes to participate at meetings and talk a lot there. The bullshitter has always ideas and that’s not a problem at all that they are totally not realisable. The bullshitter can talk about any technology and any project, even if he was never working with them. Pay attention: the bullshitter will never work on his own ideas and it has a simple reason: he is not able to work on them.
  3. The life long junior 
    The life long junior is simple not learning and not getting better. Whatever he is learning he is forgetting it as fast as possible. The life long junior need a long clarification each and every task, even if he already did the same 5 times. And the life long junior is not changing, it is the case after 1 year, 5 year and 10 years.
  4. The careerist 
    The careerist has a really good relationship with his manager. And not only with his manager: with all manager around. Even with the ones which have nothing to do with him. To build such relationships the careerist is taking the half of each day in the smoking area. After that he is joining all management meetings. The careerist is having only one goal: getting a higher position as soon as possible and usually it is successful. It’s no goal for the careerist to collect any technical knowledge.
  5. The geek 
    The geek is programming not only at work, but also at home in his free time. The geek has hobby projects at home. The geek knows and uses the newest version of every environment and hardware. Whatever tech support you need just ask the geek, but don’t be surprised if you are not understanding any word from his solution. Furthermore the geek is using only console applications and hates all GUI. The geek is always a good partner to talk about new technologies, but don’t try to talk with the geek about anything else.
  6. The shy 
    The shy thinks that he’s worse than the others, even if it is not true. So the shy is overtaking all the shitty tasks and is doing them as good as possible. Sometimes no one knows what is the source of the frustration of the shy colleague. But most of the cases he could reach much more if he wouldn’t be shy.
  7. The faithful 
    The faithful is faithful to the company, he is working there at least for 10 years. Most of the cases it was his only working place in his life. The faithful knows everything about the company and the history of the company. The faithful has a lot of good stories about ex-colleagues known by no one else in the team. The faithful also knows everything about the used technologies at the companies and all about the projects. But the faithful knows nothing about that what happened outside of the company in the last decades, don’t ask him about any technology not used at the company.
  8. The philosopher 
    The philosopher is reading at least one book before starting any task. Even if it is a Hello world he will find a book about the topic and he can not start the task without reading that book. The philosopher is analysing all possible solutions with it advantages and disadvantages before writing any line of code. Most of the cases the preparation for the task takes ten times more than the implementation.
  9. The promising one 
    The promising one is just a fresh colleagues from the university. The promising one is not talking too much, but has interest for every topic at the company. He is doing all his task and continuously learning something new. The promising one needs to pay attention: if he is not managing himself well enough in a short time he is going to be someone payed as a junior and working as a senior. It is a win situation for the company and a loose situation for the promising one.

Of course not everyone belongs to any of these categories, some of the people are also a mixture of two or three of them. I still think that it is good if you can identify yourself and your colleagues to be able to handle them better in the future.

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