Why DevOps Engineers Suck at the Mobile Ecosystem
Learn the most common mistakes DevOps engineers make when working with the mobile ecosystem so you can avoid them.
Join the DZone community and get the full member experience.Join For Free
The latest TechRepublic post revealed that as per the Stack Overflow Developer Survey 2018, DevOps Specialist is the highest paid programming job in the IT industry. There is no shortcut to becoming a DevOps Specialist; it comes from hard work, continuous learning and years of experience. As DevOps engineers roles require knowledge of millions of tools and technologies, it also requires soft skills to deal with different teams. The typical DevOps Engineer's toolbox includes Jenkins, Docker, Ansible, Chef, Puppet, AWS, Azure, Terraform, Kubernetes, and many more. It turns out most DevOps engineers are very good at implementing these tools in organizations to deploy web applications. However, when it comes to mobile applications, this toolkit doesn’t always work, especially for Apple apps. In this post, we will see what skills traditional DevOps engineers lack to become a full stack DevOps engineer and how mobile DevOps is becoming key in recent days.
How Mobile DevOps Is Different
Managing infrastructure for web and mobile are completely separate activities. There are some unique challenges when it comes to managing mobile infrastructure. These challenges are platform- and operating system-specific. Most of the web is currently running on Linux, however, building iOS apps requires infrastructure to manage macOS servers. We will see the major differences between web and mobile DevOps.
DevOps engineers mostly use Linux as the primary operating system. Some of them still use Windows servers. It’s very important to know on which platform the production is supposed to run. In the case of websites, most production code runs in the browsers, while in case of mobile apps, it runs on the real devices (Android, iOS, etc).
Websites need to be hosted on the servers running inside the data center or in the cloud. Most companies are moving their infrastructure to the cloud, so DevOps engineers use AWS, Azure, or other cloud platforms. They also need to monitor all the servers to make sure the website is running without issues. Mobile applications are hosted on the App Store or Play Store, and once they have been released, mobile apps don’t need to be monitored for hosting, as the App Store or Play Store will take care of hosting.
Web deployments are push-type, where we can push the code change to production and users have to accept all the deployed changes. Mobile deployments are pull-type, where we have to submit an app to the App Store for review and then Apple or Google will review an app before it goes to the end users. Once released, mobile apps need to be explicitly updated by the users. This is the major difference that needs to be considered in mobile DevOps.
Tools & Technologies
Mobile applications need to be code signed before shipping to the App Store, while web applications don’t need to be code signed. The process of code signing makes sure that applications are built by a trusted developer and gives the user the confidence to use them without any worries.
We have seen some of the major difference between web and mobile DevOps. Now, let’s explore the common mistakes DevOps Engineers make when they are asked to manage mobile infrastructure.
Reasons DevOps Engineers Suck at Mobile
In the most companies, DevOps for mobiles apps has been completely outsourced to cloud-based CI services like TravisCI, CircleCI, or similar services. Cloud-based CI services are very expensive and they charge companies on the basis of the number of builds, number of projects, number of concurrent builds, etc. Most in-house DevOps teams who are doing amazing things for Linux often refuse to manage mobile CI/CD in-house because they can’t simply do it. DevOps engineers great at Jenkins, AWS, Docker, Kubernetes, Ansible, etc don’t always have the skills to manage mobile infrastructure. The most common reasons for this are that the tools and skills required for mobile infrastructure are different than web or Linux. When DevOps engineers are asked to manage the mobile ecosystem, they truly suck. Below are some of the common mistakes DevOps engineers often make.
Applying Jenkins Everywhere
In the traditional DevOps, Jenkins is de facto standard for continuous integration and delivery for web apps. There might be so many Jenkins servers hosted on the AWS or some other cloud within Docker containers. Although Jenkins is a great CI/CD server for web apps, it doesn’t always fit into the mobile workflow. DevOps engineers typically set up Jenkins to run mobile builds. In iOS apps, Jenkins needs to be installed on the macOS server, which is kind of a pain for DevOps engineers. Once set up, Jenkins for mobile CI/CD goes through constant hassles and repairs which cause distractions for native app developers. DevOps engineers should go beyond the boundary and find suitable CI/CD tools for mobile DevOps.
Lack of Platform-Specific Knowlege
DevOps Engineers are great at the Linux platform. They can configure, provision, and manage all the infrastructure on Linux. However, when it comes to other platforms, like macOS, they don’t have the skills to configure, provision, and manage macOS infrastructures. There is a completely different set of tools being used on macOS than Linux, like Homebrew, security, and many more command line Apple developer tools.
Not Aware of Mobile Tooling
As mentioned earlier, the set of tools used for mobile build, testing, and release automation are way different from web tooling. The tools used for beta testing mobile apps are also different. A good example of these tools is Fastlane, CocoaPods, Carthage, Homebrew, Fabric, XCTest, Expresso, Xcode command line tools, and many more Apple developer tools. DevOps Engineers working on the Linux platform might not have heard about these tools.
Choosing the Wrong Tools
Due to lack of awareness of mobile tooling, DevOps Engineers end up applying tools that they already know to the mobile ecosystem. This adds complexity and overhead to maintaining mobile infrastructure. DevOps Engineers might end up automating a Swift build using tools like Maven or Rake, which don’t make sense for the mobile ecosystem.
Code Signing Ignorance
DevOps Engineers are often involved in the deploying the web apps, which doesn’t always require code signing. When it comes to the Apple platform, the code needs to signed with an authorized certificate and profiles. Code signing of Apple apps requires a developer account with Apple, certificates, provisioning profiles, and entitlements. There are separate tools required for the provisioning and automated code signing tasks.
Managing mobile infrastructure in-house requires skills, guts, and courage. If DevOps team can’t manage the mobile ecosystem and are still using highly expensive cloud-based solutions, what’s the point? How does the DevOps team in your company manage mobile CI/CD? Is that working well? I look forward to hearing your experiences. Please weigh in in the comments below.
Opinions expressed by DZone contributors are their own.