Skip to main content

Experience at MIXI as Software Engineer Intern (2021 Summer)

This is a record of my internship as an iOS engineer at minimo division of mixi group from 8/16 to 9/10 in 2021 as part of an internship called Dive into mixi GROUP.

View from the office

View from the office

Selection Process

I was looking for a place to intern during the summer of 2021, and I found an internship opportunity at mixi and applied for it.

I was relieved when I received a email that my application had passed the screening process, and then I received a call for an interview. For this internship, there was an interview process with a rectuiter, a technical interview with an employee, and an interview with a person from the team to which I would be assigned.

I went through to the technical interview without any problems, but in the final interview with the potential team, I was rejected because there was not much of a match with the candidate team.

However, I was then invited to re-interview at minimo, where the employee who had conducted the technical interview belonged. After an interview with an engineer at minimo, I passed the interview and was selected for an internship at minimo.

I was rather sad when I was rejected the first time, but I am glad that I was able to do an internship at an organization that suited me. I also thought it was very good that the selection process takes into account the match with potential placements, even if it is an internship, in order to make the most effective use of each other’s time.


Environment and Treatment

Duration: From 2 weeks or more, negotiable
We will confirm at the time of interview as it depends on the service.
Start date will be either the 1st or 16th of each month.
Working hours: 10:00-19:00 (1 hour break)
Hourly wage:
2,500 yen per hour
link

Regarding hourly wage

I think it is quite high among internships that university students in Japan can apply for and there are no restrictions on the type of work within engineering.

Regarding the duration of the internship

It was completely tailored to my availability. One thing to note is that the start date is the 1st or 16th of every month. If you can’t move the end of the month, you may not be able to start the internship for almost two weeks, depending on the time of the interview.

Remote Work

During this internship, I basically worked remotely. It was sad that I did not have many chances to visit the office at Shibuya Scramble Square, but I was still glad that I could visit the beautiful office few times. Each division at mixi has its own remote work policy, and at minimo, coming to the office once a week was recommended, so I basically followed the policy and came to the office once a week. I also had the impression that interns from other divisions had a different rule and came to the office flexibly.


What surprised me during my internship

Training

After completing the hiring process, there was an online training course on harassment, compliance, etc. The amount of training was surprisingly large, and I had to attend it on an individual basis. I remember being personally surprised by the surprisingly large amount of training. I was surprised at the amount of training, but I think it was a good opportunity for me to learn about the values and the culture of mixi, Inc.

Introductory meeting about each team other than engineers

After joining the MINIMO team, I first had a 1-on-1 meeting with the person who was in charge of the engineers, and was briefed about the engineering organization of MINIMO. This was within my expectations, but after that, I was given one-on-one explanations about the other teams, which were not related to engineering, by the leaders of each organization. I was surprised that so much time was given to the interns, but I think it gave me a deeper understanding of the MINIMO business and team, and made my internship experience even better.


What I worked on during my internship

I worked with my mentors on two tasks, and at the same time refactored the code base of the iOS app.

Task 1: Prevent accidental logouts

Assumptions

  • The minimo iOS app had a “logout” path without going through the actual registration process due to Apple’s review process.

Issue

  • When an account is called “logout” but is not linked to any other SNS account, email address, etc., the process is equivalent to deleting the account in effect.
  • If the account was not linked to any other SNS account, logging out would result in the loss of points and other benefits.
  • There was also a certain amount of support for this event.
  • Replacement of the old design was on the way.

Improvements

  • Changed to alert when “logout” is pressed and at the same time prompt account linkage.
  • Added alert to reconfirm when pressing “logout” as well.
  • Implemented integration with Google Analytics.
  • Replaced the account management screen design with a new one.

Task 2: Improve usability of some of the reservation details screens

Task

  • There is a difference in usability of the reservation detail screen between iOS and Android.
  • There is a lack of a way to check access to the salon after a reservation is made.

Improvements

  • Added a flow line to open the map app directly from the reservation details screen.

Refactoring

Changed to use first(where: ...)

In the code base of the MINIMO iOS app, there is a

``swift {linenos=inline} .filter { … }.first


in a few parts of the codebase. This would unnecessarily loop through all the elements of the array, which would always take worst case time. We can replace this with

```swift {linenos=inline}
 .first(where: ... )

to exit the loop when a matching value is found, thus improving performance.

Removing unnecessary .string

Minimo used SwiftGen to manage string resources. However, when using SwiftGen’s generation, it is necessary to remove ``.string’’ from

1var str = L10n.something.string

I found a few parts where the call was made like swift var str = L10n.something.string . I wondered why I had to use .string when I could access the resource using only L10n.something. I found that this string was implemented by a library called OAuthSwift that was used in the minimo app. I found out that the string was just an extension that returns itself of type String, which was implemented by a library called OAuthSwift used in the minimo app. It was just making the code redundant for no good reason, so I took action to remove the .string part.

Add custom Swiftlint rule

I wanted to prevent the above problem of adding .string mechanically because I thought it was impossible to prevent it just by being aware of it when working on it. I added a custom SwiftLint rule using regular expressions, and I was very careful of the fact that there would be no false positives when I added the regular expressions.

Remove unused resources

In looking at the generated string resources, I noticed that some of them were left unused, so I decided to delete them. I tried to use the tool Periphery to automatically detect them, but the minimo app has some code written in Objective-C, and calls from them were not detected. I could not get much benefit from it because I had to check there since it could not detect calls from them.

Remove unnecessary self.

Swift allows you to omit self in many cases, such as when accessing properties. Also, a recent [change] (https://github.com/apple/swift-evolution/blob/master/proposals/0269-implicit-self-explicit-) has made it easier to omit self when using SwiftUI. Minimo’s iOS app code also omits self as much as possible in newly added code, but previously added code did not do so, so we made a change to remove the optional self. The code added previously did not do so, so the change was made to remove the optional self.

SwiftFormat with redundantSelf /Rules.md#redundantself) rule, so it would have been better if I had noticed and used it earlier.

Final Impressions

Although it was only for a short period of about a month, I had a lot of fun at minimo and learned a lot about application development while being involved in the actual development of the service.

Because of the COVID 19, I worked mostly remotely during the internship period. Even so, I was able to learn a lot thanks to the opportunities I had to have lunch with people in positions I would not have had the chance to be involved with in my tasks, and thanks to the support I received from the personnel, mentors, and other members of the MINIMO team.

See Also