NuStep’s Software Journey

by | Nov 20, 2025 | blog

NuStep’s Software Journey

At NuStep, we build recumbent cross trainers and inclusive exercise equipment for rehabilitation centers, senior living communities, and homes. Our mobile app connects to the equipment via Bluetooth, tracking real-time workout data including steps, calories, distance, and heart rate.
 
For years, our mobile app faced maintenance challenges. We had two separate native codebases—iOS and Android—both maintained by external contractors. Bluetooth bugs took weeks to fix on one platform, then weeks more on the other. Features launched one platform earlier than the other, leaving users frustrated. The UI hadn’t been touched since 2017. Something had to change.
 
We wanted to bring development in-house. We had Android expertise from building custom software for our exercise equipment, but for iOS, we had no in-house skill. My boss, Heath, mentioned these challenges to me frequently. We wanted to hire additional headcount to work internally on our mobile apps, but the budget wasn’t there.
 
That’s when I pitched Flutter as a solution. I had spent the summer of 2020 teaching myself Flutter from a Udemy course to build an app for my church. Being able to build once and deploy everywhere was a major benefit. I wanted to use this new skill to help NuStep as well.
 
Heath made me an offer. He wanted to hire an intern for me to teach them Flutter and rebuild our mobile app from scratch. This was while I was a mid-level developer. Nervous yet excited, I accepted.

The Timeline

By December 2020, it was official that Antonio, a friend from New York whom I knew through church, would start working as an intern at NuStep. He was a recent Computer Science graduate. He began remotely at the beginning of 2021 as he worked on transitioning from New York to Michigan.
 
For the next six months, we sat across from each other every day, pair-programming our way through rebuilding the entire NuStep mobile app. He was learning Flutter for the first time. I was learning how to architect a production app and mentor someone through the process. Neither of us had done this before, but we had the right tools and the right motivation.

Building the App

The first thing we tackled was the core feature of the app. Bluetooth connectivity. Our equipment streams workout data in real-time: miles, calories, steps, heart rate, all of it. If Bluetooth doesn’t work, the app is useless.
 
I was concerned we’d have to write platform-specific code for iOS and Android. But then we found Flutter Blue Plus (formerly Flutter Blue). It just worked. No platform channels. No custom implementations. We added the package, wrote the Dart code, and suddenly we had Bluetooth connectivity on both platforms. That was a pivotal moment. The Flutter ecosystem actually delivers on what it promises.
 
We went all-in on Firebase. Firestore replaced the old Firebase Realtime Database setup. Auth handled logins. Storage held PDFs for user guides and terms of service. Crashlytics caught bugs before users reported them. Analytics showed us what people actually did in the app.
 
The best part? The native apps had been running two separate Firebase instances—one for iOS, one for Android. With Flutter, we consolidated everything into one. No more maintaining duplicate data. No more wondering if the databases were in sync.
 
We hired the same design company that created the UI for our exercise equipment. They delivered Adobe XD files, and Antonio and I worked through implementing every screen, every measurement, every interaction. For the first time in years, iOS and Android looked identical. Same modern design. Same user experience. Same visual language as our hardware.
 
When we pushed internal beta builds via TestFlight and the Android beta track, management’s reaction was immediate: “Wait, this looks great on BOTH platforms?” That’s when they got excited.

Migrating Users

We couldn’t just flip a switch. We had a significant number of users with years of workout history sitting in those two separate Firebase instances. We needed a way to migrate their data without losing anything.
 
We built a custom admin panel—also in Flutter, using Flutter Web. When users requested their data be migrated via a simple form, we’d look up their account in both old databases, match them to their new account, and execute the import. We could watch the progress bar in real-time as workouts, achievements, and settings copied over.
 
It worked. No mass migration headaches. Just a steady, controlled rollout. Requests were handled one by one, until everyone who wanted their history back got it.

The Results

Six months later, we shipped. Today, our iOS downloads have increased by 40% and Android jumped by 137%. Our app store ratings climbed 30%. People noticed. The app felt modern and it worked consistently across platforms.
 
But the bigger win was what happened internally. Before Flutter, we had separate contractor teams for iOS and Android. Now, Antonio and I manage the mobile app. We brought everything in-house. We own our roadmap. When a bug shows up, we fix it and ship to both platforms simultaneously. When we want to add a feature, we build it once and it works everywhere.
 
No more contractor delays. No more miscommunication. No more waiting weeks for a fix that should take hours.

What We Learned

  1. The Learning Curve Isn’t Steep: Teaching Antonio, a fresh college graduate, Flutter from scratch proved that the barrier to entry is low. We went from zero Flutter knowledge to a production app in six months.
  2. Hot Reload Is a Productivity Multiplier: Debugging became less painful. The tooling just worked. Coming from native Android development, Flutter felt like a productivity multiplier.
  3. The Ecosystem Delivers: We didn’t write a single line of native Bluetooth code. We didn’t build custom Firebase integrations. We didn’t spend weeks on platform-specific features. Flutter packages handled 90% of what we needed, saving us months of work.
  4. Design Consistency Is a Competitive Advantage: Our customers noticed. The app finally felt cohesive with our brand. iOS and Android users got the same experience. Our ratings improved because the product was better.
  5. Ownership Changes Everything: We control quality. We set priorities. We move fast when needed. That ownership is hard to quantify, but the business impact is real.

For Teams Considering Flutter

If you’re managing two native codebases and facing similar challenges, here’s what I’d recommend:
  • Build a proof of concept. Show leadership it works, then scale from there.
  • Lean on the ecosystem. Someone has probably already solved your problem with a Flutter package. Don’t reinvent the wheel.
  • Pair with someone. Teaching Flutter forced me to understand it deeply. Mentorship accelerates learning for everyone. Antonio learned Flutter, I learned how to architect a production app, and we both grew.
  • Don’t wait for perfection. Ship, learn, and iterate. That’s how you build momentum.
  • Design consistency is Flutter’s superpower. Use it. Make both platforms speak the same design language. Your users will notice.

What’s Next

Flutter proved itself as the foundation of our mobile strategy. We’re exploring opportunities to leverage Flutter in new and exciting ways to allow us to deliver a seamless experience across the entire NuStep ecosystem.
 
Our goal isn’t just technical efficiency. It’s about reducing complexity so we can focus on what matters: creating meaningful experiences for our customers and building a platform that adapts as their needs evolve. Flutter gives us the foundation to innovate quickly while maintaining the quality and reliability our users expect.

The Bottom Line

Flutter transformed how we build software at NuStep. What started as a response to contractor chaos became a strategic advantage. We’re leaner. We’re faster. We’re more capable. Our customers are happier. Our app store ratings are higher. Our team has ownership over what we build.
 
If you’re stuck maintaining multiple native apps and wondering if there’s a better way, there is. Flutter.

About Aaron Crutchfield

Aaron Crutchfield serves as the Software Engineering Manager at NuStep, LLC, where he leads the vision and execution behind NuStep’s mobile and connected technology ecosystem. He spearheaded the company’s transition to Flutter, moving from a fragmented, contractor-managed dual codebase to a unified, in-house cross-platform architecture—dramatically improving efficiency, consistency, and long-term scalability. With a leadership style rooted in both innovation and purpose, Aaron is dedicated to building technology that expands access. His work ensures NuStep's exercise equipment delivers inclusive, intuitive, and reliable digital experiences for users of all abilities.