Facets' Custom Terraform Modules

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

Custom Terraform Modules have significantly optimised efficiency, freeing up 80% of the in-house engineering team’s bandwidth. The feature also acted as a powerful lead magnet, with initial product demos receiving overwhelmingly positive responses due to support for custom modules. This enthusiasm led to a 40% increase in new pilot programs.

Click here to see the final designs.

Before you proceed: A Quick Introduction to Terraform

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.

The Problem

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.

The Research

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

Ideation and Design Process

Coming up with the new flow

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.

Wireframing

Final Designs

Click here to go to the top to read the case study

Collaborating with the Developers

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.

Results and Key Takeaways

Through Custom Terraform Modules we were able to achieve the following results:

80%
time of engineering team freed up
40%
more pilot programs signed due to the availability of this feature

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.

"Simplicity is not the goal. It is the by-product of a good idea and modest expectations."

— Paul Rand