Jack Garner

Undergraduate/Graduate Software Engineer

Apadmi, September 2022 - Present

Apadmi is a mobile app development agency based out of Salford. They have a wide range of current and former clients in sectors including health, retail and loyalty, football, food delivery and telecommunications.

I first started at Apadmi as an Undergraduate which was part of a year in industry I did as part of my degree. Since then I have been promoted to a graduate and had the opportunity to work with a wide range of clients and technologies. I've included some of my highlights below. Due to an ongoing non-disclosure agreement, I can't name clients directly on this page.

KMP Proof of Concept: Kotlin, Swift, Jetpack Compose, Swift UI

One of my first projects at Apadmi was an internal proof of concept for the newly released technology Kotlin Multiplatform Mobile (often referred to as KMM or KMP). The aim was to see how feasible it would be to implement and how well it worked.

The way we did this was to take an already existing project, an app that allowed venues to book staff and performers for events and build a bare-bones version of it for both iOS and Android. KMP allows for developers to have common non-UI (business) logic with native UI so building both platforms was pivotal to to demonstrate the time savings.

One of the major challenges I faced with this project was that I had never worked with Kotlin, Compose, Swift or Swift UI so had to learn them as I went. I think this went quite well as I picked it up quite quickly, my experience with Java Android apps helped with this but this was also the first time I had even worked with MVVM so there was a lot to learn.

By the time the project had neared its end (about 2 months) I had managed to become quite versed in both languages with my most major accomplishment being creating an animated bar graph completely using native Swift UI.

Smart Bike Companion app: Java, Kotlin, Swift, Jetpack Compose, XML, Swift UI, UIKit, Storyboards

This was my first full-time client project at Apadmi so I felt the pressure to perform. This client was quite a unique one for Apadmi as it was: firstly, an inherited and very dated code base; secondly, it was a very small team just a developer for each platform, a server developer and me; finally, the product owner worked for the client, not Apadmi.

These all posed challenges such as the state of the code base made it very hard to work on, some commits were nearly ten years old in Java and others were done by Apadmi in Kotlin only a few weeks ago. This resulted in the code often being very hard to read especially for someone so early in their career. However, I believe being put on such a challenging project so early on shows how much I proved myself during my first few months.

The product owner being from the client also introduced pressure on me having to meet with them often several times a day made me very nervous at first but I soon built up a great relationship with them. This ultimately resulted in me not only being trusted to be the sole Android developer on the project but also made responsible for completing a major brand refresh within the app for them.

Although I mainly did Android work for this project I would often pick up some iOS development (mainly UIKit), especially during the time when I was working on introducing better analytics into the app through Firebase. Finally, while on the project I helped to integrate and launch a brand new subscription system for the app.

Investment and Wealth Management app: Kotlin, Jetpack Compose

This was the first project that I worked on that was not released at the time when I started, however, I did work on it up to, after and during release. The main purpose of the app was to allow users to access and manage their investment portfolios.

The app already existed for this client but Apadmi were rebuilding it from the ground up as the current implementation was outdated and hard to maintain. This meant that it used all the latest and greatest technologies and was built to be maintainable by using components wherever possible and utilising MVVM.

This also presented some challenges, Apadmi was just doing the mobile work for this app, and any server work was being done by an external company. However, a lot of the back end was staying the same which meant we faced a lot of challenges working with old and outdated APIs.

One of my main learning experiences on this project was around accessibility. Due to the category of this app, accessibility is a legal requirement which means it was always a big focus during refinement and development. This highlighted to me how important it is for all apps not just ones where it is a legal requirement. Therefore, I have become a big proponent of including accessible designs on tickets and the definition of done in all projects I have worked on since. Furthermore, I also think it is interesting from a problem-solving perspective. Finding effective and often complex solutions to such simple tasks such as making sure elements go onto a new line on a large font size is something I have come to enjoy.

App maintenance: Android, iOS and Flutter

While completing my final year at university, I worked reduced hours for Apadmi as part of their app support team. This involved responding to issues that a client might have reported such as bugs in the live app or outages, maintenance of the app such as dependency updates, app releases and also out-of-hours support.

This was a very beneficial experience for me as I got to work on a wide range of projects (sometimes even several a day) across many different sectors such as construction, medical and food delivery..

Also, I helped support a small-scale app test release. This was for a large discount retailer who wanted to test their new app first on the Isle of Man, and then expand to Scotland before a nationwide launch. This was a challenging experience as it was a language I had no prior experience in, flutter, however I got to grips with the language well with the app recently launching nationwide with no major issues.

Retail Loyalty app: React Native, Typescript

My most recent project at Apadmi is a large supermarket retailer's loyalty app. This was a project that Apadmi inherited from another client and it therefore was not in a language common for the company; typescript and React Native. This posed a huge challenge for me as I was placed on this project full-time with not only now React Native experience but also no experience with TypeScript or Javascript. However, I picked it up quickly and was working on full UI feature work within a few weeks.

One of the pieces of work I have delivered on this project that I am most proud of is improving the architecture of the app. It does not use MVVM as it is hard to implement with React Native. However, myself and a few other mobile devs came up with our own solution to support MVVM and state-driven development. We introduced state hooks to the app which leverage mutations and states to create a viewmodel of sorts for each screen which greatly helped with separating business logic and UI.

An improvement to the project I introduced solely was how pull requests were written to make them easier for developers to review. One of the main issues on the project was that pull requests were taking a long time to get reviewed which resulted in QA getting overloaded at the end of a sprint. This was due to the nature of the project, it uses a scalable version of SCRUM called the nexus framework. This is when multiple teams work on the same deliverable alongside each other. This means a lot more work can get done at once but also means that teams didn't have the context of what other teams were working on and often then didn't understand pull requests. I aided this by introducing a 'what' 'why' 'how' structure for descriptions. This has resulted in fewer active pull requests at any one time and smoother sprint burndown charts.

Student Guide

Edge Hill University, September 2021 - August 2024

During my time at university, I worked part-time as a Student Guide, this was someone who was responsible for representing the university at several events including open days and alumni events. My responsibilities included touring and directing guests around the campus, running stands for services like campus and accommodation tours and helping guests check in to events.

Moreover, I was also responsible for running and staffing primary and secondary school events within the university. This included greeting staff and students on arrival and taking them to taster sessions throughout the day, running sessions myself or with other student guides to teach them about skills such as budgeting or writing a personal statement and also giving them tours of the campus and nearby town.

Finally, I conducted data entry and packing work such as filling envelopes with offer letters and inputting the results of surveys from school visits.

Senior Ambassador

Calderstones School, September 2018 - April 2020

I secured this role due to my previous work as a language leader for many years (see below). Myself and six others were responsible for choosing the members of and running the school council every year. We also planned, managed and staffed school events such as open days which regularly involved promoting the school to prospective parents. Moreover, we regularly attended meetings with high-level staff and governors at the school. Once a month, through this role, I was a member of a Liverpool council committee that was focused on the environment and safety in and around schools. We also ran some of the school's social media such as the school council's Twitter page.

Cyber Champion

Merseyside Police, May 2019 - February 2020

This was a city-wide project run by Merseyside Police and KPMG and involved pupils from several different schools. We first took part in focused training where we learned all the concepts of cybersecurity that would be relevant to younger pupils. After this, we would occasionally take part in a day of running lessons where we went over these concepts.

National Citizens Service (NCS)

Summer 2018

I worked as part of a team to plan and deliver a community program which raised over £500 for a mental health charity. This involved acquiring a location to hold the event and refreshments as well as working with the charity to coordinate the payment. While doing this I learned valuable teamwork and coordination skills.

Language Leader

Calderstones School, January 2014 - April 2018

I worked as part of a smaller group of 4-5 other language leaders which was part of a large team with around 20-30 other subject leaders to plan and deliver topic-specific school-wide events. Planning included booking rooms and designing and distributing posters. Our particular group focused on delivering "Language Cafe" events which also included planning and communicating with the catering team about the food we wanted to be available during the event.