Your first software engineering job: an ultimate guide

Yulia Kleb
AppsFlyer Engineering
16 min readDec 13, 2020

Or how to begin your journey to the wonderful world of high tech

A journey of a thousand miles begins with a single step.

– Lao Tzu

Intro

CS student? Just graduated from the academy and searching for a first job in the software (SW) sphere? Not sure what to choose and which technologies to learn? Would like to apply for a job, but not sure where to start? Starting your career at software engineering, but not considering yourself a hacker? Scared of technical interviews?

No worries, we got you covered!

My career story (to inspire you)

First of all, nice to meet you! I’m Yulia, I have been working at AppsFlyer as a software engineer for four years already. And I’m yet another person to give you advice! Just kidding, I’ve passed through the difficulties in my career as a SW engineer and would like to make it easier for you.

For someone that has been around the block for a while in the high tech industry, I can tell you the beginning wasn’t easy at all. Although my parents were software engineers, and my brother as well, I wasn’t born with a keyboard in my hands, and being a third generation engineer in the family doesn’t help as well.

My journey started back then, in 2005, when I was a schoolgirl, having to make a life choice — what I will do for my future living. It was quite a hard choice for the age of 15 and for a kid with no special talents. But I thought to myself: “This industry will definitely grow and incorporate loads of money in itself, I need to learn how things work in it”. And, I guess, that was not the silliest point.

So I went to the university to study math and programming. It all took place in Moscow, Russia where universities are still very far from the industry. You simply cannot learn being a SW developer or cutting-edge technologies there. But what you can do is to learn thinking in a technological way. And general systems knowledge. So once I graduated after 5 years of education, I felt like not knowing anything in the industry: I had no skills in systems design and architecture, no modern programming languages knowledge, no idea of data structures, algorithms or complexity (which also were not a part of what we learned).

This was not the same for all the students in my University: some had skills, because they learned on their own, watching tutorials on YouTube and reading books. But I was not anything like that: my personal life events didn’t leave me enough time to do extra to the university training to succeed that much in my professional path.

So I was scared and didn’t know what to do with myself, so I didn’t go to work as a software engineer right away.

After 3 long years of activities of different kinds I moved to Israel. Moving to a new country imposes new challenges like learning a new language, adapting to the new environment and finally finding the first local job!

After adopting myself a bit in the new environment, I took my free time and spent it on upgrading my tech stack and improving my programming skills to find my dream job. Since I had no job back then, I took this opportunity to learn and improve on a full-time basis.

I took (paid) courses¹ for Python/Django full stack engineers to create some portfolio and find a job². They also offered an internship as a part of the course to gain experience, so it was the original plan: learning courses, preparing a portfolio, taking part in the internship, finding a job having the experience already.

While learning, I’ve managed to create and deploy my personal portfolio website to Heroku. I also learnt working with SQLite, HTML/CSS/Bootstrap, jQuery, though JavaScript turned out not to be for me already at that point :D. It took me something like 6 months to learn all the technologies I needed (Git, backend, frontend, working with databases, Python, etc.), gain some skills in coding and create a full stack portfolio.

During this period I had an idea to create a CRM for my previous company. I was aware of their needs and specifics of their work, so I decided that it can be both good for my portfolio and for their daily routines. It also gave me a lot of motivation: I knew it was something that will be used by the people I know, and they will give me feedback. Eventually I think they don’t use the CRM I created though: it was my very first system created, so it was not working very well and not convenient. But the main goal was achieved — I gained experience!

Eventually I felt ready to start searching for my very first job in Israel. I updated my LinkedIn account and filled it with all the courses I passed and links to my GitLab projects. I created a CV and started applying to all possible companies. I somehow ran into AppsFlyer’s open junior position, checked the company’s website and fell in love: it was a match.

Then I got very lucky: AppsFlyer, which back then was a relatively small startup, responded to my application! I had no idea what the interviewing process would be like (I wish I’d known things I know now!). But what helped me was my LinkedIn profile with the courses and portfolio listed: I still remember my future manager told me that the most important thing they learned was that I am a self-learner: someone who can learn and create things on their own.

This is the end of the story: I was hired as a junior data developer! I was the first female programmer (not a manager) in our RnD (which I’m kind of proud of).

Since then I’ve tried 3 different teams in two domains in 4 years, learned writing quality code in Clojure and Go, importance of tests and different approaches to writing them, creating micro services and infrastructure, SW architectural principles, and basically everything I know now. This was a long road, and now I am still new. New to the team I’ve just switched to recently. This and having several friends of mine graduating university and having no idea what to do, inspired me to write something to help you guys in this path.

How is it going to help you?

The good thing about all that is now I know how you feel (probably lost in technologies and development spheres) and what to do! I wish someone would have explained those basics to me back then.
In case you wonder what I can tell you that was not told in the academy, mind that most universities still do not have a well-established educational system. It happens for some obvious reasons: the technologies in the high-tech change too fast, the books are not being updated accordingly and the teachers cannot stay updated with the cutting-edge technology all the time. You need to learn a lot on your own in this industry. To help you with that, I’ve added links into the detailed articles and materials that can help you to understand the provided information precisely.

Basic steps for a new developer

Technical stack:

  1. Choose your area: Web development (front-end, back-end, etc.), Mobile applications, Infrastructure (DevOps, SRE, etc.) and Data Engineering

(see short description of them below) to start with. Most companies have all the spheres present in their RnDs, so if your choice was not optimal for you at the beginning, you can switch teams later (it’s always easier within one company).

2. Learn basic technologies: to work with source control (Git), some IDE (e.g, IntelliJ), REST APIs, Postman, basic SQL (e.g., MySQL) and no-SQL (e.g., MongoDB) databases, basic of working with Docker. You don’t have to know them perfectly well, but basic understanding and hands-on skills are essential.

3. Find the description of the open position in the desired company and find out what the requirements are. Learn the technologies required at least on the basic level.

4. Create the portfolio for the desired position using the technologies required in the job description:

  • Create the service: your FE/BE/whatever program, which does something: it can be even code that you’ve created learning from some tutorial — the only thing that matters is that it works and does whatever is relevant for your desired position.
  • Cover it with unit and integration tests.
  • Advanced level: Make it production-ready and easy to demonstrate: dockerize the BE project/deploy full-stack project to some free hosting (e.g., Heroku).

Public presence:

5. Check your CV: it should be in English and take no more than one A4 page. It should contain your name, your contact details, links, relevant (only!) experience if you have any, education and languages you speak (mind that it should be ordered this way!). You might also want to include your technical skills and stack. Make your CV tell your exceptional career and life story: you can highlight your learning or communication skills, your achievements in education, etc. Make sure it points out that you are passionate about what you do! Another good thing is to ask your friend to read your CV (especially if you have an HR/developer friend :D).

6. Create/update your LinkedIn profile (including your technical skills and stack!): it’s the modern way to search for a job. It also makes you visible to the market and HRs.

7. Search for the right company: not the top, not the bottom, having seniors and experts to learn from, developed processes, training for new developers. Small startups are easier to get in (usually), but consider that usually there is no time to teach juniors and the code base (as well as processes) might be not the best, and we would like to first learn the best practises (again — usually).

8. Search for student positions/internships/junior positions. It’s the best practice in general — to start working in the industry as early as possible. If you are able to start working (not full hours) at the second grade of university, it will help you to understand better what you learn at the Academy and ask your teachers questions about your work. Plus, think of the fact that once you graduate, you have some experience already and can earn more money!

9. If you have a friend working for some company you’d like to join, ask them to send your CV internally to the company HRs: such candidates usually have a preference.

10. Before you apply for this position, take time to prepare for the job interview. FAQ for junior developers are data structures, algorithms, your student experience, portfolio design (make sure you can explain everything in it, including the choice of the technologies involved), why you fit this position the best. Make sure to learn what the company does. Prepare a short pitch (2–3 min) about yourself and why you would like to get this job.

11. To check what it is actually like to work in some company, what the employees’ reviews are, to see interviewees’ experience and to learn which questions they usually ask in interviews, use Glassdoor.

12. Set up your salary expectations: check the average salaries on Glassdoor (or whatever Google will find for you) and decide what fits you best.

13. If you have a dream company, don’t apply there first. Start with other companies you are less interested in: this way you will have the opportunity to try your skills and gain self confidence before you get into the interview at your dream company. Basically, what you can do is to create a list of SW development companies in your area and contact all of them.

Interviewing process:

14. Recruiting process for medium and big tech companies usually consists of several steps (3–6 steps in most cases):

  • Phone call with HR/direct manager
  • Coding homework
  • Tech interview (data structures/algorithms)
  • Tech interview (architecture)
  • HR interview
  • Interview with the senior management.

Those steps can vary for different companies, you can have more or less technical interviews. Homework is also not obligatory, but quite typical for a first job.

15. Failed the interview? Ask for the feedback — it’s a good experience and can help you to improve for your next one.

16. Freelancing is a perfect option to consider (especially when it takes time to find the job): gaining experience without stressful interviews is the perfect way to find the job at your dream company!

17. Applied to dozens of companies and it didn’t work out? Don’t be desperate, it happens to everyone in our sphere, even seniors. It just takes time. It also depends on the market situation: it might be there is no hiring (e.g., due to covid-19) or there are too many engineers searching for a job in the market. Be patient. You can reapply to the companies after a certain period of time (usually 6 months-year, but depends on the company).
Looking for a job for more than half a year is completely okay — you will find it eventually!

Once you found a job:

18. Once you got hired, learn as much as possible, but don’t kill yourself with work — it’s not everything in your life! Remember about burning out, which happens a lot in SW engineering.

19. Another thing to remember: you cannot know everything, you cannot learn everything in one day: you have time for that, a lot of time — most developers learn their whole life. You should not feel ashamed by the fact that you don’t know something or you need to ask. Moreover, no-one expects you to know everything. You will learn it all with time.

20. If you have started working in a new place and feel that you don’t understand anything, it’s also okay, we all were there. Don’t be confused though and don’t try to learn everything at once: you will learn step by step! Things that are complicated now will seem like a piece of cake in half a year.

21. Keep the balance between asking questions and trying to find answers on your own: before taking team lead/senior’s time, make sure you’ve googled your problem, searched in internal repositories for similar solutions, asked other people who you feel comfortable to ask. Also remember that in large companies there are usually dedicated people whose job includes helping newly arrived developers with any questions — use it!

22. Try to establish a good relationship with your colleagues — this makes it easier to ask questions (especially those you consider dummy ones), work together, pair program and enjoy your work. Small talks near the coffee machine or water cooler about your hobbies and interests can help here. Moreover, people in the same industry usually have similar state of mind and interest — you can find a lot of new friends at work!

23. Show your interest in what the team does — it will be appreciated by your manager.

24. Learn soft skills by just looking at how others behave: how to ask help, perform code reviews, give/ask feedback and criticism and advocate your opinion.

25. Don’t be scared — you’ll make it!

Programming areas intro

Disclaimer

I’m coming from the world of backend and big data, so my opinion is biased, of course. But I’ll do my best to be as less engaged as possible.

All the development/engineering/programming (call it anything!) world can be roughly split into several spheres: testing (QA), backend (BE), frontend (FE), mobile, DevOps, full stack (which is a combination of BE + FE in various proportions), cyber, data analysts, data scientists, QA automation engineers and many, many others. We’ll cover only QA, BE, FE, mobile and a bit of DevOps as a basic choice here.

QA

A quality assurance specialist ensures that the final product observes the company’s quality standards. This basically means you are a person who checks if the program developed behaves as expected in all the business use cases, starting from functionality, design, reliability, and resiliency to meet customer expectations.

The sphere has a variety of methods: manual testing, automated checks, visual and usability website testing, performance testing , API testing and others.

QA engineers develop code in case they have to automate verifications on business use cases and run them as part of progression (new feature developments) , regression, continuous integration and continuous deployment (CI/CD) .

Talking about the technology stack, there are various ready-made solutions, tools, and frameworks. Most common programming languages used in this field are Python and Java, though other regular languages are used as well.

The reason we cover this sphere first is that it’s the easiest way to enter the industry. You can switch to the developer’s position in the same company afterwards (it’s a common practise).

Backend

The BE world represents all the possible functionality you can imagine. It is the heart of every digital product you see: website, mobile app, etc. It is the layer that actually does the work: stores your data, media, information about you; computes whatever needs to be computed; performs authentication and authorization; sending emails, transforming your input into output of some other kind; calculates rates, means, average, distances, renders maps, etc. It does basically everything!

It includes writing REST and other types of servers, APIs, working with databases, data pipelining (message queues, channels, etc.), data transformations (ETL), logging and audit systems and much more. It can work on one machine (your computer) or hundreds of cloud machines.

This is why the BE sphere is so broad: it includes dozens of design patterns, technologies, a variety of databases and their types, message queues, libraries and programming languages. It’s a huge world, where you can learn and develop endlessly and never get bored.

It’s the most common and most big sphere of programming.

Frontend

The FE front represents the visual side of the services: it is what the end user sees and interacts with. It’s very important since it represents the face of your company.

Developing FE includes working with UI/UX designers and product managers a lot, making things beautiful and seeing results immediately, in a concrete form. Adapting your code to be displayed the best way in the different devices is also an important part of the game here.

The main problems this sphere solves are “make it work fast” (your page should load within milliseconds and be optimised), “make it scalable” (or how to reuse your code components) and “make it beautiful” (adjust it to what designers and products want).

There is a variety of technologies and methodologies in this area. The most basic are HTML, CSS and JavaScript; the most common — React, Vue, Angular, TypeScript, etc. The majority of modern tools present in the market solves most of the problems above, is well-designed and comfortable to use.

The big advantage of FE is that it gives people the ability to be creative in usability and visibility. Also it fits well for people who like working with visuals.

Mobile

By Maxim Shoustin

The world of Mobile Development is a very large ecosystem. Android (by Google) and iOS (by Apple) are the main operating systems used by mobile devices around the world. The Android/iOS ratio globally stands at around 5/1. Android is open source and iOS is closed source.

The platforms are very different from the perspective of lifecycle, thread management, API and languages. Native Android code is written in Java and Kotlin using Android Studio IDE, and iOS is written in Objective-C and Swift using Xcode.

In addition, many developers do not want to duplicate their code in multiple programming languages, so they chose to use cross-platform technologies. Some of these technologies include Flutter, React-Native and Cordova. Gaming companies tend to use gaming specific cross-platform engines such as Unity, Unreal Engine and Cocos2dx.

Mobile development is not only related to creating mobile apps. Many developers create and maintain SDKs (Software Development Kit) that include tools and libraries to help create apps. These libraries can be a UI Component, background service, themes and so on.

An SDK can be included in thousands of mobile apps and run on billions of devices simultaneously (like the AppsFlyer’s SDK) so one small bug can affect billions of users. Since the only way to fix a bug is for the user to update the app, every line of code needs to be carefully written and tested.

DevOps

DevOps is a set of practices that combines software development (Dev) and IT operations (Ops). What it basically means is that regular SW engineers develop for clients outside the company, and DevOps develop for the clients inside the company — for SW engineers. In other words, some developers are in charge of the code which performs client-oriented operations, or what the company actually sells as a product and everything related; and, on the other hand, other developers are in charge of the environment of the product development and deployment: version control tools, cloud servers, autoscaling, server healing, CI/CD, storage, databases, data processing clusters, staging and production environments and all kinds of things which are crucial for the delivery.

This job requires a lot of patience and knowledge. It is the center of all the development of the company, this is why DevOps engineers need to communicate to other engineers and manage their requests.

DevOps include both IT operations and programming as we said, meaning that they both write code (services) and set up and configure systems, which is challenging, but super important.

Conclusion

Yes, it’s tough. Yes, you have to do a lot to enter this field. Yes, you have to do even more to become an expert, and it’s not going to be easy. Yes, it’s a very demanding job. But gaining your place under this sun is usually tough. Remember, if you will do things and be patient, you will see the result. I did it with no understanding of the process, no outstanding skills, no connections in the industry. So you CAN do it, too! Good luck!

WE ARE HIRING!

AppsFlyer is the right company for you to start from: we are not too big and impossible to get into like Google, we are not a small startup company, where everything should be done quickly and there is no time to take care of the code quality, tests, best practices and educating engineers. We have well-established processes of learning, training, development, QA and having fun. AppsFlyer has been recognized as #12 out of the 25 Highest rated cloud companies to work for! And, what’s more important, we have over 120 open positions!

We are looking for young talents to grow with us! Come join us — we are waiting for YOU!

P.S. Feel free to reach out and ask your questions — I am here to help!

P.S.S. Have something to add from your experience? Please comment!

[1] The courses are in Russian though, so I’m not sharing the link.

[2] The important point here is that it was much harder for other students in the course, who had no technical education/background. So don’t underestimate your education if you have some.

--

--

Yulia Kleb
AppsFlyer Engineering

Software engineer @ AppsFlyer, clojure and golang enthusiast, Star Wars fan and a cat mom from Tel Aviv. Follow me https://www.instagram.com/yulia_kleb/