Say Yes to Code: developing custom tools for a first-class user experience
What do you do when tasked with bringing 300+ subsidiaries into the same macOS client? You build your own apps and framework, of course!

How does an organization develop a macOS client that will accommodate and fully support more than 300 subsidiaries? While also accommodating all the unique requirements for each subsidiary?
In a word: coding. Thomas Lübker, Technical Product Owner, macOS Engineering, and Collin Voßwinkel, macOS System & Application Engineer, of Lufthansa Industry Solutions, explained how they did it.
Lufthansa Industry Solutions faced an enormous challenge.
Lufthansa Industry Solutions is an IT services and consulting firm that functions as a managed service provider for Lufthansa rather than an internal IT department.
Their challenge: to develop a macOS client that would fit all 300+ of Lufthansa Group’s subsidiaries. This meant they would have to accommodate all the unique requirements when onboarding a new subsidiary. It required that they create "glue logic” with coding to connect the dots.
While many organizations do well with open-source solutions and scripts to manage disparate customers, Collin Voßwinkel felt it wasn’t enough to cover all his bases and to offer the most user-friendly and intuitive user experience. So, he taught himself Swift and SwiftUI to develop user-facing applications that enhanced the user experience.
This was so successful that he now leads a small team responsible for developing useful apps for their users, admins, security and support.
The ELF family of in-house apps
Lufthansa Industry Solutions has developed the "ELF family" of six in-house apps to improve the user experience, four of which Lübker and Voßwinkel demonstrated during their JNUC presentation.
Leia
The problem
Lufthansa Enrollment Application, or Leia, was the first app the team developed in response to a puzzling amount of support tickets filed to ask questions. All of the answers were in a comprehensive .pdf onboarding guide that each new user received upon onboarding.
Users were required to set up on their own machines to work within the Lufthansa Group environment, which was painstakingly outlined in the .pdf. The onboarding guide detailed how to:
- Connect to Wi-Fi
- Set up Outlook
- Access company VPNs
So why did users keep filing tickets? It appeared they weren’t making full use of the onboarding guide.
Researching solutions
The team spent three days in a workshop to determine how to make the onboarding process more fun and engaging. While they found some open-source tools that nearly fit the bill, these tools lacked some of the features they needed.
Building the solution
In the end, the team realized they would need to build something on their own.
Despite the fact that some team members had little to no experience with Swift, they created a prototype in those three days with a lot of Googling and a steep learning curve.
Now, Leia is a fundamental part of onboarding and is customized to fulfill the needs of each Lufthansa subsidiary.
Luna
Leia then got a sister called Luna, which uses the same framework but with a different purpose and a twist: Luna can be triggered by a script to provide more variable information in situations such as:
- The introduction of new features
- Instances when users must take an action
- Device compliance registration
After the launch of the “sisters,” the team received a lot of positive feedback from their users, and their support tickets were greatly reduced.
Luma
This made the team wonder: “Are there more problems that we can solve with code?”
That’s when they created Lufthansa Utility for Mac Administration (Luma).
Because of the organization’s unique and complex environment, they needed a tool to easily perform time-consuming workflows in Jamf Pro.
This tool uses the Jamf Pro API to smooth the way for:
- Reassigning Macs between Lufthansa subsidiaries
- Importing invoice data from suppliers
- Assigning users to groups in bulk
- Providing users with viable keys
- Troubleshooting devices
And many more common tasks.
Leah
Next, the team created the Lufthansa Internet Application (Leah). During their proof-of-concept, the team introduced "company apps.” These were small web applications that they built with Native Fire, a tool for creating web apps.
This allowed new employees to have everything they needed for navigating the organization at their fingertips, such as payroll and other internal resources.
The problem
Such “company apps” are crucial for new users in such a large organization, but the team had some issues with these Electron apps. They were large and unwieldy; they became outdated quickly, requiring that the team repackage and re-provision them around twice a month; and Electron apps have known security vulnerabilities.
The answer
So, naturally, the team created their own framework.
Like you do.
As with the other tools they created, they kept it macOS native. And they used WebKit: an open-source web browser engine.
Today, the company apps are much smaller: on average only 0.2% the size of the Electron apps. Their new custom apps now update with existing macOS updates, removing the need to repackage them repeatedly.
And because Leah is their own framework, the team can fully customize it based on their needs.
Ways to get there
If you’d like to create custom apps for your app and device management, Lübker has two recommendations.
First, hire a diverse team. When you have people from different backgrounds with different strengths on a team, you simply have a wider breadth of options and can draw knowledge and ideas from a larger pool. And the ways those ideas interact with other ideas can create solutions that are truly something.
Second, he recommends taking a close look at the extensive Jamf Pro API, which can support and inspire custom app creation.
This presentation had a lively Q&A section; if this is a topic you are considering, watch the video when it becomes available for more tips.