The Engineering Internship life cycle at Airasia (User Identity management team)
Published: 2022-04-08 07:57:57

The general definition of an internship is a period of time spent at an organisation by a student or trainee to gain rudimentary experience, sometimes without compensation with the aim of learning, or satisfying a stipulation for a qualification. Internships are very vital to a person's career not only because of what they may learn, it plays a huge role in shaping a person's view and interest for the career path they have chosen. Internships also provide a real world experience and the chance to apply most of the formal and informal education derived from the university (In the case of students). Irrespective of one's field, time management, communication skills and delegation skills are some of the capabilities that can be honed during an internship. Aside all these, an internship can also be the place a person may discover that the chosen career path may not work well for them. The point of discovery, reflection or retrospection on the the chosen career path during this time is a very important step of the internship process. 

<img width="500%" style="width:100%" src="https://media.giphy.com/media/KA3ZgtR2bfpIY/giphy.gif">

At Airasia, we consider most (if not all) of the factors in our internship program that may churn out individuals equipped to embark on an illustrious career. This article intends to breakdown the engineering internship life cycle at Airasia (User Identity management team) for those who may want to satisfy their curiosity or intend to pursue an internship with Airasia.

##Process
###Preliminaries
This is the very first stage after an intern has been confirmed to join a team. The team holds a small meeting to meet the intern(s) for introduction. This introduction involves giving a brief background about all parties involved, the positions and soft hierarchy within the engineers of the team, and portions of the system that various engineers are familiar with. This step is very important because it breaks the ice by creating a soft environment for interns to know they are now part of the team and can ask for help from the right source whenever they need it. It's all love out here 😁

<img width="500%" style="width:100%" src="https://media.giphy.com/media/FiBzv5FRE85PO/giphy.gif">

###Stack introduction
This can be considered as the first stage of ushering the interns into the work that is done on the team. At this stage, a permanent engineer of the team will first explain the stack used on the team and why it was chosen. The engineer also moves on to explain the entirety of the service, how it works and some key important points to note. This explanation includes the a small background of the service, its present condition and potential upgrades for the near future. The engineer will move on to breakdown the inner workings of the various subservices used by the team. Ad hoc services and scripts will however be introduced to interns on a need basis because the intention is not to swarm them with information but to provide a working knowledge of how things behave.

<img width="500%" style="width:100%" src="https://media.giphy.com/media/WtCHRSPCuqS8E/giphy.gif">

###Self learning (optional)
This stage of the process is tagged optional because of its dependence on the working knowledge of the intern. In this case, its a plus if the intern already knows the various tiers of a system (the presentation layer, the logic layer and the database layer) and how they work. For example, if the intern has no experience with APIs they may have to do some basic reading on APIs and server-side development. A little background on the stack we use may also be helpful if they don't already have that. Most of the engineers on the team undertake fullstack activities of which the interns are expected to get involved with.

<img width="500%" style="width:100%" src="https://media.giphy.com/media/1kenyYNFG9wTUyHMjk/giphy.gif">

###Test run
In this stage a little assignment is given to the interns to help build their capacity while working in an industrial environment. The assignment tests most facets of the development process including planning, extraction of functional and non-functional requirements, delegation, design pattern choice, endpoint naming, etc. This assessment is not for evaluation purposes but to encourage learning by doing since it is usually by doing that one learns the most. Review processes during the test run happen on live calls and are a bit more detailed because of all the teachable moments in that process. In the case of the User Identity management team, the assignment provided is one that is a mixture of frontend and backend builds. Being that time is a factor during internships. This process may be halted due to the learning speed of the interns. Interns who pick information up pretty quickly may be moved to the next stage halfway through the test run. 

<img width="500%" style="width:100%" src="https://media.giphy.com/media/8FNlmNPDTo2wE/giphy.gif">


###Production code familiarity and permissions provision
At this stage the intern is deemed ready for exposure to production code. The process is however taken on slowly by allowing the interns to write tests where non existent or for new features. Writing tests with maximum coverage where possible allows the intern to carefully go through the code for breaking points while reviewing statements and branches. The interns are encouraged to provide suggestions, improvements and concerns on any they may find in the code because, moments such as these provide avenues for discussions and teachable moments for all parties involved  

###Contribution to production
Finally the interns will be given a chance to make additions to code that actually influences the day to day business of the company. Contributing to production code means joining thought provoking discussions that dissect business requirements, communicating and corresponding with other teams, and providing suggestions that are either considered or polished. This in many ways is a sense of pride and a point of knowledge acquisition that provides a feeling of accomplishment.


<img width="500%" style="width:100%" src="https://media.giphy.com/media/10nUOx7fvLEKpG/giphy.gif">

##Challenges
One of the most obvious challenges is to find and diversify the assignments we give to the interns. The focused challenge is to provide an assignment that encompasses all/most aspects of the software design life cycle to maximize knowledge retention and acquisition.
Another challenge can be found in the time the interns spend with the team. Internships usually last between 1 and 6 months. Though the team tries to maximize the return for both parties within the time available, it's usually not enough to expose the interns to production scenarios that otherwise cannot be formally taught. True industrial experience is mostly proportional to the time spent in the industry, therefore the more time they spend with us, the more experience they gather.

##Conclusion
At Airasia the team tries to focus on the learning points of the interns hence the various detailed phases above. This process has proven quite effective as there is nothing short of praise from interns that have gone through the pipeline at Airasia. If you are looking to start an engineering internship in Airasia, I hope this article gives you a fair understanding of how the pipeline is handled. Hope to see you soon😉 

<img width="500%" style="width:100%" src="https://media.giphy.com/media/12noFudALzfIynHuUp/giphy.gif">