BairesDev

Jetpack Compose: Building Modern Android Apps Faster

Jetpack Compose is now Android's default UI toolkit. Learn how engineering leaders should evaluate adoption, migration, and ROI.

Last updated:
13 min read
Verified Top Talent

By Fernando Ugarte

Principal Software Engineer16 Years of Experience

Fernando is a principal software engineer with 16+ years of experience in backend development, data analysis, and full-stack solutions. He has worked with Synacor and Nextar, specializing in Java, SQL Server, SAP, and BI tools including Power BI and Qlik.

Jetpack Compose logo on a blue gradient background with abstract graphics representing Android UI development, declarative code, and reusable interface components.

Key Points

  • Your migration ROI depends on how much your UI will change in the next 12 to 24 months. The relevant signal is how much of the UI is likely to change, not how the app looks today.
  • Lyft reduced their UI codebase by 60% after migrating to Compose, cutting ongoing maintenance costs meaningfully.
  • Adidas reported 30% faster feature development and a 99.9% crash-free rate after migrating their Confirmed app in 2024.
  • Running Compose and the View system in parallel long term increases cost and introduces bugs around z-ordering and scroll event conflicts.
  • Your team will need to budget for a genuine learning curve because Compose uses a different paradigm and requires solid Kotlin knowledge.
  • If your app’s UI roadmap shows little planned change, migration ROI is unlikely to justify the investment.

Executive Summary

Jetpack Compose is a modern toolkit provided by Google to streamline, simplify and modernise the process of creating user interfaces in Android apps. It represents a different model for developing user interfaces for Android apps and brings a modern code-first approach to UI development. Compose is now the default Android UI toolkit and is increasing in popularity and uptake industry-wide. Google reinforced this at Google I/O in May 2026, when it moved the View system into maintenance mode.

Whether or not Compose is something suited for a development project will largely depend on the resources available for the development team to work with, the team capability, existing app architecture and whether the cost versus the benefit of such a migration is actually worth the investment. The migration to Compose is often most cost effective when it is done gradually and in stages so it can fit into both the available budget and development capacity of the business. For new applications, Compose is more than likely the best approach to take. For established applications however, the decision is less about technical fashion and more about whether migration improves delivery economics over the product’s remaining life.

What is Jetpack Compose, what it changes and why was it introduced

Jetpack Compose, also known just as Compose, is a toolkit released in July of 2021 which is used to develop the user interfaces (UI) of Android applications. Prior to its inception, developers would use another technology called View to design UIs. The View system was introduced when Android first came out in 2008, but this does not necessarily make it an ‘old’ or defunct technology. The View system is still a viable solution for many Android applications and will not be going away any time soon.

Compose was designed to supersede the View system by introducing a completely different approach to UI development, one which Google had envisaged would make development of Android UIs simpler, faster and easier to develop and maintain. While Compose is by technical comparison a much more improved approach to UI development over the View system, it does not necessarily mean it is the most suitable approach in every application.

Compose is being heavily pushed and backed by Google and is now the recommended approach to developing new Android apps. Across the Android development tool suite, Compose is now the default approach for UI development. Google has moved the View system to maintenance mode with only critical security updates offered to it. This means upgrading to Compose is not required even though it is recommended by Google to do so.

The shift to Compose was far more than just reducing costs in developing user interfaces, the change was geared towards removing many of the limitations of the View system that for years have restricted the Android UI development flow.

What are the key differences between Compose and View

Jetpack Compose View system
UI definition Kotlin composable functions. XML layouts, programmatic views or both.
Application Logic Usually Kotlin. Kotlin or Java.
UI state management (managing how the UI should change with changes in data) Compose is designed around an observable UI state and recomposition system that automatically updates the UI when underlying data changes, making UI state simple to implement and maintain. The View system has a very basic form of UI state management where developers must manually write updates to individual UI elements in response to UI state changes.
Development Speed Development speed can improve due to Compose’s higher-level abstractions and code reusability, though the gain depends on team experience and how well components are structured. Development often involves more boilerplate code and less built-in reusability, though teams with mature View-based component libraries may not experience much of a speed difference in practice.
Maintainability Compose’s support for reusable components can reduce the number of places a change needs to be made, which can make maintenance simpler when components are well-designed. Codebases can involve more repeated code due to less built-in support for code reuse, increasing the risk of UI inconsistencies as an app grows, though this depends heavily on how well organised and structured the existing codebase is.
Performance Can lead to a smoother, more consistent, responsive user experience. When implemented correctly, performance is on par with the View system. There is the possibility of a glitchy user experience depending on how the UI has been designed. Performance in most cases is on par with Compose.
Animation Animation is built into the framework, which can reduce the amount of code needed for common transitions. Animation is not inherently part of the underlying XML layout framework, so it can take more code to produce even the most basic of animations. The animation APIs however are mature and well documented after many years of use.
Developer Experience Compose offers UI previews which let developers render composable functions in multiple UI states without needing to launch the full application, and these same functions can be tested in isolation. The View system supports visual previews however interactive UI state scenarios often require more setup and are sometimes not possible, making it harder to preview complex UI states accurately.

Where the business value comes from

The largest business value from Compose is seen in the overall simplicity the toolkit brings to the software development cycle.

Greater maintainability

Compose’s composable component model makes code reuse a primary coding pattern. Code reuse makes applications simpler to maintain with reduced risk of things being missed or overlooked. A button for instance usually requires the same or similar styling throughout the application and it therefore makes sense to only have to specify the button styling and functionality once. While the View system also supports code reuse it needs to be more rigorously applied, and it is therefore quite common in View-based codebases to accumulate duplicated code throughout the application. Whether this shows up as a real maintenance cost though depends on how rigorously a team has enforced code reuse patterns.

Lyft, one of the largest ride-sharing companies in the U.S., noticed that after upgrading to Compose their UI code reduced in size by as much as 60%. While code reduction does not directly equate to ROI, it has resulted in reduced ongoing maintenance and development costs of their application which has for them made the migration worthwhile.

Improved feature lead times

With more built-in code reuse, less new code is typically needed to build additional features once a component library exists. Teams report this can speed up delivery, though the effect depends on how much of the app’s UI is genuinely reusable versus bespoke to each screen.

The Google Play store team for instance migrated the Play Store app from the View system to Compose and ended up using 50% less code. This subsequently was a contributing factor to an overall increase in team performance, efficiency and ultimately product delivery speeds.

Improved user experience

Compose itself does not directly improve the user experience; however, it opens possibilities for code optimisation where improvements can be realised. With the ability for greater code reuse not only is the application more consistent in the code, there are also reduced inconsistencies and errors in the user interface.

Adidas’ Confirmed app was migrated in 2024 to Compose, providing one of the more compelling real-world examples of a hybrid migration approach delivering measurable results. They took a hybrid approach to the update with the benefits being realised soon after the migration began. According to Google’s published case study, this upgrade resulted in Adidas reporting roughly 30% faster feature development and an increased crash-free operation rate of 99.9%. They also noticed an 8% rise in weekly active users following the launch of just one of their new Compose-built features.

Roadmap flexibility

Compose is officially part of the Android roadmap and Google has many plans to keep expanding and adding new features to it, while the View system is now in maintenance mode. By moving to Compose you are keeping your app aligned with where the industry, tooling, code libraries and the hiring pool of future developers are all moving to.

Cross Platform Potential

An Android app built using Compose can be extended to run on iOS, web and Windows with the Compose Multiplatform extension provided by JetBrains, and Compose also has strong built-in support for large screens such as tablets and foldables. Some further work is still required, but adopting Compose makes the transition to a cross-platform application considerably simpler.

Where the risks and costs appear

There are cases where upgrading to Compose may end up costing more than it benefits. A thorough assessment of your app and development team situation is recommended before any migration decisions are made.

Learning Curve

Evaluate whether the development team has sufficient Kotlin and Compose capability. Compose requires a significant shift in thinking and a steep learning curve for many developers as it is based on an entirely different model and coding language. This can take a while for Android developers to completely adopt and it forms a hidden cost in the upgrade.

Performance Tuning

Compose requires a completely different skillset to what many traditional Android developers are used to. Applying the same UI philosophy to Compose can lead to poorly optimised code which can cause bottlenecks and performance problems and poor user experiences.

Low-end Device Support

Compose has hardware limitations as it requires Android API level 21 or later as well as slightly more resources due to a slightly larger package size, though it handles adaptive layouts for tablets and large screens considerably better than the View system did. For most consumer applications this unlikely to be decisive, but industrial, embedded, field-service, or long-lived managed-device environments should check their installed-device base before committing.

Third-party libraries

Compose has interoperability APIs to support libraries that have not been ported to Compose yet. However, this does require team knowledge and training to ensure they are aware how this works.

Mixed architecture

Google’s own documentation acknowledges that most migrations are incremental with many projects living in a ‘hybrid’ state of Compose and the View system co-existing for a long time. This extended period of coexistence presents an additional risk surface, as two completely different sets of models, conventions and testing approaches run in the same codebase simultaneously, which can increase cost and decrease efficiency over the long term.

Migration duration

For many apps, migration is not something that is a quick process. Google recommends adopting an incremental approach because a UI rewrite carries much risk and cost. Depending on the app, its size and the available resources and skills of the development team, a migration may mean reduced capacity to work on new features and improvements. When and how the business decides to undergo this migration is a delicate decision that must be weighed up against the increased cost of technical debt that comes with delaying the upgrade.

Decision framework

Situation Likely recommendation
New Android application Compose by default
Existing app with frequent UI roadmap work Incremental migration
Stable internal app with little planned change Maintain the View system
Major redesign already funded Strong migration opportunity
Heavy custom View-based dependencies Discovery and pilot first
Weak Compose capability in the Android developers team Training or external support before broad adoption
Performance-sensitive low-end device base Benchmark representative flows first

Keep in mind that the ROI from the migration comes from future change and not simply from updating existing code. An existing View-based application which has the backing of a highly optimised codebase and efficient developer team may not experience a large amount of benefit in migrating especially if the existing workflow already works well for the team and company. If only little or minor changes to the app’s UI are foreseen in its roadmap then the migration to Compose is likely unjustified in respect to the potential ROI. Stability and migration value are different questions. The relevant signal is how much of its UI is likely to change in the next 12 to 24 months.

Migration approach

  1. Establish baselines:
    You need to establish a set of baselines you can use to check the potential impact Compose will have on your application, not just assume. Google’s official Compose, View performance comparison documentation, along with its published code samples, exists for this purpose.
  2. Select a bounded pilot:
    Pick a small, well-defined part of the app to test the Compose adoption on. This will help to verify any assumptions that the team may have about the migration and give a more concrete idea on how long the entire migration may take.
  3. Create shared theming and components:
    Google recommends identifying all the reusable elements within your application and to create a library of common UI components.
  4. Add new screens in Compose:
    According to Google, the best way to adopt Compose into the application is through building it into new features and updates. This will let you take care of business needs while completing the migration process. Having to write a one-for-one migration is not necessarily the most cost-effective solution in this regard.
  5. Migrate frequently changed screens:
    To save cost, Google recommends migrating the most frequently developed screens first because these areas of the application will likely benefit most from the productivity pay offs of Compose.
  6. Track delivery and quality metrics:
    Ensure the performance and delivery of the application stays in check as the migration progresses by checking quality metrics based on the pre-migration baselines as well as team progression.
  7. Retire View code only where the economics justify it:
    Google recommends that View code should only be migrated when it is cost-effective to do so. The more this approach is factored into the migration the less of a cost burden the migration will be.

Additional factors to keep in mind when planning and undergoing the migration:

UI Accessibility
The View system and Compose implement accessibility in entirely different ways, using different accessibility APIs which are very easy to miss when undergoing the migration. Missing these in the migration would introduce potential issues for users who rely on accessibility in the existing UI implementation.

Rollback Strategy
Build a rollback into the migration strategy. If something would then go wrong when releasing the Compose implementation to production a rollback strategy would be a means to roll back to the former implementation in the View system without too much hassle.

Screenshot-based testing
To help with testing, having screenshots of how the former UI looked and operated in each part of the app, can help with ensuring aspects of the UI are not missed during the migration.

Frequently Asked Questions

  • Is Compose stable and reliable for use in production?

    Yes, Compose is in a very mature and stable state and has now become so popular in Android development that as of Google’s 2026 five-year Compose retrospective, more than 68% of the top 1000 apps on Google Play are using Compose.

  • Can Compose and the View system remain together long term?

    Yes, on a technical level they can. Google designed Compose this way to ensure adoption can be as simple and cost effective as possible. However, an app should also not remain in a partially migrated state forever. At some point the overhead of keeping the two running in parallel becomes more of a burden than benefit.

  • What other costs are there to operating a hybrid-architecture of both the Compose and View systems long term?

    The fact that under this architecture two very different UI composition systems are being used together in one app poses two important on-going risks. First, there is duplication in the theming specification as both systems have their own means of specifying the Material theme. If not managed properly, inconsistency in the app’s appearance may arise. Second, the interoperability of both systems within Android is known to not be perfect and can introduce risks and bugs. These bugs often show up as inconsistencies in the way z-ordering is handled and conflicts in the scroll and touch events in nested views, both are well-documented examples of interoperability edge cases teams should test for before shipping.

  • How do we estimate the cost of migrating an existing app?

    As part of the migration process, a bounded pilot is required. This is where a small part of the app is migrated to Compose and the metrics are analysed. From how long this isolated migration took, you can estimate how long the entire migration is likely to be, and extrapolate the resource cost.

  • What performance testing is required before rollout?

    Do not assume performance parity, benchmark it. Macrobenchmark your key user journeys under release-build conditions to measure real startup time and scroll jank. This is the same approach Google uses for its own migrations. Baseline Profiles are worth setting up, since they pre-compile frequently used code paths and improve cold-start performance for both Compose and View-based apps. Most Compose UI tests can run without a physical device which fits neatly into CI/CD pipelines. Macrobenchmarking and jank checks still need real or representative hardware to give you results you can trust.

  • Does Compose support testing frameworks for thorough code quality control?

    Testing in Compose has matured extensively since its inception and now supports many comprehensive testing tools and utilities. This includes the ComposeTestRule API for writing UI tests directly against composable functions and semantics-based finders that let tests target elements without relying on brittle view IDs.

  • How does Compose affect UI testing and release risk?

    Compose changes UI testing both on a technical level and in how the release risk is managed. Compose introduces a different way in which the UI is visually tested such that the testing process is more stable and less brittle. Testing is also said to be faster as it can be tied into CI/CD flows and other forms of automation. Lastly, visual regression testing has become standard practice. The ultimate effect of this is that once fully migrated to Compose, and with tests migrated alongside the UI, release risk can be lower.

By Fernando Ugarte

Principal Software Engineer16 Years of Experience

Fernando is a principal software engineer with 16+ years of experience in backend development, data analysis, and full-stack solutions. He has worked with Synacor and Nextar, specializing in Java, SQL Server, SAP, and BI tools including Power BI and Qlik.