Your browser is no longer supported. Please upgrade your browser to improve your experience.

Everyone working at Bluefruit has something in common: we love to learn. And it’s something that our work culture actively encourages; we are provided with time and resources to further our expertise. Whether we’re reading about bleeding-edge technologies, building an experimental device, or diving into the latest features of an established tool, our ever-growing knowledge brings immense value to the business and our clients.

In this blog, software analyst Tamsen tells us about her latest personal project…

I am a software analyst at Bluefruit. My day job involves focussing on requirements and user stories, prioritising workload based on business value and end-user needs. You can read more about what I do in my earlier blog post. 

A few months ago, I decided to enhance my technical skills. I realised that in order to truly excel in my job, I needed to understand the inner workings of the technology we use. This would grant me greater insight into: 

  • the perspectives of our developers and the challenges they face. 
  • how our clients feel when they have a great idea about their project. 
  • the steps they take to achieve their desired goal. 

I wanted to understand how the software is built, how it works, and how development processes can be improved. So, I took the plunge and created a mobile phone app using Flutter.  

The first task was deciding what to make… 

The app 

It was important to me that the app be useful—not just to me, but hopefully others, too. 

A motorcyclist in helmet and high-vis sits on BMW motorbike with high-vis emergency services decals. The windshield, pannier and fairing, say 'BLOOD'.

In my spare time, I am a volunteer rider for Cornwall Blood Bikes. We courier essential medical supplies, blood, pathology samples, and more, between hospitals across the county. Operating 365 days a year, the charity is run by volunteers and is entirely funded by donations. It doesn’t cost the NHS a penny. 

As such, I decided to create an app to facilitate our work. 

The app has been designed to be useful for members. It: 

  • grants easy access to other rider contact details. 
  • provides a means to effectively contact the coordinator. 
  • allows users to carry out daily bike safety checks more easily. 

It is also a way to make members of the public aware of the service we provide, to donate, or to access necessary information about joining the team. 

What is Flutter? 

Flutter is an open-source mobile application development framework created by Google in 2017. It has been gaining popularity among developers ever since, and. It is now considered one of the best solutions for creating cross-platform apps. Based on the Dart programming language, Flutter uses a reactive programming model to build mobile apps. A key feature is its ability to create high-performance, visually attractive apps with smooth animations and gesture controls.  

With Flutter, developers can create apps that run on both iOS and Android devices, and it can also be used to build web and Windows or Linux apps. This makes it a versatile framework. It has a very active online community, providing a lot of support when needed. 

Within Bluefruit, we work in an Agile way. With a real focus on the quality of what we deliver, we: 

  • work in small iterations of features and functions. 
  • gain regular feedback. 
  • use what we’ve learned to build an enhanced product. 

In this way, I was able to get a basic working prototype up and running really quickly, using VS Code as my IDE and the Flutter ‘starter app’ as a jumping-off point. Then, I took small ‘slices’ of work that I wanted to implement, created some acceptance criteria for what success would look like, and took on one challenge at a time.  

Dart 

Learning Dart, the programming language that Flutter is based on, was the first challenge I faced. Although the learning curve was steep, the support from my team made it a lot less daunting and I was able to overcome this. They were always willing to answer my questions and offer guidance when needed.  

There are also a great variety of online tutorials, from code snippets to fully explained tutorials and step-by-step videos. As I gained more experience with Dart, I found it a relatively intuitive language. It was exciting to see how quickly I was able to implement new features and functionalities into my app.  

UX 

At each stage, I wanted to maintain a strong focus on design and the user experience (UX/UI). I had some experience with this on a previous client app we had worked on, yet it was quite hard starting completely from scratch with my own app. With a little patience and a lot of practice, I was able to create something that didn’t look too bad. I am pleased I kept a copy of all the designs along the way; it is really interesting to see how much the design progressed over time!  

A good way I found to maintain continuity across the app was to select five main colours and use those across the different pages. It really helped the flow and gave a more polished overall look. With each design decision, I kept the user in mind, making sure that the app was intuitive and easy to navigate.  

Testing 

Once the app started to take shape, I used Apple’s TestFlight to share it with half a dozen testers. This was a great way to get some fresh perspectives and make improvements. I got a lot of valuable feedback and suggestions, which helped me to make the app better with each iteration.  

My confidence grew, and I became more adventurous with the features I was including. I started using Firebase for authentication and login to add security to some of the personal data contained within the app, and added packages to enhance the UI (and yes, animated confetti falling down the screen was an essential feature!)   

An app in development is displayed on two phones, above a computer keyboard

I also learned how to write unit tests. Writing unit tests in Flutter is an important aspect of the development process. It allows you to test individual components of your app, ensuring that they are functioning as expected. This means you can catch bugs and errors early on, before they become a bigger problem, potentially saving you a lot of time and resources in the long run. Unit tests can help to increase the overall stability and quality of your app, as well as make it easier to maintain and update.  

The importance of this process became clear when testing on different-sized screens. The app had looked great on both the simulated Android screen and the real-life iPhone in my hand. However, the unit tests detected an overflow error on screens of a different ratio. I was able to detect this and resolve it before a single user got their hands on the product!  

Flutter provides a built-in testing framework that makes it easy to write unit tests for your app. The framework includes a variety of testing utilities, such as test runners and matchers, that can be used to test different parts of your app, including widgets, logic, and database interactions. Additionally, you can use a testing library such as Mockito to create mock objects to help you test your app in isolation.  

Learning outcomes 

All in all, it’s been quite a journey, and I’ve spent many late nights staring at code, but it’s been worth it. I’ve learned so much and grown in ways I never thought possible.  

I feel more confident in my ability to understand and analyse software, and I’ve gained a whole new skill set that I can apply to my job.  

Throughout the process, I’ve remained true to my analyst roots: I’ve maintained full documentation, planned user stories at each step, and kept an organised, prioritised backlog list of future features I am working on. 

I am really excited to see my app make its debut on the app stores, which will hopefully be very soon! 

Written by Tamsen Cooper. 

Did you know that we have a monthly newsletter?

If you’d like insights into software development, Lean-Agile practices, advances in technology and more to your inbox once a month—sign up today!

Find out more