I want to preface this article by saying that it came out of a recent personal experience that I had. I learned some invaluable lessons and I hope you read it to the end and get something out of it for your time.
Three jobs and several years into my professional career, I feel like I have come a long way and learned some valuable lessons .
The most important of which has prompted me to write this article today.
See, in my employment searches, I’ve always focused on which tech stack a company used or if I thought I would be a successful employee from a technical perspective. If I liked the people and the job enough and my skill-set aligned, I would accept the job. I was happy just working as a developer with my head buried in code all day solving problems.
When it was time to move on from my second company, I was looking for a role where I could program in Node.js. I found a place that met my technical requirements and seemed to be a good company (it was a non-profit after all). I thought this would be a happy place for me to work and settle down at for a few years at least.
Three months in, I am unproductive, extremely stressed — headaches and anxiety and all that — and I have mentally checked out.
A seemingly perfect opportunity went sour pretty quickly and I have spent a lot of time reflecting on what went wrong.
People and Processes Matter More Than Technology
In my interviews, I usually get really excited to talk about new technologies. Yet I neglect the more important matters of people and processes.
I’ve always thought my job was to write code. Technically, it is, but that’s only a part of what I do. I have to constantly communicate with team members and managers. I have to plan, organize, think… There are so many aspects to software development that don’t have anything to do with burying my head in a computer screen.
Expectations vs Reality
Many companies have unrealistic expectations. For example, you don’t get 8 hours of productivity out of employees. Someone’s butt in a chair is not indicative of the value they provide to the company. It’s just not the right metric to be looking at. If a company is very strict about where you sit, how you long you sit there and when you take breaks, then you should think twice about working there.
The questions I should have been asking interviewers this whole time are things like:
- How do you manage your projects?
- Do you work in sprints? What does a sprint look like? What ceremonies do you perform?
- What does the development process look like?
- How long do developers normally stay at your company? Why do(n’t) they stay?
- How does the team get along? If I asked any of the team members, would they have concerns about the cohesiveness of the team?
- When there is a problem, how is it addressed?
- What is the work-life balance like? How many hours do employees usually work? Overtime?
- Are there opportunities for me to be mentored and learn from senior developers? (Especially important if this is in your first developer role.)
- What kinds of ongoing training opportunities do you provide?
- Can I speak privately with at least one developer on the team?
- Tech stack and some related questions…
These are solid questions to ask but remember: sometimes there is a discrepancy between what interviewers say and reality.
It’s always preferable to meet at least one developer from the company before the interview — like at a meetup or something . If that’s not possible, it’s best to ask to speak with one of them without management around. If management does not want you to do that, it’s a sign that they know the developers are unhappy there. You should take that as a red flag.
The people who work there and how they treat those people is the most important thing. If the team is happy and gets along really well, chances are, it’s a good company to work for. The process and project management style are also important. Although, if they have happy people, I would guess they have good processes as well.
Remember: “It’s always a people problem.”
Weighing Pros and Cons
It’s good to make a list of everything you desire in a job and company. Once you have a list, mark the items as “important” or “nice to have”. As you are interviewing, ask questions to find out about each item on the list so you can compare.
Don’t be wowed by HR and managers talking up the place — perfect companies do not exist! The best thing to do is write out the pros and cons for each company where you are entertaining employment opportunities. If you haven’t found any cons yet, you haven’t looked hard enough. There are problems in every company.
Make sure you Google.
Read everything on their company site, look at reviews on Glassdoor, and reach out to current employees on LinkedIn.
It’s good to make this effort up front since choosing the right place is so important for your career success, happiness, and mental health.
After all your research, you can compare every company with your ‘desire list’ and with each other company you interviewed at.
If it’s your first job, you won’t be able to be as picky. Still, you should be able to have most of your core wants met — at the very least you should be expecting mentorship and a solid team.
Before this company, I was running a local meetup group, giving lots of talks and some workshops, and doing so many other things. Then I started working at this company and all my energy was suddenly zapped away. I had to force myself to do things I enjoyed before. I felt miserable. All because I didn’t the time up front to ask the right questions and find out the right information.
Don’t make that mistake!
I wish you the best in your development career.
If you are interested in how good agile project management can work, here is an example.
I am very fortunate to have formed relationships in the local coding community. As soon as I put it out there that I was looking for new a job ASAP, I receive several offers within about a week. Here is another article I wrote about the importance of networking and going to meetups.