It’s fascinating how the perception of a job in software engineering has changed since, say, the sixties. People used to land a job with IBM and feel that’s their career sorted. IBM took care of their software engineers, sought equal rights for male and female employees, built club houses, threw parties and employees wrote ultra-hyped songs about their boss, company and place of employment and sung them at their work place. A thing that today would seem surreal, for sure.
Happy days are here again!
Eight thousand hearts in IBM,
All loyal T.J. Watson men,
Love our noble President.
His leadership stands out alone;
He’s honored everywhere he’s known;
We proudly claim him all our own;
In our worldwide IBM,
By him we are all inspired,
To do whate’er he desires.
Happy men of IBM,
Throughout the world good citizens,
With faces bright as Diadems,
Happy days are here again!
Time has passed and we’re in the 21st century, computers really took off and there are plenty of computer science specialists out there. Which means that companies don’t need to try hard to win employees over. But, on the other hand, we can also be picky. So they kind of do?
When I wrote up my first CV as a software engineer I made a point to explicitly mention the fact that I am a loyal employee. To me it felt important that companies that I’m applying for should know that I will be sticking around. A few years later I removed it because I no longer think that loyalty is just about me.
I think there are at least three things that are important in a software engineering career. It’s hard to arrange them in the order of importance, partially because it’s an individual thing, partially because, really, they’re intertwined. So, in no particular order, here they are:
Skills. Your current skills are, obviously, important, but consider how massive the field of computer science is. There is a ridiculous amount of programming languages kicking around, as there is a crazy amount of frameworks and APIs. New ones get created all the time. Some of them get dropped pretty quickly, others stick around and become the new best thing. Also consider programming paradigms, source control and software development methodologies. This might be a depressing thought, but learning new things isn’t about making yourself more marketable, bumping up the price; at the very minimum it’s about keeping yourself marketable. If your job can’t keep you marketable, or make a solid 100% promise that you have a lifetime career lined up for you (which, let’s be honest, isn’t happening*) - perhaps it’s worth considering moving. On a side-note, I’m not being naive here, I understand that in early stages of your career you need years of experience and beggars can’t be choosers. Consider getting a programming-related hobby and implement the things you’d like to try to your heart’s content - clean code, clean architecture, TDD, sprints, different languages. Don’t forget to mention them on your CV too.
Environment. You have a job that gives you opportunities for self-improvement, you enjoy doing what you do work-wise. For a while I thought that surely that should be enough. Turns out that the work environment is also quite important. On the one hand you have people that you are working with. They don’t need to be your friends for life, but it helps if they are friendly and you talk, as opposed to sitting in silence in an office of fifty people in silence occasionally broken by an odd cough or sniffle. At the very least you’re spending forty hours of your life a week at work, there is no need for it to feel like you’re in solitary confinement.
But the environment is not just about the social side, interacting with people. The actual physical environment is also quite important. Suppose you’re working at an imaginary place with leaky ceilings that get fixed by placing a bin under the leak; urinals that get blocked on a weekly basis; elevators that do not get fixed no matter how many tickets you raise with the help-desk; mice in the office; non-free hot water for your tea or coffee. It becomes increasingly harder to believe that the company you’re working for values you that much.
Finally, there’s morale. You might be working with the loveliest people in the world, they might be smart, interesting, you might feel like you have tons to learn from them. But if they are unhappy, say, because your company just announced non-voluntary redundancies and everyone is worried about their positions, mortgages and development of the product that they dedicated the last fifteen years of their lives to - it’s hard to feel happy, let alone motivated.
Salary. At the end of the day, money matters. Sure, you can talk about your perceived monetary value versus what the companies are willing to offer, but I don’t think you can realistically evaluate yourself until you have a few years of experience behind you. So, really, this is more about getting paid enough to, at the very least, pay for your accommodation, food, entertainment and, ideally, be able to save some up. I don’t think it’s possible to objectively know what your experience and skills are worth unless you try out several companies, so moving around a bit before you settle (if you want to settle) seems like a good idea.
At the early part of a career some of the points might be less important than others. If you’re focused on getting those much needed years of experience - the environment and ability to improve skills might matter less than getting enough money to live. But, as you become a professional, finding a place that ticks boxes next to all three points is what can make you a loyal employee. As simple as that.
So suppose you’ve decided to look for a new place to call work. Where do you even start? I have friends who knew exactly what they wanted to do next. They researched the companies they’d like to work for, looked hard at the requirements and spent months on personal projects that allowed them to increase their skills enough to apply for positions at those companies. I have friends who knew what combination of company-salary would be satisfying enough and applied to those. Me, on the other hand, I have a filter. I establish what sorts of things I do not want to do and go from there. For example, I wouldn’t want to work for a major corporation, I want to avoid working for a FinTech company, I prefer to take little to no part in front-end development, etc. The plan is - eventually this approach will help me find a niche I’m comfortable working in.
How would you go about looking for a software engineering position. Luckily, there are plenty of options.
Job advertisement websites. There is a ridiculous amount of those kicking around and they give you an opportunity to reach out to companies directly. But it can quickly become tiring to troll through all the ads looking for the ones that are a good fit.
Whoishiring. I think this is an amazing service. It aggregates ads from a whole bunch of places (stackoverflow, hackernews, github, etc) and, the best part, it allows you to search for positions based on geography. Still can be a bit of a hodgepodge of stuff, though.
LinkedIn. LinkedIn is a great place to reach out to a recruiter, arrange a chat and see if they have anything that might be of interest to you. Not always, but frequently they are rather good at figuring out whether you are a good match for anything they might have and, if not, they often have a colleague who might have something more suitable for you.
Hired and SnapHR. These sites are by far my favourite methods of looking for a job. They’re reverse recruitment services. You fill out your profile, talk about your skills, years of experience, what you would like to do next in your career. Then, once you’ve finished filling out your profile, for a limited amount of time (a month-ish) it becomes visible to companies signed up for the service. The companies that think you’re a good match for what they’re looking for offer to schedule a call and you take it from there. Hired does that; SnapHR does that and the advocate you get can also suggest companies that they personally think are a good match for your skills and aspirations. It’s pretty neat that you can pick the size of your ideal future place to work: mega corporation, medium-sized company or a start-up.
Tech job fairs. Those are a good way of meeting companies as well. The one I’ve used is Silicon Milkroundabout. Basically, you look at the list of participating companies, look at the videos where they’re pitching, prepare your CV and then have a fun day walking around and chatting to the ones that caught your eye. And get free cakes and drinks in the process. This is also a good way to get access to companies of all sizes and have a friendly informal chat with people who work there.
So there’s that, and you can reach out to the companies you find cool directly.
In an attempt to sum up - it’s up to you whether you want a career in a single company or not. It is probably not impossible to work for a single company your whole life if that’s what you want to do, but don’t feel like you have to, because there is a sea of opportunity out there, as long as you keep your skills up to date. Also, don’t code for food.
*I don’t know, maybe in academia?