Mobile Engineers are a mix of software engineers and UI engineers. Here at Enova we work in Java or Swift, with unique build and distribution processes depending on the delivery platform. Mobile engineers have to drive everything to be simple; for one they do not have the screen space that a web page may have. They also have to account for the hardware in their engineering (i.e. cellular connection, bandwidth, battery usage, lower memory, or lower processing power).
But perhaps the biggest change as you’ll see below is that it’s a new kind of front-end, distinct from our usual desktop and mobile web experiences.
The difference between mobile and software engineers at Enova
Our software engineers at Enova, work in Ruby or Go for most of their software creation whereas our mobile engineers either work in Java or Swift. We have one team focused on iOS/Swift/Xcode and one that focuses on Android/Java/Android Studio. Currently we have two legacy Apps in the wild (one Android and one iOS — written in Objective-C — with each a couple thousand daily users). We also have two apps in beta, one of each OS flavor.
Our products and platforms are a real mix; most do not have endpoints for mobile. We are trying out a number of approaches at this time. One is a Ruby gem (Mobilatron) that sits in our Rails frontends, that creates the necessary endpoints for our mobile clients to talk to. Another is a “brand box” with standard REST endpoints to talk to all its frontends. Another is GraphQL from a brand box that encapsulates business logic.
Our mobile engineers have to be clear about what they need from our product teams. And be able to advise when necessary on approaches to APIs.
- Understanding of common API best practices and what to ask for from a good API
- Understanding of the differences between conventional data formats e.g. query string, form, JSON, XML, etc
- Proficiency with the design and use of APIs and with considering the real world implications for networking, security and performance
Not surprisingly the UX and UI is different from web, in part because the control mechanisms are different, the displays are reduced, networking is not reliable and you have limited resources in both power and processing.
Mobile engineers are a combination of your software engineer and a UI engineer. For us at Enova most business logic is implemented by Product teams, so most of our work is frontend. There is still a level of complexity created by the abstractions needed from our iOS white label/Factory.
- Can understand and describe the differences between web users, mobile web users and native users, in terms of behavior and expectations
- Can comfortably describe the design challenges between different mobile devices e.g. screen size
- Considers the implications of the product, its customers, their cultural differences and technological differences when making technology recommendations e.g. who uses one thumb versus two thumbs for controlling their phone
- Knows Material Design and/or OS Human Interface Guidelines
- Creates custom UI elements where needed
- When do they get to see a customer using a App? Which fingers do they use? what if they have shorter figures?
It is easy to steal a mobile phone, so we have to think about security in this context as well as everything you would expect from Web and Application Security. People use their phones differently than their laptops; the controls are different, which leads to different potential attacks.
- Understands the main areas of Mobile Security as defined by OWASP
- Able to secure the App and protect the customer’s data
- Understands the main areas of Mobile Security, the main vectors of attack as well as emerging vectors of attack
The primary distribution methods, i.e. The App Stores, have complex and “special” sets of processes. It also adds a
- Knows how the App store works in both requirements and processes
- Experience delivering at least one major iOS/Android application
- Can coach other engineers in the use of the App Store
Like most software ecologies there a bunch of tools that can help with productivity in mobile App creation. The foundation are Xcode or Android Studio. Over the next quarter we will be building out CI, as everything is manual.
We are starting to discover that our Mobile teams use Jira in a different way to some of web colleagues. We are still figuring this out.
- Familiarity with industry-wide best development practices including different ways to build a Mobile App, whether it be HTML5, Hybrid, or Native
- Work with multiple technology stacks to deliver the right Mobile experience for our customers’ needs, i.e. use the right tool for the right job, whether it be Native, React Native, PWA or even Flutter
- Mobile Analytics – e.g. New Relic, Adobe Mobile Services, Fabric?
- Push Notifications – Native or third party service
Whilst mobile engineering is growing a culture of testing, it is not comparable to the Ruby community. Mobile Testing is a bit different, the failure cases are much wider. For example, a lazy engineer may only test on a simulator or on a brand new device in a super fast wifi zone and never in poor cellular zone. Most modern mobile engineers will build unit tests, but what about UI Tests or integration tests?
- Mobile Testing – How do they do it?
- What testing frameworks do they use?
- How do they test responsiveness?
- How do they mimic their customer device and network setup?