My preference is to start with the product constraint, then choose the technical approach. A mobile app usually has competing pressures: delivery speed, app size, startup time, offline behavior, platform-specific details, analytics, release risk, and the cost of maintaining the code after the first version ships. Good React Native work keeps those pressures visible instead of hiding them behind library choices.
When I review a codebase or plan a new build, I look for the parts that will create the most operational risk: slow screens, unclear state ownership, fragile navigation, native modules without a release plan, missing test coverage, oversized images, and app-store workflows that depend on manual steps. Fixing those problems early is usually cheaper than trying to recover after users start reporting crashes or performance issues.
That is also why the pages on this site link to each other. Architecture affects performance, testing affects release confidence, Expo choices affect native integration, and component-level decisions can show up later as accessibility, debugging, or maintenance problems. The goal is not to make the app look technically impressive. The goal is to make it stable, understandable, and easy for a real team to keep improving.
I usually work best with teams that already have a product direction and need stronger engineering execution: a cleaner React Native architecture, a difficult Expo or native integration, a performance problem that is hard to reproduce, or a release process that needs fewer surprises. My background across mobile apps, backend APIs, Next.js surfaces, and open source packages helps me connect those decisions instead of treating each screen or ticket as an isolated task.
If you are reading this as a founder, product lead, or engineering manager, the useful detail is not only the list of technologies. The useful detail is whether the engineer can notice risk early, explain tradeoffs clearly, and keep shipping without turning the codebase into something fragile. That is the standard I try to bring to mobile product work.
I also care about the parts of mobile work that are easy to ignore during a first build: crash reporting, app size, image handling, permission flows, API retries, release notes, store review details, and the small platform differences that make iOS and Android feel different in production. Those details decide whether a product feels stable after launch.
Most of my public writing here comes from problems I have seen in real apps. Some pages are about hiring and delivery, some are about Expo or React Native architecture, and some are about smaller UI details like search bars, progress bars, forms, and accessibility. Together they show how I think through product engineering rather than only listing projects.
For new work, I prefer clear scope, short feedback loops, and measurable release goals. That can mean a focused MVP, a rescue pass on an existing app, or a few weeks of targeted help around performance, testing, native modules, or app-store delivery.
I have learned that mobile product work goes better when the same person can understand the screen, the API, the release pipeline, and the native platform behavior behind it. A slow checkout, a camera permission issue, a broken deep link, or an image upload problem rarely belongs to only one layer. The value comes from tracing the full path and fixing the actual cause.
When I join a project, I try to make the next decision easier for the team. Sometimes that means writing a feature. Sometimes it means removing a risky dependency, simplifying state, documenting a build process, or showing why a native implementation is worth the extra work. Small decisions like that compound into an app that is easier to support.
This homepage links into my guides because the writing gives more context than a resume can. If you want to know how I think about React Native performance, Expo workflows, testing, architecture, component behavior, or production debugging, those notes are the best place to start before a call.
I also keep the site personal on purpose. I am not trying to look like a large agency. I want the page to make it clear what I actually do, where my experience is strongest, and how I can help when a team needs senior mobile engineering without adding a heavy process around the work.
A lot of my strongest work happens in the middle of a project, when the first version already exists and the hard questions start showing up. Why does one screen feel slow on Android but not iOS? Why does a release work locally and fail in CI? Why does a package upgrade break only one native module? Why does a flow look simple in design but become fragile once permissions, deep links, analytics, and offline states are included?
Those are the situations where experience matters. I like tracing the problem through the codebase, making the smallest useful change, and leaving the team with a clearer system than before. That might mean profiling a screen, rewriting an upload path, isolating a native crash, reducing render work, or turning a fragile manual release into a checklist the team can repeat.
I am also comfortable working close to product decisions. A technical answer that ignores the timeline, budget, user behavior, or team size is not very useful. When a founder or product lead asks whether to use Expo, bare React Native, native Android, native iOS, or a web surface, I try to explain the tradeoff in terms of the next release and the maintenance cost after launch.
For existing teams, I can usually add value without taking over the whole project. I can review architecture, ship a feature, unblock a build, fix a performance issue, write targeted tests, or help the team make a cleaner plan for the next few releases. The scope can be small if the problem is specific, or broader if the app needs deeper stabilization.
For new products, I care about getting the foundation right without overbuilding. That means choosing a stack the team can actually maintain, keeping navigation and state predictable, avoiding unnecessary native complexity, and setting up releases early enough that store delivery does not become a last-minute surprise.
Open source has shaped how I work too. Maintaining packages used by other developers teaches you to think about edge cases, documentation, compatibility, and support. It also makes you more careful about breaking changes because real apps depend on the code after it leaves your machine.
My preference is simple: build the product in a way that lets the next engineer understand it. Clear naming, sensible boundaries, useful logs, small components, predictable data flow, and enough tests around the important parts make a bigger difference than chasing every new library.
If you are comparing engineers, look for someone who can talk about risks without making the project feel heavier than it needs to be. The best mobile work is practical: it ships, it performs well enough on real devices, it is recoverable when something breaks, and it leaves the team more confident about the next release.
Prefer everything in one place? View the one-page resume ↗