Flutter @ amaysim - Journey & Wins

We recently released a new self-service web app for amaysim customers to self-manage their mobile services, and account. If you’re an amaysim customer, and have used our iOS or Android app, it might look familiar. Leveraging Flutter, we are now providing the same self-service experience across 3 platforms; iOS, Android and web, which bring many benefits to our customers, business, and developers.

In this post, we'll talk through our journey with Flutter and the benefit it has provided.

Adopting Flutter

Flutter is an open source UI toolkit, developed by Google. It provides libraries & tools, to rapidly put together UI for apps, that can run natively on iOS, Android, desktop and web.

We began our journey with Flutter back in mid 2020, when we migrated our iOS and Android apps to the cross-platform tool.

Like many mobile teams, we were struggling with the challenges that come with native app development - time & cost of building features twice across both iOS and Android, maintaining feature parity, and challenge in scaling the team given the specialist skillset required. 

Since adopting Flutter we've been able to get more features into the hands of our app users, faster than was possible before, to a higher level of quality than before, and with full feature parity across iOS and Android.

The accelerated delivery comes from leveraging Flutters toolchain, such as hot reload for instant feedback. Combined with the added confidence that Flutter apps render consistently across platform, the development cycle is much faster, as developers iterate on a single platform, while delivering for two. There is also a high level of reuse, with Flutters UI library - widgets for UI components, animations and transitions, that would typically take days or weeks to build from scratch, were reused. 

With a single developer now building a feature for both iOS and Android, the development team could not only take on more features, but more ownership of the tech stack as a whole. Our team began to own APIs the apps consume, allowing us to move faster with less dependency on other teams.

When we eventually wanted to grow the team, we were able to onboard and up skill a developer with no prior native app experience, who was productive within days pairing on production features, leading changes within weeks.

Over the past 3+ years, Flutter has proven itself on our native apps, with positive customer feedback and an increase in app store rating. We were keen to see if the same benefits could be leveraged on web, as Flutter web support matured.

Adding Web Support

Adding web support was a daunting task. Our native app experience was never designed to run on a web browser. Its navigation relied heavily on gestures, like swipes and touch. The UI was responsive, but only to a limited set of screen sizes, not for resizable windows on a desktop. Users would also expect keyboards, track pads and mice, to work as usual, it was unknown how our native app would respond to these input devices.

Getting the app to work on web would itself be a challenge, but our goal was to release a leading web self-service experience, that customers would love.

Our initial findings were positive. By simply running a Flutter command to add web support, and stubbing out a few platform specific features, we had a functional self service app running on a web browser. Flutter was doing the heavy lifting, with platform specific behaviours baked into its widgets.

Over the following months, the team worked to productionise the web app:

  • replacing features that required native capabilities

  • ensuring screens were responsive within breakpoints

  • using Flutter APIs to ensure our UI was platform adaptive

  • building feature parity with our legacy web app

  • replacing gestures with a new top level navigation

The Wins

With a single cross-platform self-service app, we were able to share some wins with our customers, business and developers too.

Our customers, now get the same self-service features, on whatever device they prefer to use, iOS, Android or web. They don’t have to wait as long, for new or improved features to become available. They get a great user experience, with fast navigation, a reliable app, consistent across platform.

Our business, get reduced delivery costs, with one developer now delivering across three platforms. There's improved efficiency, freeing up developers to work on other things. And we now have a more scalable app development team, where it is easier to onboard and up-skill developers.

Our developers, get a great developer experience, using a modern programming language, and tools. A reliable toolkit, to deliver cross-platform apps, and a powerful prototyping tool too.

As with any technology there are challenges and tradeoffs. Flutter is no different, but we'll save that for a future post, where we'll talk through some learnings, as well as new opportunities this cross-platform tech stack provides.

If you like the sound of this and are interested in being part of our apps engineering team, check our our Careers @ amaysim and our LinkedIn.

The views expressed on this blog post are mine alone and do not necessarily reflect the views of my employer, Optus Administration Pty Ltd.

Previous
Previous

Unleashing the Power of Generative AI: Building Practical Applications

Next
Next

Enabling code reuse