I feel that a lot of people (including me) sometimes underestimate the choice of company to work for when that moment comes to pick one. We usually spend 1/3 of our time working and if the match is not close to perfect, dissatisfaction looms quite fast.
So i decided to share some personal impressions on what to be looking for:
Service or product company?
If you work in a service oriented company, you will probably see many projects in short time span which is good as you gather experience fast. You will practice your communication and team skills intensely. However, chances are that the domain will be very similar from project to project – usually companies are specialized in some area or they have repeat customers that require 90% the same stuff as before. Product companies use much larger toolset of technologies, especially if the product is big – you may be doing web, mobile, desktop etc., while in the service company you may be doing only one of the above most of the time. Product companies are also not that tight on deadlines and quality is much higher (they do their own software!). They are usually more stable and rich. Sometimes you will face , however, the five screens problem – you will watch 5 screens for years but that is not that scary as sounds. So in the beginning of your career, service companies are good as you gather experience and confidence fast but if you want to become good software engineer, you should aim at product companies in the long term.
User or enterprise market?
If you want job security, more structured process and probably more money – go with enterprise. That comes with legacy technology, however. Most big companies are reluctant to switch technologies. There are many corporations that use only IE 6-7 so if you work in web, you will have to target those browsers which is a nightmare.
On the other side, if you are in a user oriented company, chances are that you will use latest and greatest. You will have more freedom to experiment, but you will also have to chase trends like crazy. Lagging behind means “death”. So working in that kind of atmosphere may be strenuous, chaotic, unstructured sometimes.
This one is more of a personal preference so i cannot recommend any of the above here.
Big or small?
This one is also matter of preference – but i would suggest you to stick with small companies – up to 50 people. There are some exceptions of course. In a small company, you will see much more of the whole process. You will realize that software companies are not all about writing code. In fact, that is less than 50% of the business process. You will have a chance to communicate with decision makers, managers etc in a direct way which is also a great experience. In a big company, you will probably be part of a team which doesn’t decide much but execute strategies from above.
How to spot good/bad companies?
You can gather great amount of info during the interview with the HR. There you go some signs to watch for and some questions to ask:
- Do Company HRs know what project they are looking people for? If they don’t – that’s bad sign. Nobody looks just for a software developer, they look for people for specific teams and if the hr doesn’t know that during the interview, that means they didn’t do their homework.
- If they don’t make you write code or want your Github repo that’s very bad sign. That means you will be working with people that didn’t write code during the interview also. Interviews like “Tell me what are the principles of OOP” are mock interviews the red light should start flashing.
- Does the team have a QA? If not, that means that the company does value quality that much to pay for a QA. I can tell you that a QA makes a huge difference.
- Does the company have a practice to write tests? What is the test coverage? Writing tests makes you much better developer.
- What is the deployment process? If deployment is usually very time consuming and error prone process. If it is not automated, that is very bad sign – that means that the company doesn’t value the time lost deploying.
- Documentation – is the code documented in any way? I know some of you will say that good code is self-documented but come on. If nobody writes proper docs, being it comments in code, that means that people lack culture of succession.
- How do people share knowledge within the company? – are there any initiatives as in-house presentations, hackatons etc – very very important point here. As a software developer, knowledge and expertise is your main asset. You want to learn as much as you can during your working day.
- Does the company have a work home policy? Technologies are developed enough so that software development can be done from anywhere – there is no reason to be 8 hours in office every day. If the company does not allow that , that means that they probably don’t trust you or don’t have a way to monitor your work. Both are bad signs.
- What is the machine you are working on? What is the chair? Require to sit on the chair even during the first interview. Don’t underestimate that. What is the office like? Make sure that you feel good at the place – you will be spending a lot of time there.