At Azimo, we understand how important the ability of effective knowledge sharing is and how impactful are people who, despite little experience, have a huge will to progress in a professional career. For years now, we’ve been inviting novice software, QA, or data engineers, to spend a couple of months in our office as full-time team members.
Recently we’ve been running the internship program in our backend engineering team, where Nicolai turns his theoretical knowledge into practice. What does it mean, and how your first steps in professional software development can look like? Check out Nicolai’s story.
My name is Nicolai Wiskemann, 21 years old, studying Information Systems in Munich. For two months now, I’ve been working as an intern software engineer for backend, at Azimo’s office in Kraków.
Why is an internship crucial for becoming a software engineer?
The knowledge I gained in my university is mostly theoretical. When I built the code, I did it mostly on my own, without much teamwork efforts. This is the experience that most students have in that moment of their life. After joining the IT department, the situation changes significantly. You become a team member where the key is how effectively you cooperate with others. You can also see how your knowledge becomes the solution to real problems. Finally, you write the code that matters for many people.
These experiences from my first weeks of internship taught me as much as the last year at the university. Not only my coding skills improved, but I also learned how the full-picture IT infrastructure may work and how a wider group of professionals can develop it.
The beginning of an internship isn’t easy. In the first week, all of the new information and concepts can be quite intimidating. You might have doubts about your current coding abilities. But hang in there, you will quickly get the hang of it.
The best way to learn is by trying it out and failing the first few times. You then learn from these mistakes and become a better software engineer every day. It works even better if you know that you can count on your team, and more experienced software engineers can answer your questions. Knowledge is essential, but sometimes real-life experience is priceless.
It is worth highlighting that software engineering is so much more than just writing code. During my internship, I worked in a team of 5 engineers who cooperated with several people from other departments. This teaches you quickly that effective communication and teamwork is also an essential part of being a successful software developer.
Why is Azimo the perfect place for an internship?
The company attached great importance to make me a fully-fledged team member from the very beginning. Thanks to that, I got a feeling that the work I did was really valuable. I indeed contributed to the projects that we, as a team, worked on.
At the beginning of my internship, My tech leader and I defined a series of different goals that I wanted to achieve and were in line with the company’s vision. These goals gave me a clear learning path and helped me to structure my work accordingly.
During weekly one-to-one meetings, together with my tech leader, we discussed my performance and already accomplished milestones. This was truly rewarding to see the progress of my journey and learn that my hard work pays off.
At Azimo, one-on-one meetings aren’t only between managers and their team members. I had several meetings with engineers who worked with me, where they taught me about different aspects of technology used and implemented in the entire IT department. It was a very unique experience compared to an internship at other companies.
From ticket to the production
So you’ve just started your career as a software engineer, and you are ready to write some code. How is it happening that one day you got the problem to solve, and the week after, your users can benefit from the solution you developed? Here I try to explain the basic steps of this journey.
1. New ticket
A ticket is a defined work to do to improve the software project. It can be a bug fix, a technical debt task, or a story. Depending on what you choose, it is either an improvement on the already existing code or a completely new feature.
At Azimo, tickets get created by product managers or by members of the engineering team. A ticket should explain what the problem is and what are criteria that tell whether the job is done. Based on that information, the team describes more attributes, like an estimation, size of the work that needs to be done, relating tickets, or the priority.
In Azimo’s backend team, there is a weekly meeting where engineers assess attributes, I mentioned above — complexity and required time for each ticket. If work that needs to be done is quite big, we try to break it down as much as possible, so the code is split among team members and delivered in small chunks.
If this is your first professional job, time estimation can be a hard thing to do. But this is a crucial part that helps with better planning of the entire teamwork. When you try to predict time complexity, don’t hesitate to ask senior engineers — they will help you see things that can be hard to notice.
3. Taking the ticket
At the beginning of my internship, I had a completely wrong approach for tickets assigned to me. Usually, when I got it, I jumped almost immediately into the coding part.
I quickly learned that this way could be ineffective. It is because very often, you need to take some steps back to understand what needs to be done. Not only within a ticket but also as a part of the bigger picture of the product you develop. If you understand the latter, it can help you with staying motivated.
Now I understand that the research is another essential part of software engineering. And this may be anything, from asking your teammates for advice to searching through Google or StackOverflow questions.
Finally, the fun part! I take my headphones, and I can do what we all love to do the most — write the source code. Depending on the task, I had to examine the code and figure out how to fix a bug, add additional functionality, and/or new tests. All of those are delivered on my feature branch of the remote git repository.
When I think my job is done and all tests are passing, I assign feature branch changes into a Merge Request.
5. Merge Request
Before your code is merged to the main branch of your project’s repository (usually the master branch), someone has to review it. In this process, first, I create a Merge Request (we use Gitlab for repository management), assign it to one of my teammates, and then I wait for the feedback.
I found these reviews extremely helpful. Not only was my code checked on correctness, but they also gave me a lot of suggestions on how to improve my style of coding. These reviews helped me to improve my coding skills.
6. Preproduction and QA
After the code review is complete, I can finally merge my branch into master. This didn’t mean that my changes were already deployed to our customers. Not just yet. It first had to be tested on the “preproduction”. Preproduction is an environment created by the company that should ensure that your changes won’t cause any problems on production. When your code is there, first all automatic tests are performed and then the QA Team does the final assessment and approves the change. Now you can go live.
You now finally have your changes running on production and can proudly say that you have contributed to the Azimo product. And the cool thing about building code is that you see your impact on the early days. There is a rule that says: “each new software engineer needs to push the first code to production within one week.”
My first code that went live was about improving the database behind the phone verification feature, where the process was not as fast as desired. When my job was done, it allowed the company to improve the success rate monitoring for each phone carrier all over the world.
These two months have been a great experience. I not only massively improved my coding skills but also got to know an awesome bunch of people. The company puts a lot of effort into teaching you and pushing you to perform at your best level. Therefore, I can recommend applying for an internship at Azimo.