Designed a feature to address a critical brownfield challenge, enabling companies to seamlessly onboard their existing Infrastructure-as-Code (IaC) or Terraform modules to the Facets Control Plane.
My Role
Product Designer
The Team
Myself, CTO, Head of Engineering,
1 Product Manager, 3 Engineers
Timeline
Dec 2024
Click here to see the final designs.
Terraform is a tool that helps people manage their digital infrastructure (like servers, databases, and networks) in a way that’s automated, consistent, and easy to track. Think of it like a blueprint for building something complex, but in this case, the “building” happens in the digital world.
Traditionally, setting up these resources meant doing a lot of manual work—logging into different platforms, clicking buttons, and configuring settings. With Terraform, you write a simple code-like document that describes what you want, and it takes care of creating or updating everything to match that description.
For companies just starting out, Facets is an excellent solution. They can choose their cloud provider, create infrastructure from scratch, and launch environments with ease. These companies have access to a wide range of popular modules and resources provided by Facets. This scenario, referred to as a greenfield problem, is relatively uncommon.
In contrast, the real challenge lies in addressing the brownfield problem. Companies with existing Infrastructure-as-Code (IaC) modules prefer to continue using their own resources. Migrating these modules to Facets is often a significant undertaking, one they are hesitant to pursue without substantial support from Facets’ engineering team. The problem on our hands is as follows:
How can users identify that Facets has the capability of adding custom modules?
How can users migrate their own custom modules easily to Facets Control Plane and thereby rely less on our engineering teams?
How can users keep track of their the versioning and ownership of their modules as well limit the use of a module to certain projects or project types.
My research began with understanding the core principles of Infrastructure-as-Code (IaC) and Terraform. Terraform enables engineers to define their infrastructure needs in code, which it then provisions automatically. The main components of a Terraform module include files such as main.tf, variables.tf, outputs.tf and providers.tf. These files work together to create reusable and modular infrastructure configurations.
The current process for onboarding clients with their own Infrastructure-as-Code (IaC) modules is error-prone, inefficient, and consumes a significant amount of our engineering team’s bandwidth. The attached image illustrates the current workflow:
I talked to the engineers in the Infra Team at Facets as well as the Head of Engineering to understand how they struggled with assisting our users to onboard their modules.
Deepak: Why can't users just upload files of their modules to Facets?
Rohit: "It’s more complex than it seems. For their modules to run on Facets, they must conform to the specific Terraform file conventions that Facets supports. Currently, this alignment can only be done manually, at least for the foreseeable future."
Deepak: Why can't Facets just create the modules needed for every company in the world?
Rohit: "Custom modules are often tailored to the unique infrastructure needs of a specific company. While our modules cater to a majority of use cases, they may not always meet the specific requirements of our customers. Furthermore, it’s not feasible to include every possible module within Facets."
Deepak: Why can't these users modify Facets' modules?
Ishaan: "Our modules are not open source. The decision to transition to open source is still under consideration and will require significant time to finalise. At this stage, we are uncertain about making our code publicly available."
Based on my findings, I came up with the following user personas:
DevOps Engineer
Works in a small independent Ops team concerned with creation and maintenance of modules only.
Software Developer
Concerned with creating infrastructure to run an application or website. Uses the modules created by the "DevOps Engineer" Person in the DevOps team.
After 2 days of research into Terraform, talking to users and stakeholders, we came up with the following requirements of any user trying to onboard a module to Facets:
A way to initiate module creation and adding it to Facets Control Plane
A way to see all the listed modules in Facets as well as a link to the Git repo where the module is stored.
A way to see the latest version along with its diffs as well as the owner of the modules
A way to test the modules in certain projects and later publish them for global use
In a discussion led by the CTO and Head of Engineering, we finalised a new flow of how a user can create a custom module in Facets. This flow enables the user to create a custom module by themselves. With the userflow fixed as per engineering contraints, the majority of the user experience were to be focused on the part after a module has been added.
The Frontend team was able to develop this feature quickly by utilizing components already available in our design system, minimizing the need for additional development time.
For enhancements, I got together with Infra and Backend Engineering teams to come up with ideas as to how the experience can be made better in future.
Through Custom Terraform Modules we were able to achieve the following results:
As this feature is relatively new, more data and insights are yet to come. The following enhancements were planned for the coming months:
Ability to map modules to certain projects using project types.
Creating a marketplace where people can use our modules, add their modules and give ratings to these modules. This marketplace will be used by users in our open-source community.
Ability to add custom modules from the UI directly instead of using the CLI (Command Line Interface).
Finally, I learned that the world of DevOps and Platform Engineering revolves around complex technologies. Developers and engineering teams have been using all sorts of ways to make their day-to-day operations easier and Custom Terraform Modules is one of those ways. I am proud to designed a feature that has made our product more usable from a user and business point of view.