My Journey as a Software Engineering Student

Noa Kohavi
AppsFlyer Engineering
6 min readAug 8, 2022

At the beginning of my Computer Science studies, senior students told me that by the end of my second year, I’d be ready for a Software Engineering student position. This led me to believe that what I’d learn in my first two years in university would adequately prepare me for this role in the industry.

I was about to find out that it isn’t that straightforward…

In this post, I’ll share my journey as a Software Engineering student, from being a slightly shocked noob, through the challenges I faced, to the lessons I’ve learned and achievements I’ve accomplished here at AppsFlyer.

Why Is No One Asking Me to Perform BFS on a Graph?

Once I began my first job as a SW Engineer at AppsFlyer, I realized I could say goodbye to mathematical proofs, adios to group theory and hasta la vista to Turing machines. No more “implement the following function…” and other direct instructions; I needed to figure it all out on my own. I stood before a whole new world of designing a solution to a technological problem, sometimes not even including writing actual code.

However, I’m not here to make you question your skills before jumping into a SW Engineering student position. University does prepare you for the job, just not in the way you might expect. As my study partner says, “We weren’t hired because of what we know, but because completing a degree in computer science proves we can face something completely unfamiliar, and work our asses off until we understand it to its finest details”.
Moreover, solving challenging problems, planning solutions, identifying edge cases, thinking outside the box, and many other skills you have been sharpening during your CS studies will all serve you as a software engineer.

Are They Speaking My Language?

In my first team meeting, I took my notebook (I’m a writing-notes-by-hand type of person) to write down questions about the things I didn’t understand, in order to check and ask about them later.

I didn’t realize then that I wouldn’t understand 80% of the words being said. AppsFlyer’s onboarding program guides you step by step, ensuring you know every subject being taught. Yet, when you’re new to a team and hi-tech in general, there’s no way to avoid the overwhelming use of tech terms and buzzwords.

Features, databases and even the basics of the feature cycle were totally unfamiliar to me. Questions like “What is deployment?”, “What does it mean to open a Jira?” and “Run tests on prod replicas?!” can be found on the first pages of my notebook, along with a weird combination of uppercase letters, e.g. POC, CI/CD, (WTF…), highlighted and decorated with nervous question marks around them.

If you’re starting an engineering student position, you might find these questions familiar and not know how to answer them yet. If you’re already a month or two in at a company, I guess you’re smiling when reading those “obvious” questions, same as I am now. Getting to the point where you’re smiling, requires not being afraid to ask those questions and getting your hands dirty with a lot of trial and error.

Don’t think this is the last time you’ll be sitting in a meeting, hearing unfamiliar words. Honestly, you don’t want it to be! The technology world is rapidly-growing, full of new inventions, opportunities and challenges, which will keep you motivated and eager to learn, even when you’re a lot more experienced than you are now.

A Fine Balance

A great thing about being a student at AppsFlyer is that everyone treats you as an integral part of your team. I was lucky to participate in big, influential projects from the beginning. When I completed my onboarding at AppsFlyer, my team was migrating from one database to another, and refactoring related services. I was assigned to join this project, and got to refactor a service on my own. It was an educational and empowering experience for me. It was my first time designing a solution for production, my first time writing and testing code that would affect real customers, and my first time collaborating with other developers, Product Managers and QA. But that wasn’t the only reason for the importance of this assignment to me.

I felt that another key reason this project was so meaningful for my progression and improvement, was the delicate balance between independence and guidance. This balance was achieved by the joint efforts of both my team and I.

How did we do it?

I wasn’t instructed on each step I took during development, I had to research and get help from different resources. Here are a few examples of the resources I leveraged:

  • I found that developers who’d taken part in writing the old service, were an excellent source to understand the issues the service had and to improve them in the new one
  • I used articles and documentation to distinguish between different functions and choose the best ones to use in my code
  • YouTube videos were extremely valuable, guiding me through learning the DBs I worked with

Even with the large amount of resources I had in hand, I couldn’t avoid making mistakes. These mistakes forced me to find creative ways to fix them, or else, find others who’d encountered the same issues (this is how I got real close to Stack Overflow…).

These are all wonderful ways to learn things in-depth, let them sink in and last after the project. Still, I could not rely on being entirely by myself, as it can get tedious and frustrating to a point where learning would stop being effective. At this point, mentoring became highly significant.

At AppsFlyer, an experienced developer is assigned to every new team member. Having someone to approach, who can get me back on track if I deviate from the path, and help me separate the wheat from the chaff, contributed greatly to my development. In addition to having a mentor dedicated to helping me, I had, and still do have, many developers in my team eager to teach, allowing me to try different approaches and concepts. There is also a great benefit in learning from people in my team and company, as they know related products and therefore show me “the bigger picture”.

Finding the “sweet spot” between independence and being mentored required that I learn without giving up when things didn’t go as expected (something I repeatedly practiced during my studies), while knowing when to raise a flag.
Moreover, it required the developers I worked with — my mentor, colleagues and managers, to be willing to teach me and think of what would help me grow in the best way.

It’s Mutual

Having a new member who’s trying to find their balance, can also benefit the team.

Relying on my own knowledge which consisted mostly of what I had studied up to that point, along with the fact that at AppsFlyer, each developer’s voice counts from day one, even as a student, meant that I could contribute knowledge that others might have forgotten. For example, the fact that I had just taken an internet security course at the university, actually made the feature I was working on more protected.

At other times, my need for mentoring created opportunities, even for relatively new employees, to guide me. They had to hear my questions, which sometimes forced them to investigate what they knew even further. I truly believe that teaching something is the best way to learn it, so having a student on a team can be a positive learning experience for everyone.

The End of the Beginning

Looking back on this journey now, I am very pleased. I am proud to be part of a team and a company that trusts its students to work on projects that influence our customers daily, and are willing to learn from its students too, giving them the confidence to speak up and share their ideas.

I encourage you to participate in challenging projects and tasks in your organization, and aspire to find your balance.

Being a Software Engineer in a student position is a hell of a ride, one which presents you with challenges that spark your curiosity, creativity, dedication and many other qualities, to overcome them.
I can now move on to the next step in my journey, Full Time!

--

--