The challenge
Evolving established products while people continue to depend on them. This requires understanding the existing codebase, team workflows, system integrations, and the effect of each change on users.
Senior Software Engineer II · Leading engineers on the mobile team · 2015–present · Ongoing
Growing with the products and the teams
I joined Nana in 2015 and helped build its customer application during the early stages. As the products grew, my work expanded into warehouse, delivery, and business applications, followed by engineering leadership and new systems and tools.
I also developed Nana’s AI customer-service agent for conversations and support ticket handling. It is available within Nana’s app and through a web browser. The system supports text and voice conversations and is used by the support team in production.
Evolving established products while people continue to depend on them. This requires understanding the existing codebase, team workflows, system integrations, and the effect of each change on users.
I choose approaches around the product, its existing codebase, and its integration needs. My work includes Kotlin and Java for Android, Flutter applications, React Native modernization, and service and AI integrations using Python and JavaScript.
These are selected examples of my work at Nana. Each record identifies my contribution: some work was delivered within a team, while other applications and systems were built independently within the company. The page includes both public applications and internal systems.
Developed Nana’s AI customer-service agent.
I developed Nana’s AI customer-service agent for conversations and support ticket handling. It serves Nana and Rasseed, and the support team uses it in production.
Bring Arabic and English customer conversations and support-ticket handling together through an AI agent available within Nana’s app and on the web.
What this work demonstrates: Developing an AI customer-service agent for real support workflows.
I used JavaScript to develop the conversation experience and connect it to existing support services. A colleague developed the ticketing backend.








Contributed across the application’s early build and later development phases.
I helped build the application during Nana’s early stages and returned across later phases to develop features and support releases.
Evolve a customer app over many product phases while protecting critical ordering journeys and production health.
What this work demonstrates: Developing and supporting a long-running product across multiple stages.
Native Android, Java, and Kotlin matched the mature codebase; Firebase and Crashlytics supported release visibility and production diagnosis.



Responsible for development and maintenance through much of my time at Nana.
The application supports order fulfillment and delivery teams across orders, barcode scanning, location, payments, and work metrics.
Modernize a decade-old field application while keeping order fulfillment, location, payments, scanning, and release continuity working.
What this work demonstrates: Sustained responsibility for a complex application, combining development, modernization, testing, and engineering leadership.
An incremental Java-to-Kotlin migration reduced rewrite risk; MVVM, Hilt, Room, Retrofit, Firebase, and targeted Compose adoption improved testability and maintainability.

Contributed to and modernized a team-owned application.
Nana’s business application supports purchasing workflows and live auctions.
Modernize a team-owned B2B application without destabilizing an established product, while delivering a responsive live-auction journey through an external service.
What this work demonstrates: Adding new capabilities to an established, team-owned product.
React Native was the existing platform choice, so the work combined responsible upgrades with a third-party auction-service integration for upcoming lots, real-time bidding state, and bid placement.



Built the warehouse-picking application within Nana.
An application for warehouse teams using Android scanner devices, with camera-based scanning as a fallback.
Make barcode-heavy warehouse picking reliable across specialized scanners, ordinary cameras, intermittent connectivity, and real-time task changes.
What this work demonstrates: Building applications around specialized devices and real operating conditions.
Flutter supports the Android scanner application, Riverpod organizes workflow state, Isar provides local data, and WebSockets with FCM handle task updates.

Independently designed and built within Nana.
An Android TV application displaying order-fulfillment stages on warehouse screens.
Make four live fulfillment stages readable at warehouse distance and resilient to short network drops.
What this work demonstrates: Designing application behavior around the warehouse environment.
Kotlin and Compose for TV supported a D-pad-first ten-foot interface; Room cached order state and Coroutines/Flow kept updates predictable.

Built internal tools for engineers and QA teams.
Tools for inspecting application behavior and reproducing issues in specialized workflows.
Reproduce hardware- and warehouse-dependent failures without requiring a physical scanner or live fulfillment environment.
What this work demonstrates: Building tools that support the team and make specialized workflows easier to test.
Small Python, web, ADB, barcode, and observability tools were chosen for fast iteration and direct integration with the systems under test.
