Native Android apps that respect the platform.
A senior studio building Material 3 apps for Pixel, Samsung, and the long tail of Android. Kotlin, Jetpack Compose, Coroutines, Room — written by humans who use Android phones every day, not as a port of an iOS build.
Concept · AndroidStudio concepts, hand-built in code — not screenshots, not client logos.
- Jetpack Compose
- Kotlin Coroutines
- Room + DataStore
- Material 3 Expressive
- Wear OS 5
- Glance widgets
- Play Billing 7
- Hilt
- WorkManager
- CameraX
An Android team you can hire, not a consultant who tries.
We build, ship, and maintain Android apps. Compose, Wear, Auto, foldables. We're hands-on engineers, not strategists with decks. Below: what we practice every day.
Compose-first product engineering
Modern Compose UIs with proper state hoisting, predictable navigation, and components that survive a redesign. We avoid ViewBindings — and we don't apologize for it.
Form-factor & adaptive UI
Pixel Fold, Tablet, foldables across the Android ecosystem, Chromebook, Wear OS, Auto, Cast. WindowSizeClass and adaptive scaffolds — not stretched phone UI.
Performance & power discipline
Macrobenchmark on every PR. Baseline Profiles by default. JankStats budgets in CI. Cold start budgets enforced. Battery historian sweeps before every release.
Background work that respects the OS
WorkManager done right. Foreground service rules. Doze and App Standby compliance. Predictive back, edge-to-edge, gesture nav. Behaves on stock Android, OEM skins, and Pixel.
Play Store craft & launch
Listing, screenshots, store experiments, staged rollouts, Pre-Launch reports, In-App Updates, Play Integrity. We know the Console intimately.
Native + Kotlin Multiplatform
When KMP makes sense, we use it. When it doesn't, we don't pretend. Shared business logic with iOS via KMP; UI stays platform-native.
Every commit, on the Internal track by lunchtime.
Continuous delivery on Android isn't optional — it's how you survive the device matrix. Our standard CI runs on every push: Compose tests, JankStats budgets, ktlint/detekt, Macrobenchmark, Baseline Profile, R8, sign, bundle, push to Play Internal. Below, a hand-built demo of that pipeline on one of our concept apps — rendered in code, not screenshotted.
Recent builds
Cold start p50 · last 28 builds (ms)▼ trending down
~ build #412 log
14:02:11 > Task :app:assembleRelease14:02:12 Resolving dependencies (BOM-aligned · 142 modules)…14:02:14 Compiling Kotlin → :app (386 source files, K2 compiler)14:02:31 ✓ assembleRelease — 19.4s · 0 errors · 0 warnings14:02:32 Running tests on Pixel 9 Pro (Android 15, API 35)…14:02:48 ✓ ForagerUnitTests: 248 passed (16.1s)14:02:49 ✓ ForagerComposeTests: 32 passed (8.4s)14:02:50 ✓ ForagerWearTests: 64 passed (4.0s)14:02:51 ktlint + detekt: 0 violations14:02:51 Code coverage: 81.6% (+0.4% vs main)14:02:52 Macrobenchmark · cold start p50: 1.18s14:02:53 JankStats · main thread frames > 16.6ms: 0.4%14:02:54 Generating Baseline Profile…14:03:09 ✓ Bundle (.aab) — 14.7s · 28.4 MB · R8 minified14:03:10 Validating Play asset bundle · adaptive icons → ✓14:03:11 Signing with Play App Signing (upload key)14:03:14 Uploading to Play Console (Forager 4.2.0/412)…14:03:38 ✓ Promoted to Internal testing track14:03:39 ⤷ Pre-launch report queued · 23 device matrixThree concepts that show the standard we hold Android to.
Three studio concepts, designed and built in-house as capability demonstrations — Material 3 discipline, form-factor range, native detail. Every rendering below is hand-built in code, not a screenshot. The production system we build and operate for real is our own SaaS platform.
A concept foraging companion for the Pacific Northwest — species ID, season tracking, on-watch live walks with haptic cues, offline maps. Built to show how we treat a phone-plus-Wear pairing.
A concept trail navigator for backpackers — offline topo, foldable two-pane on Pixel Fold, Wear-led turn-by-turn, low-battery survival mode. Quiet, slow design language for big country.
A concept slow-radio app — curated mixes for hours, not algorithms for seconds. Android Auto and Wear playback, ExoPlayer-driven crossfades, Play Billing subscriptions.
A boutique by design — a team, not a roster.
Every engagement gets senior engineers and a founder in the room. No offshore overflow, no “we'll staff it next week.” These are the people who lead your build.

11+ years of engineering, including Amazon. Sam leads the engineering on mobile builds — architecture, code review, and the standard every release has to clear before it ships.

Spencer owns the technical direction of the studio — systems design, AI/ML integration, and the tooling that keeps builds fast and releases boring.
Standards we put in writing, in every contract.
We don't decorate this page with borrowed praise. Instead, here are the six operating guarantees we commit to — in writing — on every engagement. Hold us to them.
You own the repo from day one.
Your code lives in your organization from the first commit. No escrow, no handover ceremony at the end, no leverage held over you. Walk away any time and everything comes with you.
In every contractA founder on every engagement.
You never get handed to an account manager. A co-founder is in the room — in the code, in the demos, reachable directly — from kickoff to launch and beyond.
In every contractSenior people, start to finish.
A deliberately small senior team — no offshore overflow, no rotating cast. The people you meet on the first call are the people who do the work. We say no to projects rather than dilute that.
In every contractA weekly demo, every Friday.
Working builds, not slideware. Every Friday you see the product run — on device — and steer the next week's work. If there's nothing to show, we tell you why, in plain language.
In every contractPerformance is the shipping bar.
We hold our web work to Lighthouse 100 and our Android work to the same discipline: cold-start budgets, jank budgets, and benchmarks in CI. Slow doesn't ship.
In every contractReply within one business day.
Every message gets a real answer from a real person within one business day — during the sale, during the build, and after launch. Usually much faster.
In every contractFixed-price discovery first. Then a steady rhythm.
Most projects follow this rhythm. Bigger ones get more sprints; smaller ones collapse into a single phase. Every project starts with a fixed-price discovery sprint so we both know what we're agreeing to.
Discovery sprint
Two days on-site (or remote video) with your team. Audit existing code if any. Device matrix planning. Architecture proposal. Fixed price, fixed scope.
Design + foundation
Material 3 design system tuned to your brand. Compose component library. CI pipeline standing up. First playable build on Internal track by week 4.
Build sprints
Two-week sprints with a working demo every Friday — on device, not slideware. A founder stays on the engagement throughout. Daily Slack channel.
Launch + retainer
Phased rollout via Play Console (1% → 5% → 20% → 100%). Crash-free target ≥99.9%. Optional retainer for new versions, A/B tests, OS upgrades.
Honest answers, on the record.
The questions we get on every first call. If yours isn't here, write to us — we'll write back within one business day, in plain language, from a real person.
How does pricing work?
The discovery sprint is fixed price, with deliverables you keep either way. After that, projects run time-and-materials with weekly burn caps so there are no surprises. We scope honestly on the first call — and we'd rather tell you a number is wrong for us than grow into it badly.
Do you only do Android, or full mobile?
We build native for both platforms — the same senior engineers, not separate silos. Where it fits, we use Kotlin Multiplatform to share business logic between Android and iOS; where it doesn't, we say so and keep the platforms honest.
Can you work with our existing Android team?
Yes — and we like it. On co-builds we bring senior engineers, design, and tooling into your existing team and lift the codebase together. We pair, we PR-review, we transfer everything. You own the repo from day one either way.
How fast can you start?
A discovery sprint can start within two weeks. A full build typically starts four to six weeks after the discovery sprint completes — most of which is contract and onboarding, not waiting for capacity.
What's your stance on Flutter / React Native / Cordova?
We don't take them on. Cross-platform UI tools have a place; that place is not in the apps we ship. We are an opinionated native shop — if a cross-platform framework is genuinely the right call for you, we'll say so and point you elsewhere.
Do you maintain after launch?
Yes. We offer a monthly retainer after launch, sized to your scope, covering OS upgrades, A/B tests, new device support, and small features. Cancel anytime, 30 days notice.
Where are you based?
Bothell, Washington, with deep PT/ET overlap. We travel — discovery sprints are usually on-site if you're anywhere reachable in a day.
Let's build something worth keeping on your home screen.
A 30-minute call, no deck, no sales engineer. A founder and a senior engineer, and a fast read on whether we're the right team for what you want to ship.
- Studio
- Odins3
- Founded
- 2017 · Bothell, WA
- Team
- Senior · end to end
- In production
- SaaS we built & run
- Demos
- Weekly · Friday
- Reply time
- 1 business day
- support@odins3.com
Tell us what you're building.
Six quick steps, two minutes. A senior team member reads every brief — not a form auto-router — and replies within one business day.
Tell us about your company.
The basics — so we walk into the call already halfway up to speed.