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

Building Mobile Apps and Scaling them

Building Mobile Apps and Scaling them

Avatar for Subhrajyoti Sen

Subhrajyoti Sen

July 07, 2025
Tweet

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