12 Weeks as a Mushroom

A look back at my 12 weeks interning in Gousto’s Mobile Apps team

Hi, I’m Nik! I’m a 19-something Computer Science student at Imperial College
London and just finished my summer internship at Gousto, working in the
iOS/Mobile team called ‘Mushrooms’ (now the title makes sense) 😄.

This is my first internship and it was a super exciting opportunity to work
in a tech team at a company on a real product. That’s right, some of what
I’ve worked on is now out for the world to see and is hopefully benefitting
the business as well. It was also my first time participating in code
reviews, both having my code be reviewed and being the one who reviews.

I’ll try to catalogue what I’ve done and what it’s been like working here for
12 weeks in this post.

What I’ve Done

Over the course of my internship I got to work on several small projects,
as well as normal tasks like the rest of the team. I really liked that I
could have some independence and ownership over the implementation of a
specific part while also just working with the rest of the team.

So, what did I do?

My first commit and pull request was a actually a little fix—the
project would not compile for me as the upstream project was misconfigured
and was referencing some dependencies that had been removed
before—something only noticeable if the project was checked out fresh.

Over the first few days, I was setting up my development environment and
getting to know the codebase. My line manager, Spencer, first got me to do
some pair programming on various small tickets with my coworkers: Providing
not only an opportunity to get to know the code better but also the people I
would work with for the next 12 weeks.

Apart from various tickets, I worked on:

Maintenance Mode





One of my first tasks was to implement a maintenance mode screen. This screen
is rarely used, but allows Gousto to show a message to users when the backend
is down for… well, maintenance of course. My previous experience with
Interface Builder in Xcode was only with Mac apps, and with this task being
primarily an exercise in IB, it was an opportunity to get more accustomed to
IB as well as designing for both iPad and iPhone using autolayout. So much
fun.

Changing the Bitrise Configuration for git-flow

Mushrooms are different to the rest of the Tech at Gousto in many ways. One
of these ways is that we use ‘proper’ git-flow. We try to do it by the book,
with all the branches and tags considered. But it wasn’t always this way.
Before, we used something that is kind of like git-flow, but not quite. This
system works for other teams with instant deployment, but since we don’t have
this for iOS it was decided that we would switch to git-flow. Bitrise is the
continuous integration platform that we use here in Mushrooms. You commit
something, and it’s compiled and tested by Bitrise. To make this work I had
to update various triggers and test these too, in the process also creating a
simple sandbox app for testing new configurations.

On Screen Recovery

On Screen Recovery (or OSR for short) was a big project. I worked on this for
most of August, creating various screens and logic to generate a recovery
experience for our customers. It’s no secret that to succeed, Gousto needs to
grow. It’s the same for any company. One thing that stalls growth is users
that unsubscribe from our subscription service because they don’t understand
how it works. The aim of OSR is to ‘recover’ customers, to convince them that
staying subscribed is better than unsubscribing from the service. Sometimes
users may just unsubscribe because the service is not understood well, but
also if a user does genuinely want to unsubscribe it allows Gousto to figure
out why customers may be unsubscribing.

OSR was already present on the website when I started working on this
project. Actually, it was the iOS front-end that I worked on. This involved
creating many screens that are displayed according to logic provided in the
response obtained from the server. The idea is that the pausing journey is
customised for the user based on how long they’ve been using Gousto for.
Along with creating all the screens from the designs, I also worked on the
client-side model of the server response, running the user through and
managing a journey, pre-journey validation of the server response, and
sending of analytics.

Here are some screenshots:

Other Stuff

After much consideration it was decided that the OSR endpoint would serve
Markdown, so this had to be rendered on the client-side. Since we didn’t want
to use web views and wanted full control over the styling of text; I wrote a
small Markdown to NSAttributedString converter which would take Markdown
strings, feed them into the C Markdown reference implementation called cmark
and then output the formatted string.

Towards the end of my internship I assumed the role of a back-end engineer,
adding our REST library to one of the PHP services. This service manages
content for our frequently asked questions and will in the future be able to
serve these to various front-ends.

We also had an internal white-hat hackday, where everyone in tech tried to
identify and solve some of the security threats that Gousto may face.

What I’ve Learnt

Before working at Gousto I had never experienced Agile development. On my
first day I was introduced to Jira, tickets, sprints, swim-lanes, oh my.

I also learnt more about developing iOS apps. Everything from how Xcode
projects are set up for multiple configurations, to Interface Builder and
designing for iPad. Of course, there was also plenty of opportunity to play
around with Swift features.

What I’ve Noticed

Every fortnight is a ‘Tech 10%’ day, where everyone can work on something new
and interesting. This provided a nice contrast to the normal sprint-work. On
my first tech 10% day I was looking into the viability of a local Xcode Bots
driven CI solution for our app, another day I tried improving the build times
of the app through various configuration parameters. There was also the
opportunity to play with new Apple technologies that might be interesting to
use in and around the app.

At Gousto everyone I worked with really believed in the product and the
company. The management were great at communicating what was going on in the
business as a whole, and for anything more specific to the product that I was
working on (read: the iOS app) I could always speak either to my manager or
the product owner for mobile.

Conclusion

I really enjoyed my time at Gousto: Working on smaller independent projects
and on normal sprint tickets with the team was great fun and an amazing
learning experience.

Nik Vangerow

iOS Developer Intern Summer 2017