Porter has multiple mobile apps used by our consumers - app used by our customers to place on-demand orders, app used by our drivers to service those orders, and app used by fleet owners to manage their vehicles on our platform. Each of these apps is frequently iterated over to improve functionality and experience. In such a fast paced environment, we expect our mobile developers to develop and maintain these complex apps with a heavy focus on code design to keep the code easily extensible and maintainable. Duties & Responsibilities: Product Life Cycle Work closely with the Product Team to understand business requirements and product solutions. Flesh out Use Cases to be implemented and chart out development iterations Development Drive design discussions with heavy focus on modeling entities and interactions, following architectural patterns like MVVM, Clean Architecture, etc. Review all code being written to ensure it is clean, readable, maintainable and performant, following well established design principles. Ensure test coverage of business logic, UIs and integration. Project Management Collaborate with multiple teams - backend teams for finalizing APIs, design team for UI / UX, QA for testing, etc. Do iteration planning, give release estimates, share tracker and ensure timely releases. Ensure bugs & crashes escalated are tracked and fixed in a timely manner. Non Functional Ensure the apps are performant - no memory leaks, no frame drops, battery usage, etc. Explore, evaluate and drive adoption of new technologies, tools and SDKs as may be necessary to improve the entire development process. Work with cross-platform technologies, like Kotlin Multiplatform, to ensure consistency of features and code reuse across Android / iOS platforms. Team Management Manage a team of upto 4 - 5 members. Do periodic assessment of reportees, chart their growth paths and train them. Technologies: Languages: Kotlin, Java, SQL, Ruby (backend) Frameworks: RIBs, Kotlin Multiplatform, Ruby on Rails (backend) Architectures: MVVM, MVP, Clean Architecture, etc Libraries: Kotlin Coroutines, RxJava, Dagger2, Arrow, etc Integrations: AWS services, Payment Gateways (Razorpay, etc), Google Maps, Firestore, etc Products & Systems Overview You will be contributing to products concerning both customers and partner drivers. Customer App: All orders serviced by Porter are placed from this app making it our primary business driver. To keep the code for this large complex app maintainable, there is a heavy emphasis on good design and architecture. Currently the RIBs framework is used to break the code recursively into smaller components. To ensure feature parity and consistency across our Android and iOS platforms, we use Kotlin Multiplatform to re-use business logic code across the two platforms. Partner App: All orders serviced by Porter are fulfilled by drivers using this app. Given that the app is expected to run for long hours on cheaper phones there is a heavy emphasis on keeping the apps performant - optimizing battery consumption and memory usage. The app serves as a medium for onboarding - providing functionality for partners to upload and verify their documents using Image Processing. To train the drivers for every new feature launched, we provide a guided audio-visual training session - using visual cues like hint to click / swipe with synchronized pre-configured audio to guide him through the sequence of steps. Fleet Owner Apps: A multi-platform app for fleet owners to manage their drivers and track their performance and earnings on our platform. Allow them to bid for new client contracts.