Skip to main content
Fabien Fouassier

Case Study

Marcel

Took ownership of a Flutter mobile app suffering from severe stability issues and client distrust. Stabilized the platform, delivered critical features under tight deadlines, and restored technical reliability and client confidence.

Role

Senior Flutter Developer / Tech Lead

Timeline

3+ months (ongoing)

Year

2025

Category

Social Platform

Marcel hero image

Context & Constraints

Marcel is a mobile-first social platform centered around books, readers, and cultural institutions.

When I joined, the mobile application was already in production but suffering from severe stability issues, unpredictable behavior across releases, growing technical debt, and declining client confidence.

The project was at risk not because of missing features, but because the system had become difficult to reason about and unsafe to extend.

The Core Problem

The primary challenge was restoring reliability and trust in a live production system.

New features were expected under tight deadlines, but the existing codebase made changes risky: regressions were frequent, crashes were difficult to diagnose, and delivery speed was slowing despite increasing effort.

Without first stabilizing the platform, continued development would only amplify these problems.

My Role & Ownership

I joined as a Senior Flutter Developer, but quickly became the technical owner of the mobile application.

My responsibilities included:

  • Auditing the existing mobile codebase
  • Identifying root causes of instability
  • Defining technical priorities and recovery steps
  • Acting as the primary technical point of contact for the client
  • Delivering new features while restoring reliability
  • Coordinating with backend, QA, and product stakeholders

For most of the project, I was the only active mobile developer and owned the mobile delivery end-to-end.

Key Engineering Decisions

1. Early technical audit and alignment

During my first week, I conducted a full audit of the mobile application, documenting structural issues, risky patterns, and stability bottlenecks.

These findings were shared directly with the client, allowing us to align on priorities, reset expectations, and focus on stability before expanding scope.

This created a shared understanding of the problem and a clear recovery plan.

2. Stabilization before feature expansion

Rather than layering new features on top of an unstable foundation, I prioritized fixing crash sources, simplifying state management flows, reducing implicit coupling between features, and improving error handling and observability.

This immediately reduced production incidents and made the system predictable again.

3. Incremental feature delivery under constraints

Once stability was restored, I delivered several high-impact features under tight timelines, including improved search relevance via a scoring-based ranking system, user discovery combining interests and geolocation, professional account onboarding flows, and analytics integration with GDPR-compliant consent handling.

Each feature was implemented with an emphasis on isolation and testability to avoid reintroducing instability.

4. Client-facing technical ownership

Beyond code, I took responsibility for explaining technical trade-offs clearly, presenting findings and progress updates, advising on feasibility and sequencing, and rebuilding trust through transparent communication.

Over time, this shifted the relationship from reactive delivery to collaborative decision-making.

Outcomes & Impact

Although no hard product metrics were available, the outcomes were clear:

  • Significant reduction in crashes and production incidents
  • A mobile codebase that became maintainable and predictable again
  • Renewed confidence from the client in the platform's technical direction
  • Continued feature delivery without destabilizing the system

Today, the client regularly reaches out to me directly for technical discussions.

Tech Stack

FlutterFirebaseLaravelmysql
  • Mobile: Flutter / Dart
  • State management: Riverpod
  • Navigation: GoRouter
  • Networking: Dio, Retrofit
  • Backend services: Firebase (Crashlytics, Messaging)
  • Third-party services: Stream Chat, Maps & geolocation
  • Analytics: Meta analytics with consent handling
  • Backend: Laravel / PHP
  • Infrastructure: GCP

Related Links