Expert programming in Java and Kotlin to develop Android applications.
Network calls and background multithreading using RxJava, Retrofit, Volley and AsyncTask.
Worked in an Agile environment with strong SCRUM and pair programming fundamentals.
Strong leadership and communication skills in an Agile environment SCRUM, Kanban, and XP.
Google Maps API, GPS Location data for location, maps, nearby.
Creation of unit and integration testing suites developed with Mockito and Espresso for use in Android development.
Configured and initialized multiple cloud integration services including Parse, Firebase and Google Cloud Messaging for Android projects.
Experience with consuming third-party APIs in Android development projects.
Experience with multi-threading and memory management specific to mobile devices
Guide decisions on architecture and technical strategy.
Well versed in the most modern Android third party libraries such as Volley, Retrofit, Picasso, YouTube, Location API, Maps. View, Google View, Google Maps, PayPal, Stripe, Android pay, QR Droid, Butter Knife, Dagger, Google Wallet payments, Android Annotations.
Continuously delivered a complete analysis regarding problems on the client’s side, having in mind various factors like deadlines, budget, scope, and risks.
Experience with Push Notifications, Google Maps, Navigation, and GPS.
Fluent in Android SDK/NDK and device driver development.
Worked with an internal QA team on system, performance, and acceptance testing.
Android UI Toolkit and Layout Managers. Proficient in Android Application Framework and Android SDK Tools.
Android Push Notifications, Google Maps, Navigation, GPS
Followed best practices for architecture and programming.
Implementation of dependency injection with Dagger to sped up the unit testing process.
SENIOR ANDROID MOBILE APP DEVELOPER
May 2021 – Present
●Collaborated with an Android Dev team to overhaul an existing feature inside the Walmart Glass App into a stand-alone application. The app enables users to scan items from their phone and checkout without having to talk to an employee.
●Worked with Product Designers, QA Testers, and ADA compliance teams to ensure all features and bug fixes were shipped out with little to no issues.
●Used Android Studio Bumblebee to write, test, and commit code.
●Held office hours for new hires once a week to troubleshoot any issues they might be having.
●Performed SPIKES by analyzing other teams’ repositories and created POCs for new features.
●Added analytics calls to multiple screens throughout the app.
●Performed various tech-debt changes to get rid of deprecated libraries and/or improve performance throughout the application.
●Wrapped `shady` code (computations) under try/catch statements and logged the logcat output Splunk.
●Participated in weekly grooming calls, weekly platform-specific developer standups, and all-platform developer stand-ups.
●Addressed issues with lost screen reader focus (ADA) after certain app transactions.
●Led the efforts to implement a split tender payment option at checkout to allow for covering the total balance with either gift cards, debit cards, credit cards or a mix or the prior.
●Corrected the color contrasting between fonts and the different backgrounds throughout the app for visually impaired users (ADA).
●Implemented an `Easy Exit’ feature for customers which met the criteria; no items that need to be weighed and no age restricted.
●Periodically bumped up the Unit/Functional test coverage throughout the app by adding missing test cases.
●Maintained Unit/Functional test integrity and consistency as the app structure was always improving and changing.
●Added CCM flags to allow for more visibility and fine-grained control over the app's behavior and appearance so we could make changes like turning a feature on/off by simply updating its configuration upstream.
●Implemented a bypass for audit checks for Easy Exit eligible carts.
●Fixed a bug where our scanner would stop detecting barcodes after any bottomsheet would stop being detected.
●Added performance analytics to missing pages throughout the app to know if the UI was rendering as fast as it should be.
●Refactored all raw string usage in the app (and tests) to use localized strings instead.
●Created and ran unit and integration tests with Espresso.
●Used Retrofit, Coroutines, and data binding in MVVM clean-code architecture.
●Used Dagger dependency injection to inject network modules, viewmodels and repositories.
●Monitored Performance of various points of the app in Splunk.
●Used Leak Canary to manage, trace and fix memory leaks.
●Converted old WebViews into native Android implementations utilizing Constraints Layouts and various design views.
●Added databinding from Android JetPack to add new features to MVVM architecture modules.
●Transitioned back-end communications from OKHttp to Retrofit with Kotlin Coroutines lightweight threading.
●Used Google GSON to parse through JSON files.
●Monitored Crashlytics report, and resolving the critical issue immediately, secure a very low crash rate
●Used Firebase to create and enable app’s deep links and existing ones.
●Used ktLint to ensure code pushed by developers follow formatting guidelines and are free of unnecessary code.
SENIOR ANDROID DEVELOPER
October 2020 – May 2021
●Performed SDK setup and configuration. I consumed all the scattered documentation and held daily meetings with the developers from iOS and Web platforms to get a better grip as to what the expectations were.
●Essentially “hijacked” the Snowplow SDK (through interfaces) by writing a lightweight wrapper around it which intercepted all the events being tracked by Snowplow.
●Mapped Priority Custom Fields-- the first major task after having developed the initial version of the SDK. It required deconstructing the event payloads and remapping the fields required to pass the “CCS” schema validation. It required a lot of cross-team collaboration to iron out inconsistencies between the platforms.
●Removed functionality that is Comcast specific from the Core Snowplow SDK-- this was a weekend-long job in which I completely decoupled the implementation from the core Snowplow SDK and developed a lightweight wrapper around it.
●Migrated to Kotlin-- a 2-day job which involved not only migrating the codebase but the underlying libraries being used as well (opting for Kotlin-optimized libraries).
●Exposed all the Snowplow Standard Contexts through SIFT SDK-- the Snowplow SDk had a series of “contexts” that could be enabled prior to configuring the tracker. I had to expose all these contexts through the SIFT wrapper.
●Conducted interviews to hire a strong developer to help maintain the SDK.
●Created E2E tests using Espresso-- collaborated with the team’s QA to create an end-to-end test that would cover the integration of the SIFT SDK.
●Researched and set up a local Maven deployment as part of my E2E testing before rolling out the release candidate to our QA (since the Comcast repository was behind a VPN I needed a way to simulate “pulling” the SDK from Nexus, so I set it up on my desktop).
●Worked out a solid Nexus publishing strategy for consistent delivery (through the Android-Maven-publish plugin and `after-evaluate` Gradle configuration)).
●Sorted through transient dependencies and made them available implicitly (declaring transients as “api .”
●Updated the test application—revamped the Demo application to accurately represent the new features. integrated into the SIFT wrapper (the previous demo was simply being recycled from the Snowplow SDK).
●Added multithreaded support with Kotlin Coroutines and enabled integrating developers to track multiple events from different threads while avoiding race-conditions and over-writing shared data.
●Completed unit tests for SIFT SDK and Snowplow SDK-- due to the extremely fast development cycle (1-week sprints) we had to postpone any unit-testing until the fourth version of the SDK was out). Used MockK and JUnit Jupiter.
●Added offline polling/tracking capabilities and enabled the SDK to automatically track the networking status to attempt batching once a connection was re-established.
●Solved a major bug where GSON would wrongly deserialize every number to a float value (which ended up failing schema validation consistently when the schema required something other than a float). The Jackson library was able to correctly deserialize it to the proper variable type.
●Validated the use of Standard Contexts-- making sure that each one of the available contexts were being properly mapped out to the new event payload.
●Validated event_payload and custom payload based on event schema and custom schema, respectively. This required putting in place a local schema validation (JSON-Schema-Validator) for each payload prior to the event being posted to the AWS endpoint (devs could opt in or out of this options through selecting different environments, such as PROD and DEV).
●Resolved a major bug where the schema retention mechanism would fail if at least of the required schemas were already present in cache prior to initiating the tracker.
SENIOR ANDROID DEVELOPER
October 2019 - October 2020
JP Morgan & Chase
●Implemented all the infrastructure of the app using MVVM architectural patterns and components. Each module contained its own View Model (when needed) and shared 2 Repositories (Authenticated and Non-Authenticated Repository).
●Created applications on Android Studio Plugin with IntelliJ using Java initially and Kotlin.
●Worked in full Software Development Lifecycle (SDLC) including Planning, Analysis, Design, Implementation, Testing/Integration, and Maintenance.
●Worked with Activities, Navigation Component, Fragments, Custom Views, Extension library, and third-party libraries.
●Implemented Retrofit, OkHttp to consume RESTful endpoints (for non-authenticated routes such as Register New User and Reset Password.
●Worked on the authenticated services (post-login) such as Edit User Profile and Get Card Details had to be onboarded via a networking security library (proprietary) and point the app to new (protected) endpoints, which were accessed through methods provided by the library, forgoing the need for retrofit at that stage. This required me to create a sound structure where the two networking packages did not conflict with each other.
●Used Git with BitBucket for Version Control. We had a sprint planned for setting up CI/CD through Jules but that got put off by higher priority items.
●Collaborated closely with designers for implementing UI components.
●Implemented Picasso for image loading and caching.
●Implemented UI components using material design.
●Implemented analytics using crash reporting for uploading crash logs and secure logging for logging app events (both proprietary libraries).
●Used SeeTest (proprietary) to run Android emulators on and deploy testable apks for QA’s testers across the firm.
●Worked closely with QA reps to handover apks and to receive test data (aka creating user in the backend so I can test user registration on app end).
●Worked closely with Backend engineers to coordinate endpoint testing and validation. They would hand over some sample data needed for each endpoint, and I would implement it on the app. I would get on a call with the person in charge on developing the service I was trying to access through the app and test it thoroughly.
●Created custom UI components for consistent UX across companies' internal Android applications, including custom top navigation headers, custom buttons, etc.).
●Used RecyclerViews and populated lists to display the lists from database using recycler view adapters.
●Used Bitbucket as the version control tool to commit and update the project from the server.
SENIOR ANDROID DEVELOPER
August 2018 – September 2019
●Used Android Studio as the IDE for development of the Android mobile app in Java and Kotlin, migrated from Java to Kotlin.
●Transitioned the app from MVP to MVVM architecture.
●The project consisted of one project leader, one team lead, 4 Android developers and two QA testers.
●Used Git code repository and I managed the commits.
●Followed Agile Scrum methodology with Test-Driven Development (TDD) and a Jenkins CI server to assist in integration and testing.
●Maintained Android app quality in development through continuous integration process using GitLab.
●Followed material design guidelines and worked with front-end UX designers closely to implement their visions.
●Used Jira for documentation, task tracking, backlog management, and meeting prep.
●Automated testing with Espresso and I oversaw the writing of the Unit Tests by junior developer and lead code reviews.
●Worked with Dagger 2 for dependency injection to develop clean, maintainable code as well as Android Data Binding using Android Jetpack.
●Implemented Android Jetpack LiveData and Room.
●Implemented Retrofit with RxJava for back-end integration and worked with cloud-based content providers created in Firebase.
●Managed threading, performance, and memory management with RxJava and RxAndroid to real-time streaming effectively.
●Updated the ExoPlayer and Media Player user access and views.
●Implemented music streaming functionality using Media player and Android services.
●Using management techniques, I was able to optimize the device’s use of memory.
●Worked with live video streaming library to deploy live to the Android mobile app.
●Oversaw Android app performance profiling with Crashlytics to monitor crashes and exceptions.
●Implemented Custom Controls on video player with the ExoPlayer library.
●Implemented data persistence using SQLite and SQLiteOpenHelper.
●Worked with Content Providers to connect with and consume Android Contacts.
August 2017 – August 2018
●Used custom views to easily reuse UI components built to UI/UX design specifications.
●Android Studio used as IDE in Android application development.
●Developed new features in Kotlin to reduce codebase with data classes and extension functions.
●Used Kotlin Coroutines to perform asynchronous tasks for optimized thread management.
●The Android project team used Bamboo cloud-based continuous integration tool.
●Dagger 2 was the library for dependency injection for readability and clean code.
●Cipher encryption secured data as it was being passed to the server and watch, staying in compliance with security standards.
●Involved in working on Restful Web service with JSON.
●Collaborated with the web application development team to ensure proper integration between mobile application and web application.
●Also used GSON converter to convert the retrofit JSON response to the java object.
●Worked with Git and I managed the Git repository, multiple branches.
●Helped mentor junior developer in adapting to Android from his background in Java.
●JUnit and Mockito used to create unit tests although the testing was primarily handled by the V&V department.
●Android application architecture was MVP but looking to refractor into MVVM in the future.
●Implementing Google Cloud Messaging for instant alerts for the customers.
●Asynchronous Programming Android (such as Thread pool, Tasks and Services).
●Services and broadcast receivers for performing network calls to the server.
●Bluetooth LE connection implemented to send data from the Simplicity Application to the watch face for easy access.
●As features were added to the application, the V&V team ensured that everything worked properly before the Jira ticket could be closed.
●One of the biggest challenges was managing the information being sent to the server for retention purposes.
●Kept track of current and backlogged tasks using Jira.
●Documentation was done using an SDS template provided by Dexcom, which has been used on all the applications they have had developed.
●Followed Agile methodology with daily standups, monthly team meetings, sprint grooming meetings and sprint planning meetings.
●Team consisted of three senior level developers (myself included), two junior level developers and a project manager.
July 2016 – July 2017
●Conducted SCRUM meetings and acted as liaison with the upper management to make everything work faster by removing all blocking situations the team was facing.
●Added the Parcelable interface to pass custom objects between components quickly via Intents.
●Used Espresso for instrumentation testing using Assertions, Matchers and Actions.
●Worked with LRU Cache to increase the performance of ListView scrolling.
●Updated the look and feel following Material Design guidelines, and implemented several Fragments for the UI.
●Ensured excellent form factor integration by creating multi-panel activities with Fragments.
●Improved the layout rendering by saving and optimizing the view hierarchy in all the resources.
●Supervised the creation of the unit, integration and stress test cases with JUnit, Espresso, and MonkeyRunner.
●Actively worked with the back-end team to improve the RESTful API to include new features.
●Developed compound views to present information to the user depending on its preferences.
●Managed private Git code repositories with SourceTree.
●Created custom animations and transitions to improve the user experience.
●Made a distinction between development and production versions of the app each with their distinct credentials and settings in the backend using Urban Airship.
●Ability to manage competing priorities in a complex environment and maintain high productivity.
●Used the View Pager Indicator to provide feedback to the user about the background processing status.
●Implemented IcePick when building references to track them in an easier way and avoid memory leaks.
●Used custom views to easily reuse UI components built to UI/UX design specifications.
●Implemented Google Analytics and Firebase for various analytics.
●Utilized the Android Studio IDE to develop and code the application in Java.
●Contributed value to a cross-functional engineering teams (back-end development, front-end development, UI/UX designers, QA, Product Management, etc.).
May 2015 – June 2016
●Implemented user login screens and designed context menus based on the Android Menu Navigation, Tabbed Navigation control, and Action Bar Control.
●Worked with LRU Cache to increase the performance of ListView scrolling.
●Worked with Product Management, Delivery teams and Project Management to translate requirements into tasks for deliverables.
●Tied mobile client applications to critical server-side APIs.
●Involved in requirement gathering and outlining.
●Worked in databases using native Android API and server-side MS SQL server database.
●Responsible for developing the Android UI layouts (Linear Layout, Relative Layout).
●Implemented two versions of unique UI. Created a lot of prototypes for different UI elements.
●Introduced optimal caching mechanism into SQLite, to avoid unnecessary queries.
●Involved in writing application logic in Android Studio.
●Integrated communication with backend services using Retrofit and RxJava, parsing JSON objects with GSON.
●Worked in different phases of the project cycle like design, development, and testing.
●Worked in the Use case requirements, analysis, design, and development phase.
●Worked with Custom Frameworks and Custom Templates for building this application.
●Implemented Frame Layout method to show background images of the app.
●Individual implementation of Google Map and Location service.
●Implemented OAuth and authentication tokens.
●Implemented entire feature using Fragments and Custom Views.
●Implemented Toast, Dialog notifications for alerts.
●Implemented Singleton Object class for managing third party API to access the information in various modules of the application.
●Worked on the SQLite database to minimize the size of the application and increase the performance.
●Used Android XML in design and development of user interfaces.
●Worked with RoboGuice for dependency injection to develop clean, maintainable code.
●Worked with support libraries to ensure backward compatibility with older Android versions.
●Worked with TDD/BDD and agile methodologies in Android app development.
●Worked with the design team and the usability specialist to create a user-friendly interface for the app.
●Worked with the Facebook API for user login authentication.
JR. ANDROID DEVELOPER
June 2014 – May 2015
Fort Worth, TX
●Implemented unique design for portrait and landscape mode.
●Organized & improved global widgets and UI controls.
●Designed screens related to categories and detail pages for this application. Registered the Broadcast Receivers for the Android system announcements.
●Git was the source control tool being used to manage the application development.
●Responsible for the design, development, testing, and publishing of the application.
●Parsed JSON files to obtain data returned from web services.
●Utilized Navigation Drawer and Tabs to provide quick and easy navigation.
●Upgraded the SQLite database to add various extra features to the app.
●Implemented Crittercism to monitor crashes and exceptions and user app analytics data.
●Communicated with RESTful web services to obtain up-to-date data with Retrofit and RxJava.
●Adapted Agile methodology to meet requirements on time.
●Performed automated testing by using Robolectric.
●Tracked the debugging process using Android Studio DDMS, CI Tools like Jenkins, TDD, and JIRA.
●Tested the app across different versions of Android to assure quality and performance.
●Involved in Agile activities such as iteration planning, grooming feature dive-ins, sprint retrospectives.
●Used multiple threads running in the background using Rx Java for high performance, efficiency, and implemented Google cloud messaging (GCM) for enabling push notification.
●Implemented back-end integration using Retrofit and OkHttp to parse JSON data converted with GSON.
●DDMS (Dalvik Debug Monitor Server) and TraceView for debugging and detecting memory leaks.
●Implemented communication with RESTful services using Retrofit and RJava.
●Implemented scheduler that schedules an Observable on a given Android Handler thread, particularly the main UI thread.
●Profiling, tuning, & optimizing Android apps and branching, pushing & merging codes with remote repository GIT.
●Interacted with existing development team to understand the native Android features required by the application.
●Provided subsequent releases which included feature changes, enhancements, and bug fixes.
●Contributed in production release deployment, certifying release features, monitoring production logs and fixing production issues on demand.
●Used SVN for version controlling and for integration of the code.
●Responsible for developing the user login screens and design the Context menus based on the Android Menu Navigation, Tabbed Navigation control and Action Bar Control.
●Configured multiple analytic tools to get valuable information on a post-install state: Crashlytics, Mixpanel, Flurry, Answers.
Hawaii Pacific University, BSc Computer Science, BSc Pure Mathematics Honolulu, HI
8 Published Apps on Google Play
8 Years Android Mobile App Development
6+ Years I.T./Software Development
Languages: Java, Kotlin
Databases: SQLite, MySQL, Firebase DB, Mongo DB
IDE: Eclipse, Android Studio
Architectural Patterns: MVP, MVC, MVVM
Development: TDD, JIRA, Continuous Integration, Confluence, Git, GitHub, SVN, SourceTree, BitBucket
RESTful Web Services: REST, SOAP, XML, JSON, GSON, Retrofit, Volley
Threading: Loopers, Loaders, AsyncTask, Intent Service, RxJava
Android Development: Schematic, SmartTV, Certificate Pinning, RxJava, RxAndroid, RxCache, MonkeyRunner, Bluetooth Low Energy, ExoPlayer, SyncAdapters, IcePick, Circle-CI, Samsung SDK, Glide, VidEffects, JUnit, Ion, GSON, Push Notifications, SpongyCastle, Parse, Flurry, Twitter, Espresso, Fresco, Moshi, Jenkins, UIautomator, Parceler, Dependency Injection, EventBus, Dagger, Crashlytics, Mixpanel, Material Dialogs, Marshmallow, Loaders, Jetpack, JobScheduler, ParallaxPager, XmlPullParser, Google Cloud Messaging, LeakCanary.