Here’s what I learned during my three-month internship at Azimo

How was that?

Software engineering is a competitive world. As an aspiring engineer, you dream of landing a good internship. It’s a chance to kickstart your career and learn the practical skills that theory can’t teach.

My biggest fear when I started at Azimo wasn’t whether I would get a job at the end of it (as it happened, I did 🎉🎉🎉) but whether I would get to do work that mattered, to learn and to grow. I needn’t have worried.

During three months I was introduced, step by step, to life as a working software engineer. I built features, such as a customer document uploader that verifies a user’s ID. I rewrote old flows from Objective-C into Swift. I was trusted to fix a security breach.

One small step for developer and a huge help for a Customer Support agents :)

Most importantly, I was given guidance and tuition to improve my skills in the following areas:

RxSwift. A widely-used Reactive programming framework written in Swift, which helps you to write clean code and design your projects using modern architectural patterns. I struggled at the start, but with the guidance of my mentor, Mateusz, things became clearer. Also, if you are interested in widening your RxSwift skills check this awesome blog from Marin Todorov. Git. My proficiency with Git was very limited when I joined. Three months later, I can easily manage an iOS project on multiple branches with multiple versions. Dependency injection. Until you work as part of a changing team, it’s easy to forget the importance of updating your dependency factory. When I first started, I frequently forgot to register new classes, models and objects — now it has become second nature. Flow controllers. My proficiency with flow controllers is still quite limited but I am beginning to understand their importance. I’m trying to use them in my own projects where possible and to continue learning. Rome wasn’t built in a day 😁. Unit tests. My studies didn’t prepare me for the importance of writing unit tests. A new feature = new tests. More tests = better coverage. Better coverage = fewer bugs. Fewer bugs = happier users and more efficient engineers. For more on the importance of tests, see our tech lead Mirek Stanek’s post: Automated testing will set your engineering team free. Socializing. No man is an island 🏝️. I learned more just from chatting to my mentor and the rest of the team than I could ever have learned on my own. The positive mood and welcoming atmosphere in the team made the world of difference to my development, and I’m enormously grateful for it.

There’s nothing that can be done without planning, right?

While preparing for the first day of my internship, I was unable to find a typical “day in the life” of an iOS engineer. A view of somebody else’s experience would have been helpful, even if only to calm my nerves. So, for apprehensive first-day interns of the future, here is what my day average looked like:

8.30 AM — 9.00 AM:

Catch up with mail, JIRA, and Git

When I arrive at work, I spend half an hour checking my inbox, JIRA, and Git. This lets me catch up on feedback, new tickets and merge requests. Once this is complete, I’m ready for the day ahead.

A typical welcoming screen of my phone on the beginning of a new sprint :)

9.00 AM — 10.30 AM:

Bug fixing

I spend around 90 minutes working on bugs and small issues because I want to free up the rest of the day for bigger tasks. Working at a software company has taught me the value of undisrupted concentration. Interruptions break the flow of an engineer’s code. The resulting mistakes often don’t get caught until code review, which will then slow your colleagues down. I now know that planning your daily calendar, and having thoughtful stakeholders, makes a huge difference to the quality of your work.

10.30 AM — 12.00 PM

Stand-up, mission check-in, grooming, planning

This time is devoted to the key ceremonies that guide software from inception to release. This was my first experience of working with non-engineering stakeholders, such as product managers and designers. By communicating properly, we better understand our team’s goals and priorities and can provide more accurate estimates of how long work will take.

12.00 PM — 12.30 PM:

Team lunch

Once per week, a catered lunch is provided for everybody in the office. It’s a great opportunity to meet people from other departments.

12.00 PM — 17.00 PM:

Code, code, code

This is when I get my head down and focus on coding: headphones plugged in, mug of tea on the table and my hands clattering the keyboard. All the iOS and Android engineers sit in the same room, so we can pool our knowledge to solve complex problems when required. I’m grateful for the wisdom and experience we have in the room.

Conclusion

My three months as an Azimo intern gave me the practical experience that I needed to start my career as a junior iOS engineer. Imagine my delight when Azimo offered me that very position. I’m delighted to be part of a team that is using technology to democratise financial services, making them affordable and available to all.