---
# System prepended metadata

title: Exodus Mobile DX Improvement Plan
tags: [Exodus]

---

# Exodus Mobile DX Improvement Plan

## Table of Contents
1. [Minimal feature grouping](#minimal-feature-grouping)
1. [Logging improvements](#logging-improvements)
1. [Cloud tACKs](#cloud-tacks)
1. [Replace Metro Transformer](#replace-metro-transformer)
1. [Replace ESLint/Prettier with Biome](#replace-eslintprettier-with-biome)
1. [Use Bun as Test Runner](#use-bun-as-test-runner)
1. [QA Automation](#qa-automation)
1. [Split Tests into Unit, E2E, and Performance](#split-tests-into-unit-e2e-and-performance)
1. [Clean Up Tests logs](#clean-up-tests-logs)
1. [Run Tests in Parallel](#run-tests-in-parallel)
1. [Reduce Babel transformations to only required](#reduce-babel-transformations-to-only-required)
1. [Use ESBuild to minify instead of uglify](#use-esbuild-to-minify-instead-of-uglify)
1. [Clean Build Scripts in src/package.json](#clean-build-scripts-in-srcpackagejson)
1. [Enhanced Use of DEBUG Environment Variable](#enhanced-use-of-debug-environment-variable)
1. [Document Debugging Methods](#document-debugging-methods)
1. [SafeReport Toolings Enhancement](#safereport-toolings-enhancement)
1. [Automate Package Building with GitHub Actions](#automate-package-building-with-github-actions)
1. [Improve Android Emulator Reliability](#improve-android-emulator-reliability)
1. [Explore Alternative Technologies and Practices](#explore-alternative-technologies-and-practices)
1. [Stability and Performance Improvements](#stability-and-performance-improvements)

## Minimal feature grouping

- Local, gitignored env/config file to specify which features are enabled, to make the ones you're working on fast
  - **TODO**: First, try it out with some feature-set, e.g., for the exchange team, to see if it's worth it
  - Features in the SDK: can check the dependency graph. We can try to do it dynamically, or pre-create a bunch for different teams
    - NFTs team: Enable NFTs, disable everything else... except features upstream of NFTs
    - Exchange team: Enable exchange, disable everything else... except features upstream of exchange
- Mocking network requests
  - Measure with/without network mocking, decide whether to explore further
- V2: Don't transpile/bundle anything that's not needed

| Criteria          | Description                                             |
| ----------------- |:------------------------------------------------------- |
| Possible Benefits | Faster development times, easier troubleshooting        |
| Blockers          | None                                                    |
| Effort Required   | High                                                    |
| Status            | Research                                                |
| Priority          |                                                         |

## Logging improvements

Context: Some random package can pollute logs globally

- [x] Hijack console.log and reroute to the `console:log|warn|error` namespace using the `debug` package
- [x] ~~use `DEBUG` for log filtering.~~ A config file has been implemented instead.
~~- [ ] Make debug.enable() accessible from the console - Tested this and it didn't work.~~
- [x] DEBUG=* enables logs for metro itself as it's running (biblical flood) AND for the Exodus app. We should separate those.
~~- [ ] Inform developer about DEBUG value early in startup, with colours. - Not necessary now that we have a configuration file~~
- [x] DEBUG value caching issue solved with new configuration file
~~- [ ] Command line utility to hot reload with a new DEBUG scope~~
- [x] Debug config file that can be updated and hotreloaded with new scope
- [x] Log levels, ie. log whould also show warn and error. warn whould show warn and error.
- [x] Adjust log settings to minimize UI disruption from warnings, including setting `LOG_BOX_MINI=true` and managing the YellowBox ignore list.
- [x] Truncate long messages
- [x] Format JSON in messages
- [x] Provide link/command near truncated messages to see the full messages
- [x] Deduplication: Don't see the same statement multiple times
- [x] Propose a standardized format for console warnings to include team handles.
- [x] Make log truncation and console.log file creation optional
- [x] Provide the ability to control LogBox notifications via dev pref file and developer menu
- [ ] Combine dev-preferences with debug-namespaces
- [ ] Use the dev-preferences template for default values

| Criteria          | Description                               |
| ----------------- |:----------------------------------------- |
| Possible Benefits | Cleaner log output, easier error tracking |
| Blockers          | None                                      |
| Effort Required   | Medium                                    |
| Status            |                                           |
| Priority          | High                                      |

## Cloud tACKs

Figure out what's missing for this to work and take it over the finish line https://github.com/ExodusMovement/exodus-mobile/pull/17448

Stretch goal: Use something like appetize.io so people can test in a simulator in the browser

| Criteria          | Description                                                   |
| ----------------- |:------------------------------------------------------------- |
| Possible Benefits | Improved remote testing capabilities, faster iteration cycles |
| Blockers          | None                                                          |
| Effort Required   | High                                                          |
| Status            | In progress                                                   |
| Priority          |                                                               |

## Replace Metro Transformer

**TODO**: Open an issue with current blockers and keep it updated

Goals:
- Improve transpilation perf: Need to first measure this
- Improve runtime perf: Whether modern features are actually faster
- Simplify build pipeline
- Sourcemaps would get simplified, debugging should be simpler/more accurate

Main blockers:
- [MAJOR] Limited Hermes features: https://github.com/facebook/hermes/blob/main/doc/Features.md
- JSX

| Criteria          | Description                                                  |
| ----------------- |:------------------------------------------------------------ |
| Possible Benefits | Improved build and runtime performance, simplified debugging |
| Blockers          | Limited support in Hermes, dependency on JSX                 |
| Effort Required   | High                                                         |
| Status            | Initial research                                             |
| Priority          |                                                              |

## Replace ESLint/Prettier with Biome

[biome](https://biomejs.dev/)

| Criteria          | Description                                                                |
| ----------------- |:-------------------------------------------------------------------------- |
| Possible Benefits | Potential for improved linting performance, streamlined code quality tools |
| Blockers          | Compatibility with custom plugins                                          |
| Effort Required   | Medium                                                                     |
| Status            | Initial research                                                           |
| Priority          | Low                                                                        |

## Use Bun as Test Runner

Previous attempt: https://github.com/ExodusMovement/exodus-hydra/pull/3944

Test runtime is 6m on mobile, 1m in hydra. There's a possibility of 10x improvement.

| Criteria          | Description                                            |
| ----------------- |:------------------------------------------------------ |
| Possible Benefits | Faster test execution, improved developer productivity |
| Blockers          | Current test suite setup                               |
| Effort Required   | Medium                                                 |
| Status            | Initial research                                       |
| Priority          | Low                                                    |

## QA Automation

Contribute to Maestro to make finding elements by testId easier

https://maestro.mobile.dev/

| Criteria          | Description                                                        |
| ----------------- |:------------------------------------------------------------------ |
| Possible Benefits | Improved test automation capabilities, easier maintenance of tests |
| Blockers          | None                                                               |
| Effort Required   | Medium                                                             |
| Status            |                                                                    |
| Priority          |                                                                    |

## Split Tests into Unit, E2E, and Performance

| Criteria          | Description                                         |
| ----------------- |:--------------------------------------------------- |
| Possible Benefits | Better test organization, focused test environments |
| Blockers          | None                                                |
| Effort Required   | Medium                                              |
| Status            |                                                     |
| Priority          |                                                     |

## Clean Up Tests logs

| Criteria          | Description                                 |
| ----------------- |:------------------------------------------- |
| Possible Benefits | Cleaner logs, reduced noise in test outputs |
| Blockers          | None                                        |
| Effort Required   | Medium                                      |
| Status            |                                             |
| Priority          |                                             |

## Run Tests in Parallel

| Criteria          | Description                                 |
| ----------------- |:------------------------------------------- |
| Possible Benefits | Faster test runs, improved CI/CD throughput |
| Blockers          | None                                        |
| Effort Required   | Medium                                      |
| Status            |                                             |
| Priority          |                                             |

## Reduce Babel transformations to only required

| Criteria          | Description                                   |
| ----------------- |:--------------------------------------------- |
| Possible Benefits | Reduced build times, optimized resource usage |
| Blockers          | None                                          |
| Effort Required   | Medium                                        |
| Status            | Initial research                              |
| Priority          |                                               |

## Use ESBuild to minify instead of uglify

| Criteria          | Description                                         |
| ----------------- |:--------------------------------------------------- |
| Possible Benefits | Faster minification, potentially better performance |
| Blockers          | None                                                |
| Effort Required   | Low                                                 |
| Status            | Initial research                                    |
| Priority          |                                                     |

---
## Clean Build Scripts in src/package.json

- Review and document the build commands in `src/package.json`.
- Add a new command for building a prod-like app for debugging that includes `PROD=true` and `scripts/touch-google-services.sh prod`.

| Criteria          | Description                                              |
| ----------------- |:-------------------------------------------------------- |
| Possible Benefits | Simplifies the build process, improves build consistency |
| Blockers          | None                                                     |
| Effort Required   | Moderate (requires updating scripts and documentation)   |
| Status            |                                                          |
| Priority          |                                                          |

## Enhanced Use of DEBUG Environment Variable

- Implement a method to apply `DEBUG` settings in real-time, without needing to restart the metro server.

| Criteria          | Description                                        |
| ----------------- |:-------------------------------------------------- |
| Possible Benefits | Faster debugging, increased developer productivity |
| Blockers          | None                                               |
| Effort Required   |                                                    |
| Status            | Completed                                          |
| Priority          |                                                    |

## Document Debugging Methods

- Create comprehensive documentation for the `DEBUG` environment variable, hydra debug API, global exodus object, and other debugging tools and code snippets.

| Criteria          | Description                                  |
| ----------------- |:-------------------------------------------- |
| Possible Benefits | Improved onboarding and debugging efficiency |
| Blockers          | None                                         |
| Effort Required   |                                              |
| Status            |                                              |
| Priority          |                                              |

## SafeReport Toolings Enhancement

- Continue development of the SafeReport dashboard and related tools to better support customer issue debugging.

| Criteria          | Description                                                 |
| ----------------- |:----------------------------------------------------------- |
| Possible Benefits | Enhanced capability to diagnose and resolve customer issues |
| Blockers          | None                                                        |
| Effort Required   |                                                             |
| Status            |                                                             |
| Priority          |                                                             |

## Automate Package Building with GitHub Actions

- Set up GitHub Actions to automate the building and publishing of platform packages.

| Criteria          | Description                                            |
| ----------------- |:------------------------------------------------------ |
| Possible Benefits | Streamlined development process, reduced manual errors |
| Blockers          | None                                                   |
| Effort Required   |                                                        |
| Status            |                                                        |
| Priority          |                                                        |

## Improve Android Emulator Reliability

- Address issues with the Android emulator startup process to ensure consistency and reliability.

| Criteria          | Description                        |
| ----------------- |:---------------------------------- |
| Possible Benefits | More reliable testing environments |
| Blockers          | None                               |
| Effort Required   |                                    |
| Status            |                                    |
| Priority          |                                    |

## Explore Alternative Technologies and Practices

- Assess the feasibility and benefits of switching to or incorporating features from Expo, focusing on support for extra modules and system stability.

| Criteria          | Description                                                  |
| ----------------- |:------------------------------------------------------------ |
| Possible Benefits | Easier management of native dependencies, enhanced stability |
| Blockers          | None                                                         |
| Effort Required   |                                                              |
| Status            |                                                              |
| Priority          |                                                              |

## Stability and Performance Improvements

- Address frequent app crashes, particularly on refresh, and investigate causes of performance issues with older test wallets.
- Explore alternatives for package management to resolve issues with `node_modules` cleanup, potentially moving to yarn berry with a legacy linker.

| Criteria          | Description                              |
| ----------------- |:---------------------------------------- |
| Possible Benefits | Improved app reliability and performance |
| Blockers          | None                                     |
| Effort Required   |                                          |
| Status            |                                          |
| Priority          |                                          |
