Meet the iOS team — Foundations
Here’s the first of this series and we’re kicking off with the iOS Foundations team! We are currently a team of 5, and we manage everything from the underpinnings of the application in Swift, to our physical CI systems, the glue that manages them and a number of web systems. We are responsible for most of the infrastructure and architecture which helps the iOS product teams effectively perform their roles. We are cross functional in a lot of ways, from managing our own CI infrastructure and tooling, to improving core functional and architectural components in the app, to kicking off design system initiatives, building web dashboards and much more. Our ‘customers’ are generally other development teams within Gousto and so we strive to make their job as easy as possible.
Katie Jones — Junior iOS Developer
Hey, I’m Katie and I’ve been working at Gousto for just over a year. I don’t really have a ‘before Gousto’ story as this is my first developer role! However, I did switch from human languages to programming languages in my last year of university and hastily changed my proposed Masters study from teaching to Digital Humanities in the space of a month and I haven’t looked back since.
On a personal level, I am a HUGELY active person. I regularly hike, and have trekked up mountains in Japan, Switzerland, Canada and France. I came close to falling off the edge of a mountain in Canada a couple of years ago, but it hasn’t stopped me. Other than hiking, I train as a figure skater at my local rink in Slough and also took up rock climbing with my partner a couple of years ago.
I joined the iOS Foundations squad on a more permanent basis towards the end of 2021. Before this, I moved around 3 squads in our Growth tribe, contributing to the resurrection, retention and care of our customers. Since joining the Foundations team, we’ve improved some of our core iOS functionality such as our Flow Coordinator concept, built dashboards in Javascript, and are now exploring a GraphQL proof of concept in TypeScript. The thing I enjoy most about Foundations is the enthusiasm to take on a new tech stack and develop things that will really benefit others in the rest of the iOS team.
The Foundations team implemented a design system last year which aligns with one of my interests at the moment — reusability, in particular, design systems and how to improve developer speed by implementing reusable components, guided by clear standards. My aim for this year is to add more components to our design system and reduce as much boilerplate code where possible.
If I had to choose one thing that I love about our iOS team as a whole, it would have to be the push for learning as opposed to shipping features quickly. Especially for juniors, it gives us the space to explore and learn from mistakes and this is crucial in the first couple of years in the industry.
Dale Buckley — Senior iOS Developer
I’m one of the senior iOS developers on the iOS Foundations team and have been with Gousto for just over a year and a half. I’ve been dabbling in tech for as long as I can remember, but I really started to get into programming when tinkering with modifying computer games and making websites back in the mid 2000s. Once iPhone OS (yes, it used to be called that prior to being renamed to iOS) 2.0 got released and Apple started to allow 3rd party developers on to the platform I got interested in making iPhone apps. I don’t have any formal education in computer science so everything was self taught. I was originally working at my family business after finishing school, but in 2011, and after making some hobby apps, I decided to leave and switch to making apps full time, and as they say; the rest is history.
Since joining we have made huge inroads into reworking the project structure to enable us to scale and the project is now heavily modularised. Teams can now work on their own part of the app through the use of feature apps and not have to worry about building the entire codebase every time due to module caching. From this work, we have managed to improve our CI so it only builds the modules that it needs to reduce the amount of time each CI build takes to run. Also, we have built out a dashboard containing over 30 different metrics which allows teams to see how the health of their code changes over time. This could be documentation, code coverage, EOL (End Of Life) conformance, PR size, merge reliability and much much more. Teams can then use this data to influence their development directions and prioritise areas of improvement.
From a personal perspective the most satisfying areas I’ve worked on since joining Gousto have been taking low level areas of the app and reworking them with modern, clean and well documented APIs. There is still a long way to go in this area, but I’m happy with what we have achieved so far.
By far the best thing about working at Gousto is my team. We are always very open with each other and always strive to help each other out. There is very much an unspoken ‘no one left behind’ philosophy in the team where from the least experienced to the most experienced we always try to help each other understand both problems and solutions so anyone can pick up a task. Other than the team, I just really like what Gousto is aiming to do. The company aligns with my values in trying to cut emissions, waste and generally trying to be better for the world. There are always internal initiatives promoting diversity and openly recognising when things aren’t quite going to plan.
Sara Sipione — iOS Junior Developer
Hi I’m Sara and I joined Gousto at the beginning of 2020 as a Junior iOS Developer! About 4 years ago I decided to move to London, looking for a new and exciting experience that could enrich my cultural background. Two years in, I decided I wanted to then change my career and made the transition from Marketing to pursue a career in iOS development. I spent my time learning how to code myself and building iOS applications by attending coding bootcamps. Months later, a new adventure started at Gousto.
Since I joined Gousto, I’ve always worked as a member of the iOS Foundations team. Working with the core of the iOS Gousto app is really exciting and challenging at the same time, especially now that the application has been used by over 1M people in the last year.
Being part of the Foundations team is like jumping in a new role every 4 months. Learning about the latest in Swift, Ruby, Typescript, app architecture, fastlane, CI, app release process, debugging and solving issues.
In two years I can definitely say I’ve noticed the progress we’ve made in our app architecture and developers’ productivity. This was possible thanks to great work on code modularisation which facilitated the scaling of the app, and by automating most of the process for releasing new features.
The thing I’m most proud of is the Codebase health report, a collection of metrics describing how the codebase of the iOS app is changing over time, used already by developers and managers to prioritise engineering improvements on their roadmap.
Another important team effort was the design and implementation of a widget prototype which is now available in the iOS Gousto for all customers. If you still don’t have it, please add it to your iPhone and let us know what your experience is. My colleague Katie has written a blog post on that. Check it out here!
Sebastian Skuse — Lead Engineer, iOS Foundations
Hi, I’m Seb! I’ve been working at Gousto since 2019, and working with iOS products professionally for quite some time (back to when it was called the iPhone SDK in 2008!). Prior to joining Gousto I have led teams at a number of other household name brands in industries ranging from digital publishing to video streaming for UK broadcasters. My passion for programming started in school, when I discovered Microsoft Office came with a cut down version of Visual Basic in it and I could build “programs” in it. That evolved into VB6, Pascal, C++ and then into web technologies in 2000 which set me on a course for studying Computer Science at the University of Southampton. In my spare time I’m kept busy running after a 3 and a half year old and a 15 month old, and am an avid petrolhead.
I head up the iOS Foundations team and joined Gousto to help with scaling the project as the business grew — things have changed a lot since 2019! There were 3 iOS engineers when I joined, now we’re at 13. To support this growth we had to split mobile engineers out into domain teams, with a foundational team supporting them. Our project (now workspace) had to change to support this too, moving to a number of separate projects at different API levels building domain-owned frameworks to produce the app you see in the AppStore today.
One thing I love about the work we do in the Foundations team is the variety — we own code written in Swift, Bash, Ruby, HTML, JavaScript, TypeScript & more. One of the greatest things about working in the team is the enthusiasm everyone has! We’re often faced with challenges outside of our intrinsic iOS domain knowledge, but we all pull together to support each other and deliver. We hold regular guild meetings with all of the iOS team where we discuss what’s new in iOS, our domains and provide support cross-squad, too.
One of my favourite features that we’ve built is our selective build + test functionality. As we’ve grown as a team, so has our codebase and UI + Unit Test suite. We identified that this was going to cause us problems long term as we don’t want to cut down the number of tests engineers were adding, and the codebase is always going to end up growing organically. We wanted to approach this in a way that was completely transparent to our engineers, and did not require them to switch away from the standard Xcode project. First, we implemented something we call “Module Cache”. Our workspace is structured in a way where we have groups of projects, and those projects are only allowed to import from levels below them — enforcing a tree structure and providing different “API levels”. The outputs from these projects are periodically cached on CI, and when a new build is started, it resolves the dependency graph and determines which prebuilt products it can swap in for their source counterparts, saving build time. Secondly, we’ve implemented Selective Testing. We use Test Plans at Gousto, and using a similar mechanism to Module Cache, we work out the changeset graph and disable any test bundles in frameworks that are not relevant. These two changes together mean that, for some builds, a CI build takes 20% of the time it did before.
Spencer MacDonald — Mobile Engineering Manager
I originally joined Gousto in 2017 to help scale up our native mobile team from 1 to 6 engineers across iOS and Android, and since then we have scaled to 25 mobile engineers spread across 6 squads, which has kept me and the team on our toes throughout. When we were 6 engineers I used to contribute a handful of pull requests each month to the app, but my team has now forbidden me from touching the codebase!
My day to day role is as an Engineering Manager for our iOS and Android Mobile Foundation Teams, ensuring we have a vision that aligns with our growing team and ability for all mobile teams to ship customer value as often as possible. I also represent the needs of mobile (such as laptops, test devices, CI, team shape etc) with the rest of the software engineering management team, along with undertaking responsibilities that all Engineering Managers share, such as ensuring our teams have a clear strategy and unlocking what’s needed to get there and supporting individuals with their personal development.
Prior to Gousto I worked as a Lead iOS Engineer at a number of startups, using a variety of different technologies, working in areas such as real time audio, video and messaging.
The iPhone was launched during my last year of Uni (that doesn’t make me feel old at all!), so as I was already obsessed with all things Apple, it was the natural thing for me to jump into when I graduated from my Computer Science degree and I have never looked back.
And that’s all from iOS Foundations. Next time, you’ll meet the iOS Activate team!