An open insight into what it’s like to leave a comfy Software Engineering job and venture into the unknown.
There’s a TL;DR… at the bottom.
Over the last 3 years I’ve worked at 3 different companies; in this post I’m going to outline the real benefits and losses I’ve experienced by moving away from one of the best jobs I’ve ever had.
This is a personal account of my time and experience at these companies and it should in no way muddy your opinion of the companies themselves or the people that work there, this is just a recollection of my experience.
My Engineering Timeline
Thomson Reuters : 2012 (Not covered / University industry placement)
Net-A-Porter Graduate Scheme : 2014–2018
SkyScanner : 2018–2019
WhiteHat GB : 2019-Present
Net-A-Porter
Background
I joined NET-A-Porter (will be subsequently referred to as YNAP ) in 2014 as a graduate. Over the course of 4 fantastic years I established myself as a Software Engineer thanks to the tutelage of the incredible people and mentors I had there, and due to the different paradigms, logic/business problems, and experiences I was lucky enough to be exposed to there.
I loved my job, genuinely. I would wake up and look forward to going in — something I know many people aren’t fortunate enough to experience in their careers — but the reasons for my adoration for my workplace started to dwindle and I had my career prospects to think about. The issue is that I had grown to adore the people and the comfort, and I was genuinely scared that I wouldn’t survive at other jobs for a variety of reasons:
- I don’t have the skills for another job (imposter syndrome at it’s finest)
- I wouldn’t manage to form meaningful bonds with other colleagues like I had done at this one
- Other jobs would expect far more from me, NAP was quite comfy
- “I’d miss the people too much”
- What if the technology isn’t as cutting edge? NAP was happy to test out bleeding edge if it made sense
- I really don’t have the skills for another job (again)
The company was a great kick off point for my career; I managed to hop different stacks and teams as a graduate (Java, Scala, Node, React, Vue, Swift, Perl, Ruby), and eventually settled into a Node/React role in one of the most important teams in the company. I was able to make a real impact over the next few years working on plenty of large scale projects.
Aside from the great technical challenges I was faced with I also managed to experience what it’s like to work at a company that really does have a great culture; colleagues were actually friends with each other, after/during/before work social gatherings were the norm; everyone was great, I loved the people there. This is largely due to the heavy emphasis that was put on during the hiring stages to ensure that the people joining valued the same things as the company.
Fun fact: did you know that statistically, the companies with the worst working cultures are the ones that brag about it as a selling point? It’s because employees start with very high expectations of what to expect, most of which are never met
Hints of danger
The good times lasted for some years until things started to change shape. After some large scale business and technical direction changes, my day to day work wasn’t as profound as I once found it to be — I won’t go into specifics here but I stopped being interested in the type of work that was coming my way and the type of work I foresaw the company (and subsequently myself) doing. People started to see this shift and began leaving, this shouldn’t be shocking to anyone and it can’t always be attributed to company issues, some people just want a change of scenery after a few years.
Alongside all of this I had been tinkering around in exciting, different languages and stacks in my own time and found myself really wanting to work in a more backend focussed role, specifically I fell for Golang— slight issue here is that a lot of my professional experience at this point wasn’t geared towards a backend role without a significant dip in salary; I had some but I lacked database experience and other traditional tricks of the trade. Call it greed but I wanted to become a different type of engineer without slashing my income dramatically.
Moving on
So I started looking for another job in September 2017. Luckily YNAP put me in a good position CV wise thanks to some of the incredible work some of my colleagues were becoming known for in the tech world and I received an influx of interview offers from plenty of different companies; this is my imposter syndrome talking too, in actuality I had done some good work, won some hackdays, created some fairly successful side projects, was pretty well trained and had been told I was a good developer. I turned down a few offers when I realised they weren’t offering what I wanted (or thought I wanted?) tech/product wise. I was also scared, I kept making excuses for the companies that were offering me roles or interviews and kept putting it off for a few months.
In April 2018, I finally summoned the courage to leave after a few melting points at work and landed a job as a Full-Stack Developer at SkyScanner which seemed to fit the bill.
It didn’t in the end, but that’s okay.
SkyScanner
I joined and immediately began working in a small, autonomous team that was focussed on re-creating a part of the mobile applications in React-Native. The team was highly motivated, had some good knowledge of the domains and stack we’d be working on and the project seemed quite cool.
So how was I doing?
- New technology requirement ✅
- Substantial salary bump ✅
- Good team ✅
- Backend work? ❌
Pretty good right? Kind of.
https://medium.com/media/cff7d4a5b868c807c4740d95e5466903/href
You see what SkyScanner offered me the position they weren’t clear about what tech stack I’d be doing and stressed that I’d be put into an appropriate team that matched my skillset upon accepting. I let them know that I really did not want to work on Java simply because I hated working with it and that I didn’t want to be stuck in front-end again; they seemed on board and their other tech stacks seemed appropriate.
Initial thoughts
When I first got there, the team (newly formed from new hires without strict JS backgrounds) was finishing off an MVP of a React Native prototype they had built to see if the stack stood up to the project requirements. It made sense, required less engineers for a multi-platform native application, the project didn’t require any niche platform functionality that RN couldn’t provide and we could still make it look good. After a few months of learning React-Native (very small learning curve if you’ve done React on web) and creating the new version of the app it turned out that the team needed a backend system to proxy and aggregate the calls we were making for our app.
Cool, finally I can work on some backend stuff, and get the experience I so desperately desired.
Well the team wanted to build it in Java due to their backgrounds. Much to my dismay, it made sense, it fit the purpose and Java had a strong backing from the company so tools and help were readily available. Okay fair enough, I could get on board despite me trying to get stacks like Golang or Elixir or <Insert CVDD tech stack here> in the picture.
Excited to finally get going on some backend work, I found out that the company had a “Developer Enablement” team. Their job was to create scripts and tooling around developer experience and cookie cutter builds. It was extremely useful and very productive to have a secure, logging-ready, CI/CD, AWS dev/prod and terraformed application ready simply by running a CLI command.
As productive as that was I was disappointed that I couldn’t learn anything about the process of setting any of that up because it had already been done for me at the push of a button, no ops knowledge or Java skills to pick up there at all. In my opinion a large amount of knowledge comes from setting up systems from scratch, you learn how things are coupled, where things live and how things interact.
The actual work there was to do on the Java side wasn’t exactly what I wanted either — I wanted to work on distributed systems, build microservices working at scale, optimising DB queries, analysing streams of data etc. The app was simple and proxied requests to a few internal systems and told the app how to behave — nothing I hadn’t already done before in other stacks. Ignoring this the team was composed of engineers from a variety of backgrounds and guess what, Software Engineers are opinionated, if some of them only wants to work in Java they’ll probably only pick up the Java tickets, so guess who was charged with doing most of the React work alongside developers that wanted to write JavaScript like enterprise Java?
You guessed it.
https://medium.com/media/408db45ebdb83f608e78dd68af3fcf17/href
Alright so I wasn’t happy with the tech, what about the product I was building itself? Well after 6 or so months we released a version of the application we planned out after we pivoted a few times due to some decisions from the higher ups. The app wasn’t bad and we were releasing updates frequently in an agile fashion — but I was still stuck in a position of working on React Native (read: React), all the while I felt like my skills were dwindling in other areas — I was no longer configuring webpack (a blessing really), I wasn’t doing any web performance tweaking, I wasn’t doing any Node or backend work and I’d lost my opportunity to touch AWS. Mobile was also a far more restrictive and annoying platform to release to in my opinion. Overall, I felt like I was stagnating as a developer.
Along with this issues I had also realised that many of the other developers on my team weren’t really that engaged — whilst that shouldn’t effect me, it’s hard to get invested in a team and a product when your colleagues are pointing out (very valid) flaws day-in-day-out.
So what did this job give me?
Confidence and clarity (and a pay raise).
The React Native skills were nice and I still use them to create small apps on the side in my own time. But the most valuable thing I took from this position is the knowledge that changing jobs doesn’t have to be scary. I made it through with more clarity and some tangible CV skills, and a bump in pay.
Was it perfect? No, but it was a learning experience.
Did I make intense meaningful connections to people? Not really, I made friends, some of whom I still keep in touch with, but I shouldn’t have ever expected that I’d form the same bonds with the people that I began my career with over 4 years in every work place. It would’ve been a great bonus but it wasn’t necessary — I still keep in touch with the people that matter and friends come from all avenues of life.
I only left after 10 months but that was my decision because I had realised what I wanted from a job and what I didn’t. I needed a role that would at least let me explore backend development and work with databases. I needed something different to keep my interest. I needed a product that I actually cared about building.
After a month or so of looking for new work (and a brief idea of contracting) I found a lovely start-up that’s looking to really help people and empower a new generation of world leaders in WhiteHat.
WhiteHat
As of writing this I’ve only been at WhiteHat for 1.5 months, it’s a challenging environment and I’m having to learn faster and more effectively due to the startup nature, and due to the fact that the entire tech stack is built in Elixir, Elm and PostgresDB, and aside from what I’ve gathered from ES6 and Redux, I’ve never done any functional programming.
But I’m learning, I’m meeting people, I’m seeing engineering life through the eyes of a small company that’s rapidly growing and expanding it’s territory and I’m excited. The future is bright for this little ~50 person start-up and I think we can do great things.
Aside from being pumped to get into a whole new tech stack and get some experience doing backend work, I’m actually optimistic about what we can achieve and what we’re doing, it’s a mission that isn’t just selling expensive things to people that can afford it, and it turns out that’s important to me.
Take aways
Moving jobs is scary. Especially if you’ve been there for a while and resonate with the people and the memories you’ve had there. But if you’re finding yourself no longer challenged, no longer interested, no longer learning or no longer caring about the work that you’re doing then maybe it’s time to look elsewhere.
It doesn’t have to be as scary as you think.
Other companies are also doing incredible things. Just because your current company does some things in a great way doesn’t mean others don’t and it doesn’t mean you’d be missing out elsewhere.
SkyScanner had an incredible devops setup which really blew me away. It also had some immensely talented people working in lots of different, varied teams and it was trying to establish an objectively good working culture — even if I had some issues with it.
Net-A-Porter had an immensely sharp eye for detail in it’s front-end technical teams and were headed up by some fantastic product, tech and delivery leads. My old teams admiration and drive to get testing, performance and user experience nailed was immense and it helped mould me into the developer I am today. It was also home to some of the most incredible people I know.
But you learn things by moving and it helps you get over the fear. I’m not scared of looking for new opportunities as I once was because I now know that whilst the grass isn’t always greener, it’ll still give you learning experiences and teach you things about the industry and yourself that you didn’t know.
Your turn
If you know exactly what you want to be working on, what excites you and you’ve gathered or are working on the skills needed for it then you’re half way there.
Software Engineers are lucky — the market is currently fantastic and innovations in tech are bringing about new opportunities every day. Just make sure that when you’re looking for them you really question what’s important to you.
In interviews, ask about the culture, ask them about what sort of work you’re really going to be doing and see if you can talk to the developers that already work there. Get an insight into how they release, how they build things, what’s in the roadmap, how they get feedback on their product, how they A/B test, how they test in general, really dig deep.
Also remember that when you’re being interviewed, you’re also interviewing them. Don’t sell yourself short and recognise that this company wants you otherwise they wouldn’t bother taking the time to find out.
They have needs but so do you.
TL;DR
By moving jobs you release yourself of the fear that other jobs won’t be as good or that you won’t make as many friends or have as good of a time. You might not, but each time you move you’ll expose yourself to new ways of thinking, new tech stacks, different work cultures and a bump in salary because let’s be honest, people care about money because money is important. Move and you’ll get more than staying (generally).
Be picky about where you wanna go and know what it is you want out of the job. Is it the product, the tech, the money? Know what you want, learn the skills and don’t get attached to a place because you are good enough to work elsewhere, even if you don’t believe you are.
https://medium.com/media/3036ebf1372b812578b622f81b6c5de0/href
Enjoyed my ramblings? Follow me on twitter to hear more of my development tales or keep up with my side projects on my personal site. 💻
Top comments (0)