Ask HN: How to switch software engineering domains

49 points by SomeDaysBe ↗ HN
Hi!

I've been a Software Engineer at a medium sized Canadian company for almost 4 years now. It was my first job out of university. The work is backend application development for the company's platform. While the work can be interesting at times, I feel like I don't enjoy it anymore. I want to switch into a new software engineering domain that isn't as high-level. I'm fine with switching to any other field, I'm just don't know how to properly make that transition in a way that would allow me to get a job.

Currently, I've been doing some personal projects in computer graphics, and I've always enjoyed C programming (I was a TA for my systems programming course in undergrad). I also just completed my Masters in Computer Science.

Despite this, I'm having trouble applying for jobs. I usually don't meet any of the requirements, as I don't have actual work experience that the job description expects. And when I do apply, I get rejected before an interview.

For those who have switched domains, any advice on how to go about this transition?

43 comments

[ 6.4 ms ] story [ 118 ms ] thread
>Despite this, I'm having trouble applying for jobs. I usually don't meet any of the requirements, as I don't have actual work experience that the job description expects. And when I do apply, I get rejected before an interview.

That's just how it is. Keep applying. I doubt anyone is getting a job these days without making dozens of applications, or having serious connections. It's brutal and discouraging, but you just have to stick with it.

For some more actionable advice, focus on your framing. Interviewers don't care at all about what interests you, or what things you're most excited about getting to work on. They care about what you can do for their company right now, especially for a mid-level role. Think less in terms of "I'd love to join your company because I'm excited for the opportunity to learn more about XYZ" and more "I'd love to join your company because I have a good working knowledge of XYZ, and believe it would be a huge contribution to your development efforts in that area."

Agreed, I think OP will get there eventually but it's just going to take a lot of work taking into account the change of work domains.
It seems like using one's network is how you can get into a job that you don't currently meet the requirements for. If your current company has any role in a different domain, they might be open to you requesting a transfer.
If you wanted to get into full stack dev or something, the answer would be obvious - do a project, apply, get job because you know the fundamentals.

If you are trying to get into something specific like graphics, I imagine the formula is the same, but probably with much lower likelihood of success.

I assume you are trying to break into the game industry?

I applied as a intern and a tool developer once at two pretty famous AAA studios (due to friends, both actually didnt work out) and trust me when I say the bar is MUCH higher than a average backend job.

I do not want to discourage you, but if you have zero credits on MobyGames expect that they DO want to see proof that you can develop something like a fully working game engine from scratch (which means you understand the base concepts of game system development). Also, any proof of handson experience optimizing code for modern consoles which nowadays amount to Playstation 4, Playstation 5, Xbox One and Xbox Series S/X will probably be a huge plus.

If you can't show any of those things I am afraid most, if not all, studios will not be interested.

> I assume you are trying to break into the game industry?

Curious what lead you to this assumption.

You mentioned computer graphics and C language, so game development strikes me as a reasonable guess.
With things like computer graphics you're competing with a very different pool of applicants than you likely were before. People with PhD's and Masters in related fields. I have found success with positioning myself as someone who works on the edges of multiple domains. So if you were a web developer before it would be at an intersection of web development and computer graphics which could be web gl or operationalizing graphics applications for web or cloud integration. This won't work very well at larger companies that have a lot of clear boundaries between positions, but it will work at startups where boundaries are less clearly defined and people wear multiple hats. In summary, try startups and position yourself at the intersection of multiple domains to get your foot in the door.
Keep in mind that the layoffs earlier this year have still had a huge impact on the job market for software engineers. Many companies moved their hiring bar higher and have gotten more selective over their canidates. 2 years ago, if you pretty much had a pulse you could have jumped fields (yes, some jobs did require specialized knowledge).

Many Canadian companies are not doing "interesting" things so I can understand the perspective of being at the long end of the funnel on sprint tasks for a product that might not be getting huge marketing wins. You've already taken the first step at figuring out what's interesting to you. As others have said, start learning about some topic areas find the meetups over those topics and start networking and getting to know people in the field.

Lastly, interviewing is a skill.

> Keep in mind that the layoffs earlier this year have still had a huge impact on the job market for software engineers.

People keep saying this like it's a fact but I've not seen anything in the employment data to suggest this is remotely the case. Tech unemployment is startlingly low, and even during some of the massive layoff months, tech was still adding jobs faster than it was shedding them. Last I checked, tech unemployment was at 1.5-2%, much lower than the national average (USA at least).

I think what I’ve seen is that with the near hiring freeze at Amazon and a substantial slowdown at Google means that the next tier down of employers are having their pick of candidates that they might have had a harder time landing when Amazon and Google were hiring 5-figures of SWEs every year. So, even if everyone ends up being employed, the selectivity could still be higher than normal. I know we amped up our thresholds for hiring quality.
(comment deleted)
Tech hiring is completely frozen. 2 years ago I had ~80% response rate, now it's 1%
My anecdote having just switched jobs is that It did not take long to get a new job, only about one week to get an interview, a month to complete the process and start and I had 2 offers. However I applied a bunch of places, and even with referrals, only a small fraction got back to me which 3 years ago when I last changed jobs almost everyone always did.
Does your current company have any lower level positions open? It may be easier to switch internally.
Right now, just changing a job is hard. While waiting out the downturn you can work on some personal project, just to have something to show. I hope in a year or two it will be easier to change domain as the market recovers.
Is your company's product a web application? While looking for jobs, maybe try looking into WebGL or WASM to see if you can apply your interests in a way that you cab still do graphics work at your company in the meantime.
I would recommend dabbling in different fields and writing open source stuff. If you like the work, you’ll probably build something cool that may get you hired. If you don’t like it, drip the project and try something else.

I got really into options trading and built a paper trading site that eventually got acquired (for actual money!), and that’s been the talking point of every interview since I sold it.

If you decide you like robotics and you build a library that does fast matrix multiplication leveraging webgl or something, I think a lot of people would be very interested in at least having a conversation with you at that point. People who can “get things done” are always valuable.

Find a company that does both, and that will hire you for your experience in one. Maybe that's a Python company that needs to do Rust stuff, or occasionally has performance constraints that mean they need to use C?
Yeah. Companies hire you to do A, but they let you do B, and then you find a new company that will hire you to do B, but you end up doing C, etc. Your job title is always the thing you were doing at your previous job, not the thing you do now.
A variation of this is to explicitly take a job at a company to solve a problem with one language / area, with the understanding that you will do different work once that's complete.

I did this with a consultancy a few years ago. I did some Symfony work for a client they needed help with, but there was an (honoured) agreement that after that I would never have to do PHP work ever again. After that I moved into Python & Golang work.

I've switched domains four or five times now. I started with gamedev, went to finance, then pentesting, then machine learning.

The key is to have a strong portfolio. Every successful switch was based on that. Even in areas where you can't really show a portfolio, like pentesting, I was good at it and was able to demonstrate it.

It's really that simple. Be good, and show that you're good. Don't wait for someone to show you what to do.

Oh, as for the mechanics of getting the job, it's the same as any other: Forget the resume process. Find someone in the industry you want to work at, flatter them (everyone likes to be flattered, and you should lean on this tool as much as possible) and show them you can be useful.

Nice. I've worked for awhile in backend dev and infrastructure/cloudops, and thought about trying to transition to pentesting to try something new. What did you like about it? What did you not like? What made you decide to leave the domain for ML?
It's mostly a writing gig. (tptacek disagrees, but that's fine -- we disagree on lots of things.) You don't really make anything, and I liked making things. It was kind of that simple.

But! I also met some of the most interesting and capable people I've worked with. So if you're interested, I encourage you to give it a shot.

As for "why ML," I liked ML and it was full of mystery, which was good enough for me.

From the outside looking in that's pretty much what I guessed: Lots of report-writing and little if any programming, but a lot of very talented and interesting people.

It seems like with the proliferation of bug-bounty platforms today, there's a fairly clear way to prove yourself and get in the door while picking up a little cash on the side. Heck, maybe just dabbling in bounty programs is enough to scratch the itch.

For your switch to ML did you also work on a portfolio of ML projects? If so, what's an example ML project you worked on that you were able to show your future employer?
It helps to be be entering areas where demand is exploding and the supply of experienced people is thin. I have a long track record of being fast to pick up the methods of new domains and I’ve frequently had people riding my tail to help them out with a project in a new domain, even if I wasn’t really that interested in the switch.

It’s a part of my origin story because the whole reason I left physics and went into software development was that I watched one of the best physicists of our time crying every night because he had no idea where his next job was coming from despite having written half of a very good textbook and numerous great papers. He made it big in the end but I had neither the tolerance for that nor the talent or motivation. I’ve had the occasional job search that took most of a year but I’ve had some that lasted 72 hours.

Thus I skip all the fancy programming languages and work in the big commercial ones in demand unless I get cash on the barrelhead. For years I avoided Python but I worked for a few people who needed “data science” so they paid for my education.

It may be easier if you wait till you have exactly five years experience. I suddenly got a bunch of recruiting emails when I crossed that threshold.

It tends to be much easier changing around what you work on within a company. I started doing embedded and server software in my first job by just helping out on bug fixes without asking.

I made this exact career transition, the first ~10 years of my career were doing backend development at web companies (mostly Python, but later Go) and I switched to working in C++ in the autonomous vehicles industry.

The key is really just to apply to these jobs, even if you don't have direct work experience. I had a blog on my website that had a lot of C/C++ stuff which I think helped a bit, but in the end I just applied to a bunch of jobs and eventually got a technical phone screen. I described some of the C/C++ projects I had worked on in the past (mostly personal projects). I got grilled fairly hard on C++ stuff in that interview because the company knew that I wasn't coming from a professional C++ background, but I knew my stuff so it ended up not being a problem.

The other way to do this would be to try to get a job at a company like Google or Facebook. Typically you're just another person in their recruiting funnel and whether or not you know C++ doesn't actually affect how their hiring pipeline works. At both companies you're typically not applying for a spot on a specific team at the time of your interview, so you don't even necessarily have to write C++ in your interview to end up getting matched to a C++ team.

What does C++ grilling look like? Types of questions they asked etc?
You can have a lot of tricky questions with the STL only. Here are a few things I can think of: Why do you pass smart pointers, string_view or span by copy? What do you know about C++20? What do you know about C++23? Can you list some useful objects in the STL of C++23? Why should you be careful when calling a C function with a string_view?

Another fun question: Why is a range algorithm better than a regular algorithm? One answer would be that you have "projections" in the ranges algorithms and it makes code cleaner and simpler.

The answers to those questions are endless and show the extent of what you know, and if you're interested in the evolution of the language.

Apply ”lower level” approaches to your current job and get experiences you can talk about in application processes. For example, if you code backend C#:

- Apply “lower level algorithms” to tasks where it fits (if you find good use cases you will be seen as a genius by the other “high-level” programmers)

- Implement “lower level programming approaches” to solve problems. For example, there may be good use cases for emitting MSIL-code in parts of projects (for example where interfaces are injected, you could inject emitted classes on the fly for example in some instances). Again, you will be seen as a genius if you find the right use cases.

- Implement “lower level” communication protocols where suited, for example a home made UDP protocol where you benefit from not having a stream and some packets are not needed.

As a hiring manager, I'm not averse to hiring someone with non-domain experience for a domain-specific role with but I usually have a few apprehensions. You can make yourself a better candidate by pre-empting these questions:

* Were you actually good at your previous domain? (Be Good)

* Does this person know they actually like working in this new domain? Or do they just think it might be "interesting"? (Show some proof that you are already investing yourself in this new domain)

* Do they have a track record of successfully learning new things in the past? (Any other non-domain skills you've picked up that show me you can be successful doing that?)

* Are they at a natural career inflection point and a good time for a transition? (You just got a Masters, so this is covered)

Trying for a totally cold start is tough though. I would try to get a foot in the door via career fair or university contacts. Use whatever coursework you have completed in the area to show aptitude/interest. Good luck.

> Were you actually good at your previous domain? (Be Good)

Can you define "good"? and, more importantly, how do you convince others that you're "good" within the context of a job application?

You advertise some qualities that you think is good and see if it passes their bar of good. There's certainly some subjectivity here.

A more general indicator is how far down into the details you can dive. Another is how well you can teach things to others.

Your CV should provide examples of wins. eg decreased time to enter orders from 15 minutes to 5 minutes; increased widget production rate from 5000 / hr to 8000 / hr; reduced hosting costs by 5% to $1.5M, etc.

Your technical competence needs to be reflected in the business benefits you have contributed to. Even refactoring code can be a win if it speeds up things, reduces costs, increases profits etc.

Increased profits are always considered to be "good".

The problem with this is it tells you nothing about how competent the candidate is. It tells you about the success of a metric of an IT project. And it is easy to make up.

It is usually a “we” thing and it if they say “I” then I am suspicious.

And say they single handily sped up some system. Maybe it was a half day of profiling and fixing some string copying bug. Yes that fix moved a needle and is “Worth millions” but is it? Many people could do the same fix.

I am suspicious of team metrics (period!) and I am suspicious of them being used to judge a developer. What you really want to know is can they fix stuff, are they thinking in alignment with the business. Chasing metrics often isn’t that. Metrics are a necessary evil: they are part truth part bullshit and require nuance to interpret.

Find a team that does what you want, and get a position doing what you are currently qualified to do. Learn to do the other, new thing, then get your manager's help to make the transition official.
Start contributing to open source projects you’re interested in.

Alternatively, what I did last time was start my own company and then use the most appropriate technology (Elixir in my case) despite not having it on my resume.

The downside though, was financial turbulence and ultimately a bit slower learning on the tech side than if I’d been a FT employee using it instead of also being busy talking to customers, doing support, marketing, etc.

>Despite this, I'm having trouble applying for jobs. I usually don't meet any of the requirements, as I don't have actual work experience that the job description expects. And when I do apply, I get rejected before an interview.

This is normal, keep going you're on the right track. Apply everywhere, don't stop if you don't meet the requirements. But, do some research into the role and company. Show in your cover letter that you've put in lots of effort and try to convince them you're a good fit for the role.

At my workplace, I started in software and then was able to transition into embedded software about 6 years in. I credit a lot of that to a) working at a place that had both the field I was already in and the field I was getting into and b) the company culture/supportive managers/current development needs. Some fields I think this could work, others not so much...

You might get some more targeted responses here if you could give us an example of the types of roles you're applying for. As noted some fields are tougher too so I think general advice is only going to get you so far and specifics may help in so far as you are able to share.

Project experience matters. Just focus on that. That's how I got into compilers.
At the same time, reflecting on the 5-10% pockets of what you do now that you really enjoy that makes the rest worth it (or used to) might be an interesting exercise to let it shine a light on your path.

See if there's other projects you can hop on or sit in on in your current job.

Failing that, software development is something that you can sometimes create your own experience instead of getting it from a job. Join meetups, demonstrate what you are learning and present it, and let your network organically grow and you will by pass much of the application process or have it be a bit smoother.

Domain switching can be greatly helped by cultivating relationships that don't just help you, but you also add value.

This cycle may repeat it self for a while. Work is called work for a reason.