A revolutionary new way to scope configurations to managed devices.
The method of scoping configurations to devices in the MDM space has always been complex. When the Kandji product was first built it took a uniquely simple approach to this problem, but as users needs grew and more functionality was required, the approach was not scaling.
I identified this problem and led an initiative to pause upcoming feature work which would build on the unscalable solution, and pivoted the team's focus to discovery research to revaluate user needs. I proposed a radically different solution based on customer research, and was the primary definer of it's features and functionality. I worked with PM and engineering to gain approval for, define, build, test, and market this solution.
It unblocked $8,161,254 of ARR, reducing redundant scoping configurations by 13.6%, and meaningfully differentiating Kandji from competitors.
163,718 devices are currently managed using this feature which currently has an adoption rate of 48.52% across the platform (aprx 1 year post-release, legacy solution not yet deprecated).
Kandji is a Mobile Device Management (MDM) software. MDM providers are used by IT Admins to configure and manage the company's devices. If you've ever been forced to reset your password or update your OS on your company computer, this is likely a setting that you employer's IT Admin has set up for your device. We refer to these as configurations.
Configurations can also be scoped, similar to how a marketing campaign may want to scope certain ads to certain target audiences. For example, your computer may need different password reset settings than the CEO's.
Most competitor solutions allow scoping directly to user groups, eg "ELT gets X configurations", "R&D org gets Y configurations".
However, as complexity increases, it can become difficult to see what all configurations a device should receive and why. Also, some configurations may conflict. For example, one configuration may tell your device to run Sonoma operating system and one may tell it to run Ventura, but a device can only run one operating system at a time. In these cases, competitors do not have any way to resolve this kind of conflict and it results in an error on the device.
In Kandji, rather than scoping configurations directly to groups, admins
This creates a clean source of truth for all the configurations on a device, rather than looking through all the associated user groups to determine why the device received certain configurations.
If there any any conflicting configurations, Kandji simply does not allow these configurations in the same Blueprint.
1. Whenever different configurations were needed for different devices, a new Blueprint was made, leading to a proliferation of Blueprints. This led to more manual work when configurations needed updated across Blueprints.
2. When onboarding new devices, it was difficult to identify the right Blueprint to enroll them in.
3. When devices changed attributes (such as when users changed departments), they would need to be manually moved to a new Blueprint.
Later, "Assignment rules", scoping logic tied to the configuration itself, were introduced to allow for more scoping granularity in Blueprints. However, this meant the Blueprint was no longer a source of truth for all the configurations a device would get, and made it difficult to troubleshoot configuration assignment.
When I joined, several features were already slated to build on this model which was not scalable. The planned features were attempting to address three major points:
The current model simply did not allow conflicting configurations in the same Blueprint. This led to more Blueprint proliferation. How might we allow >1 of these conflicting configurations and, when present, resolve the conflict without the user having to do anything?
Making changes to a group of configurations was time-consuming as it needed to be repeated across all Blueprints. How might we make it easier to manage and update configurations as a group?
By proving out some of the planned solutions, I was able to illustrate how they would not scale for our future needs. I successfully made the case to pause on the current trajectory and conduct foundational discovery research on scoping configurations.
I worked with User Research to conduct interviews with 5 enterprise customers. I had them walk us through their current scoping setup and describe how, ideally, they would be able to manage their scoping. Our 5 main findings were:
"If I'm installing a Avid Media Composer, I also need to have Adobe Premier and Adobe Media Encoder. Like those three things would always go together. But here's a splinter thing- If I've got Avid Media Composer, well, if the device is in-house, I need the Avid Nexis, if it's out of house, I don't want the Avid Nexis on it. There's some things like that that kinda branch out." - IT Admin at Whitehouse post
Based on these findings, I had one major takeaway:
After presenting this proposal, leadership was interested in the concept but still apprehensive about reimagining the core product. My PM and I embarked on a campaign to get buy in at multiple levels of the company. This involved leveling up in some fidelity while moving quickly.
After many conversations, we got the go ahead on to continue pursuing this project!
Next we needed to validate that this concept solved our user's problems, and ensure that the design was usable. At the same time, our engineering team started investigating feasibility and frameworks. I put together some mid-fidelity prototypes so we could quickly test the concept as well as four main user actions.
Some participants interpreted the flow as more of an automation triggering sequential actions in time, rather than a visualization of logic with one action (assigning the configurations) at the end. Indicators were added at the beginning and end of the flow to define the actions that would happen.
In the tested designs, adding an "if else" statement and adding a nested conditional block were both done through a "+" button. This was resolved by differentiating the buttons through style and text.
A simple search bar allowed users to search by multiple device facets to target a device in device lookup, however it was unclear what they were searching on. In the results of the search, items were greyed out if a device did not qualify for them, but users wanted to see these unqualified items in order to troubleshoot why a device did not receive them. The search was redesigned as a filter to show more complex information about the device, and an interaction was added to unqualified items to reveal them on hover so users could inspect them.
Admins can create groups based on facets of the device or user, and configurations can be added or removed from these groups as needed. These configurations go to any device in the Blueprint that meet that groups' logic.
A device can be looked up on the map, and once selected the map will highlight the path the device takes through the map's logic to receive it's assignments.
Whichever of two conflicting configurations appears last, or furthest right, in the map is given priority in resolving the conflict, allowing admins to easily make overrides without affecting anything upstream.
With all these features combined, we were able to solve multiple user problems including
My PM & I demo-d the product in our June 5 youtube launch event. I also worked behind the scenes to advise on the script, example scenarios, and create assets. As customers began to use the feature, the initial feedback was overwhelmingly positive. Customers were impressed with our ability to differentiate and out-innovate our competitors.
As of March 5, 2025 (9 months post-launch):
There are 5,400 Assignment Maps in Kandji
48.52% customer adoption
Our top customers are managing 28k devices on maps
Across Kandji, there are 163,718 devices on maps
There is a 13.6% reduction in # of Blueprints for tenants using Assignment Maps
Our team continues to enhance this feature, with the goal of fully deprecating the legacy solution by the end of 2025. To that end we have several features recently implemented and on the roadmap to continue optimizing this solution. A few examples: