Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Building Mobile Apps and Scaling them

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on. →

Building Mobile Apps and Scaling them

Avatar for Subhrajyoti Sen

Subhrajyoti Sen

July 07, 2025

More Decks by Subhrajyoti Sen

Other Decks in Programming

Transcript

  1. What is a Design System? A design system is a

    collection of reusable components, guidelines, and assets that help maintain consistency in the design and development of an app or website. It acts as a single source of truth for UI and UX elements.
  2. Keys Part of a Design System • Typography hierarchy •

    Color palette and accessibility considerations • Spacing system • Component library (buttons, cards, navigation elements)
  3. Previews @Preview @Composable fun BorrowedItemRowPreview() { BorrowedItemRow( item = BorrowItem(

    id = 0, itemName = "XBox Series X", borrowerName = "Steve", borrowDate = "2-11-2023" ) ) }
  4. Previews @Preview @Composable fun BorrowedItemRowPreview() { BorrowedItemRow( item = BorrowItem(

    id = 0, itemName = "XBox Series X", borrowerName = "Steve", borrowDate = "2-11-2023" ) ) }
  5. What is a Feature Flag? A feature flag (also called

    a feature toggle) is a software development technique used to enable or disable specific features in an app without changing the code or releasing a new version.
  6. Why use Feature Flags? • Gradual Rollouts • A/B Testing

    • Kill Switch • Remote Configuration
  7. class FirebaseFlagProvider() : FeatureFlagProvider { override val key: String =

    "firebase" val remoteConfig: FirebaseRemoteConfig = //.. override fun isFeatureEnabled(feature: Feature): Boolean { // .. } override fun containsFeature(feature: Feature): Boolean { // .. } }
  8. Gradle Optimizations • Use Gradle build Cache • Use Gradle

    Configuration Cache • Check the plugins and their impact • Use up-to-date Gradle and Android Gradle Plugin (AGP)
  9. @Test fun startup() = benchmarkRule.measureRepeated( packageName = Constants.PACKAGE_NAME, metrics =

    listOf(StartupTimingMetric()), startupMode = StartupMode.COLD, iterations = 10, setupBlock = { pressHome() } ) { startActivityAndWait() }
  10. Why Go Multiplatform? • Drastically reduce development time • Write

    business logic only once • Reduced time to triage and fix bugs • Write test once • Maybe, even share UI code
  11. Why Kotlin Multiplatform • Developed by JetBrains, creators of Kotlin

    • Officially supported by Google • Open Source • Great community support
  12. actual class DecimalFormat { actual fun format(double: Double): String {

    val formatter = NSNumberFormatter().apply { locale = NSLocale("en_US") } formatter.minimumFractionDigits = 0u formatter.numberStyle = 1u // Decimal return formatter.stringFromNumber(NSNumber(double))!! } }
  13. actual class DecimalFormat { actual fun format(double: Double): String {

    val formatter = NSNumberFormatter().apply { locale = NSLocale("en_US") } formatter.minimumFractionDigits = 0u formatter.numberStyle = 1u // Decimal return formatter.stringFromNumber(NSNumber(double))!! } }
  14. actual class DecimalFormat { actual fun format(double: Double): String {

    val df = NumberFormat.getNumberInstance(Locale.ROOT) as? JavaDecimalFormat ?: JavaDecimalFormat() df.isGroupingUsed = false df.isDecimalSeparatorAlwaysShown = false return df.format(double) } }
  15. actual class DecimalFormat { actual fun format(double: Double): String {

    val df = NumberFormat.getNumberInstance(Locale.ROOT) as? JavaDecimalFormat ?: JavaDecimalFormat() df.isGroupingUsed = false df.isDecimalSeparatorAlwaysShown = false return df.format(double) } }
  16. Closing Notes • Use abstraction when possible • Try writing

    code once • Focus on performance early on • Automate wherever possible