Skip to content

Home / Hire engineers / Android developer

An Android developer keeps your Kotlin app working across devices and API levels

Your Android users hold phones from many makers on several Android versions; some fold, some are tablets. Google Play raises its target API level every year and checks each update against its policies. Most teams need one developer who writes Kotlin and Jetpack Compose that holds up across that range, keeps the app quick from its first launch and gets every update through Play Console. That is the role we staff.


Profiles in three daysYou interview and chooseEngineers in Poland and Ukraine

When to hire an Android developer, and what they take on first.

Most of these start on a subset of devices or at a Google Play check, where the same Kotlin behaves differently or an update stops going out.

  1. Crashes and ANRs on some models

    Android vitals shows crashes and ANRs bunched on a few models; past Play's thresholds, an app is shown less.

    The work

    • Rates split by model and OS version
    • Memory and wake locks checked per model
    • Vendor workarounds kept behind a check
  2. Slow the first time it opens

    After an install or update the app starts slowly and stutters, because Android interprets code before compiling it.

    The work

    • A Baseline Profile for startup
    • Key journeys measured with Macrobenchmark
    • Startup work deferred until needed
  3. A new target API changes behaviour

    Google Play now requires Android 16 for updates, which removes the edge-to-edge opt-out and stops calling onBackPressed.

    The work

    • System-bar insets handled on every screen
    • Back handling moved to OnBackPressedCallback
    • Behaviour changes checked per API level
  4. Tablets and foldables ignore the lock

    On Android 16, portrait-only and fixed-size settings stop applying on large screens, so layouts stretch or clip.

    The work

    • Layouts switched by window size class
    • Two-pane layouts on wide screens
    • Split screen and desktop windows tested
  5. An update held over a permission

    Play Console can block an update until a sensitive permission is justified, such as broad photo access or background location.

    The work

    • Photo Picker in place of media permissions
    • Background location swapped for foreground
    • Declarations written for each service type
  6. Java and XML views still in the app

    Much of the app is still Java and XML layouts, and every change takes longer than it should.

    The work

    • Java moved to Kotlin file by file
    • New screens in Compose inside views
    • Logic moved out of activities into ViewModels

What an Android change must pass before release.

Five stages between a Kotlin change and the production track. Debug builds hide a class of bugs, so the third stage builds the app as users will get it, shrunk and obfuscated by R8.

  1. 01

    Compose screens

    Passed

    Screens in Jetpack Compose, with their logic in Kotlin coroutines scoped to each ViewModel, and previews for the smallest and largest supported widths.

    Android Studio, Jetpack Compose
  2. 02

    Lint and tests

    Passed

    Lint flags calls to APIs newer than your minimum version, and unit tests cover each ViewModel with fakes supplied through dependency injection.

    Android Lint, JUnit, Turbine
  3. 03

    Release build

    Blocked

    Built with R8 shrinking and obfuscation on, and UI tests run against it, since code read by reflection can break only in this build.

    Gradle, R8, Espresso
  4. 04

    Pre-launch report

    Waiting

    Google Play installs the uploaded bundle on devices in its test lab and reports crashes, performance and accessibility issues, with screenshots, before any user sees it.

    Play Console, Firebase Test Lab
  5. 05

    Production track

    Waiting

    Released as an app bundle, so Google Play builds an APK for each device configuration, and rolled out in stages while Android vitals is watched by model.

    Android App Bundle, Play Console, Android vitals

The layers behind each Compose screen.

The pipeline is named stage by stage above. Each Compose screen also leans on the same few layers: its state, local storage, dependency injection, background work and the network.

Screen state

State held in ViewModels and exposed as flows, so a rotation or a fold does not lose what the user entered.

  • ViewModel
  • Kotlin Flow

Offline storage

Room for records people browse offline and DataStore for settings, with each schema change shipped as a tested migration.

  • Room
  • DataStore

Dependency injection

Hilt supplies ViewModels, repositories and workers, so tests swap in fakes without touching the screens.

  • Hilt
  • Koin

Background work

Uploads and syncs that must survive an app restart or a reboot go through WorkManager, with constraints for network and battery.

  • WorkManager
  • Foreground services

Network and JSON

Type-safe HTTP calls through Retrofit or Ktor, and JSON parsed by code the Kotlin compiler generates rather than by reflection.

  • Retrofit
  • Ktor
  • Kotlin Serialization

Build logic

Shared Gradle convention plugins and one version catalogue, so every module builds the same way and dependency updates happen in one file.

  • Gradle
  • Convention plugins

Seniority, and what each level owns

Levels can be read from the files a developer is trusted to change alone: a feature module, the R8 rules and startup profiles, or the module graph itself.

Mid · 3–5 years
Builds Compose screens, their ViewModels and tests inside an existing feature module, following the app's architecture. Keep rules, permission declarations and anything that changes the target API level go to a senior developer for review.
Senior · 5–8 years
Writes and approves R8 keep rules and Baseline Profiles, reads Android vitals by device model and signs off each move to a new target API. Can take a Java and XML app to Kotlin and Compose without stopping releases.
Lead · 8+ years
Splits the app into modules, owns the shared Gradle build logic and decides which form factors the app supports beyond phones. Your CTO talks to this developer about minimum Android versions and what Google Play's next yearly requirement will cost.

AI-assisted Android development, checked where a debug build shows nothing.

Most Kotlin an agent drafts is ordinary code that reviews quickly. The expensive mistakes sit where a preview and a debug build look fine: shrinking rules, recomposition while scrolling, work on the main thread and the permissions an update declares. Those stay with the developer.

PR · order history in ComposeDrafted with an agent

Example · release build, R8 on

  • Added Order history screen in Composestable list keys
  • Changed Baseline Profile regeneratedadds new journey
  • Added Macrobenchmark for the listframe timing
  • Added Keep rule for whole model packageHuman decision

Gson crash fixed by a package-wide keep rule

Senior Android developerFound the classes Gson reads by reflectionRule too broad
Use @SerializedName

Tests and benchmarks drafted with each screen

Agents draft unit tests, Compose UI tests and a Macrobenchmark for each new screen, so coverage and startup numbers arrive with the feature, not months later.

Recomposition and main-thread work checked

Agent-written Compose can look right in a preview and still recompose on every scroll or read a file on the main thread. The developer checks both before approving.

Keep rules and permissions stay human decisions

R8 keep rules, permission declarations and target API moves are decided by the developer. An agent may suggest keeping a whole package; the developer keeps only what reflection needs.

From your requirements to matching developers in 3 working days.

You do not need to enter a long recruitment process before you know whether we have the right people.

Senior Android developer

9 years · ImproveIT engineer

  • Kotlin
  • Jetpack Compose
  • Coroutines
  • Baseline Profiles
  • R8 keep rules
English
C1
Overlap with CET
Full working day
Available
From next month
Rate
In the proposal

Recent projectMoved a photo-printing app from Java to Kotlin

Example profile · day 3Ask for an interview
01

Tell us what you need

Send the role, stack, seniority, required experience, working-hour overlap, team size, and expected start date.

02

Get matching profiles

Within three working days, we send relevant profiles with CVs, project experience, English level, availability, and rates.

03

Interview the developers yourself

Use your own technical interview and selection process. Meet the people who would actually join the team and reject anyone you are not confident about.

04

Start working together

Once you choose, we handle the contract and onboarding. Your developers join your repositories, standups, tooling, and delivery process.

Choose the engagement model that fits the gap.

You can hire software developers through an outsourcing model that matches how much ownership, capacity, and flexibility your team needs. Most clients start with one engineer and grow. Roles and stacks are further down the page.


01

Ad-hoc staff augmentation

One engineer or several, embedded in your team and managed by you. The most common way clients start with us.

Best for a named capability or capacity gap you already understand.

Speed
Profiles in 3 days
Pricing
Per hour
Managed by
You
02

Dedicated team

A complete team for a product, a module or a roadmap stream — engineering, QA, DevOps and design as the work needs it.

Best for stable delivery capacity without hiring every role in-house.

Speed
2–4 weeks to assemble
Pricing
Monthly per person
Managed by
You, or jointly with our lead
03

Recruitment

We recruit for a skill set we do not have on the bench, against your requirements, and the person joins on your contract.

Best for a niche stack, a rare seniority level, or a role you keep failing to fill locally.

Speed
2–4 weeks
Pricing
Per hire
Managed by
You
04

Build, operate, transfer

We hire and run the team in Poland or Ukraine, then hand it over to you as your own staff for direct contracts when you are ready.

Best for opening a development centre in Europe without setting one up yourself first.

Speed
3-4 weeks to build
Pricing
Monthly per person, plus a transfer fee
Managed by
Us, then you

The reason to outstaff is speed. The reason to stay is quality.

Netguru, a 500-person Polish consultancy whose own clients include UBS, has staffed projects with our engineers for more than 8 years. They could hire anyone.

Staff augmentationNetguru, 2018-ongoing

Read the Netguru case study
8+years

Netguru has staffed projects with our engineers

500+people

at Netguru, whose own clients include UBS

Where our engineers rebuilt and stabilised Android apps.

Both were staff augmentation for French photo-printing apps on iOS and Android. Each case page reports results for the apps as a whole, not Android alone.

Mobile team augmentationPhotoweb

Java to Kotlin, MVVM in place of an outdated architecture, and a 98% crash-free rate

8 engineersTeam
2018 - 2021Period

Photoweb needed a team to take over its mobile apps within two weeks, including a handover on site in France. Our engineers moved the Android app from Java to Kotlin, replaced the outdated architecture with MVVM and added analytics at every stage.

Read the Photoweb case study
3days

From your requirements to matching profiles with CVs

90%

Of our developers have 5 to 20 years of experience

6years

Our longest continuous engagement, still running

10+

Time zones, with working hours flexed to match your team

What it is like to have our engineers on your team.

“I have worked with ImproveIT for more than 3 years, as a mobile product manager for Photoweb and now as a director of Piiics. In both, the technical challenge is quite high. The dev team has been highly motivated and professional.”

Clement PoursacPhotoweb Group · France

“We work with ImproveIT Solutions for years. Thanks to their support with new talents/developers we were able to proceed with many new projects. For sure we value their employees, we are happy to have them with us and we always do our best to keep them as long as we can in our projects.”

Barbara KucharczykNetguru · Poland

“Their attention to detail is great, and they question us if they think it might be better to solve the issue in a different way. They really care about the product they're building.”

Michael KolomenkinEyeToAi · Israel

“Their ability to advise and provide professional guidance made them a go-to partner. The engineering team demonstrated outstanding dedication and technical skills.”

Yannick BlondeauHotel-Spider · Switzerland

“They understand the needs and manage the project seamlessly. They stand out for their professionalism, skills, and the quality of the candidates they provide.”

Andrew NolanAnitech Solutions · Ireland

“Great app that works with functionality exactly like we want it. Internal stakeholders are particularly impressed with the quality of deliverables. They take ownership beyond their contractual obligations.”

Alok AlstromBeyond Liberum AB · Sweden

“Within one year we reached a 99% crash-free user ratio on both operating systems, which was one of our goals. Within two years we reworked all our apps and improved our conversion rate by 50%.”

Axel BouthorsPiiics · France

“All tasks are done on their side, they've always delivered on time, and their code quality is good. The developer assigned to us is always available.”

Luka SikicOnpreo GmbH · Germany

“We were very impressed with the wide range of experts. We've been able to significantly speed up the development of a number of our projects on a very reasonable budget.”

Martin Enderleintencio s.r.o · Czech Republic

“Exceptional service delivery: in-time, on-budget, with high quality and professional advice.”

Marcus ZedlerCamyylyon · Switzerland

“With a limited budget, we have been able to master 3 new tools: Rich Snippet, Rating-Widget, Survey. A good outcome that helped me and my lead frontend developer.”

Carsten SchaeferTrust · Germany

“Developers are experienced. They can discover the main potential issues and are able to solve them beforehand.”

Romain CoiraultLalalab · France

“A highly adaptive team that offers helpful insights and delivers work at reasonable rates.”

Didier GromaireCedemo · Monaco

Questions about hiring an Android developer.

Do we need a Data safety form if the app collects nothing?

Yes. Apps on Google Play's closed, open and production tracks all complete it, and an app that collects no data says so there and links its privacy policy. Apps active solely on internal testing are exempt. Google Play shows the answers on the store listing, so they have to match what the SDKs inside the app actually collect.

Can the app be distributed outside Google Play?

Yes. Android apps are not tied to one store, but some Google services are tied to Google Play. Firebase Cloud Messaging, for example, works only on devices with the Google Play Store app installed, so push on other devices needs another route. The developer checks which of your SDKs depend on Google Play services before a second store is added.

Can some code be shared with our iOS app?

Usually the logic rather than the screens. Google supports Kotlin Multiplatform for sharing business logic between Android and iOS, such as networking, storage and validation rules, while each platform keeps its own interface. Whether to share, and how much, is agreed with whoever builds your iOS app, because they will be reading Kotlin too.

How can our server tell requests come from the real app?

Through the Play Integrity API, which checks that a request comes from your genuine app, installed by Google Play, on a genuine Android device. Your server reads the verdict and decides what to allow. Obfuscating the code with R8 only makes it harder to read; it does not stop a modified copy from calling your API.

What does Google Play's yearly target API deadline mean for us?

Each year Google Play raises the API level that new apps and updates must target; since 31 August 2026 it is Android 16. An app that misses it cannot ship updates until it catches up, and apps left further behind stop appearing for new users on newer phones. The developer reads the behaviour changes early, because raising the target changes how the app behaves, not only a number in Gradle.

Should we rewrite the app in Jetpack Compose?

Not in one go. Compose and the older View system run side by side, so new screens can be written in Compose while existing ones move when they next change. A full rewrite stops feature work for a long stretch and seldom pays for itself. The developer starts with the screens that change most often, where Compose saves the most time.

Is it worth moving a Java app to Kotlin?

Usually, file by file rather than as a project. Java and Kotlin compile into the same app, so a file moves when someone next works on it and the rest keeps shipping. Kotlin's null safety removes a whole class of crashes, and Google's Jetpack libraries are written for Kotlin first. At Photoweb, our engineers moved the Android app from Java to Kotlin as part of taking it over.

Why do ANRs matter if the app does not crash?

Because Google Play counts them. An ANR happens when the app stops responding to input for five seconds, and users see a dialog offering to wait or close it. Android vitals tracks the user-perceived ANR rate beside the crash rate, and past Google Play's bad behaviour threshold an app can be shown less in search and carry a warning on its listing.

Can we start with one senior developer?

Yes. Many clients start with one senior engineer to cover a specific capability or capacity gap, then add specialists only when the roadmap requires them.

Can we scale the team up or down?

Yes. Adding an engineer follows the same route as the first, and you interview them. Reducing the team follows the notice period agreed in the contract, and the work is handed over in your repository before anyone leaves.

Will the developer work as part of our team?

Yes. You manage priorities and day-to-day work directly, in your own channels and delivery process.

Do we interview the developer before they start?

Yes. You interview every candidate using your own process and make the final decision about who joins the team.

Are the developers your employees or freelancers?

Our engineers are ImproveIT employees and long-term contractors working through our teams in Poland and Ukraine. We are not a freelance marketplace and do not resell developers from other vendors.

What if the developer is not the right fit?

Replacement terms are defined in the contract upfront, so it does not become a negotiation.

Who owns the code and intellectual property?

You do. IP assignment is included in the contract, and we can sign an NDA before discussing the project.

How do you handle security, access and NDAs?

We sign an NDA before discussing the project, and confidentiality and IP assignment are part of the contract. Engineers work in your repositories, cloud accounts and tools with the access your team grants, so you can narrow or revoke it at any time.

Can your developers work with our timezone?

Yes. Our engineers work with teams across Europe and the US. We agree the required working-hour overlap before matching candidates.

How is their English?

Our developers work in English with international product and engineering teams every day. English level is included in the candidate information you receive before the interview.

What does it cost to hire a developer?

Rates depend on the role, seniority, experience, and engagement model. You receive the rate, availability, and candidate profile in writing before making any commitment.

What are the minimum engagement and notice period?

Both are agreed before the engagement starts and included in the proposal and contract. We are flexible in that and usually agree on the terms suitable for a client.

Next to the Android work?

Android work often leads somewhere else: an iPhone version kept level with it, a whole app modernised by a mobile team, or test suites that run on every build.

Tell us which engineers you need.

Stack, seniority, how many and when. We come back with matching profiles, availability and rates within three working days.

You interview them with your own process, and you reject anyone you are not sure about.

  • 1Send the requirements
  • 2Get profiles with CVs, availability and rates in 3 days
  • 3Interview, choose, and start within a week

We sign an NDA before discussing anything in detail. We reply within 24 hours.

Request profiles

Or book a call and skip the form.Your details are handled under our privacy policy.