Skip to main content

Windmill for Internal Admin Panels - Kahoot! Case Study

· 4 min read
Sindre Svendby

"Currently, we use 9 apps, 20 flows, and 63 scripts in our daily operations. They all serve as the foundation for essential tasks, allowing users to independently manage their activities according to their specific needs."


This is a testimonial written by Sindre Svendby, Software Engineer at Kahoot!.


Windmill Kahoot!

I have been a software engineer at Motimate for the last 5 years. We are based in Oslo, Norway and we are now part of Kahoot!. While the brand Kahoot! traditionally focuses on B2C, we target Enterprise clients.

I began working with Windmill at the start of the year. It currently supports internal tools used by multiple departments. We are gradually extending its use to additional departments to better meet their requirements for internal tooling.

Choosing Windmill for Flexibility

Our team faced some challenges such as constraints on the tech stack. Some tools, such as Stripe Billing, prove most effective when your business rules align precisely with their predefined criteria. However, we encountered challenges, including a maximum billing period of one year and the absence of a straightforward method for implementing Consumer Price Index increases. While it's possible to find workarounds, this essentially involves accommodating the limitations and not truly enjoying a comfortable solution. On the other hand, tools like Zapier offer simplicity in their initial use, yet they are more tailored for marketing teams and can become frustrating to iterate upon and build large scale workflows. Easy things are hard (line items - I'm looking at you), and you do not have the code in git / version control systems.

Since we had our own use cases, we needed a flexible solution to create our internal tools.

At first, I turned to Windmill for workflows, as an alternative to Zapier. Windmill made significant improvements in our automation processes. I then discovered the Windmill app builder. This tool allowed us to transform many of our one-off scripts/flows and CLI tools into user-friendly applications. With these new interfaces, our staff could easily interact with the tools, which significantly reduced the workload for our developers.

Examples of what we have built with Windmill include:

  • Billing: We integrated Stripe into an app, replacing Stripe Billing for use cases it is not able to support.
  • Synchronisation with backend: We make sure that third-party systems like Stripe and Hubspot have the correct information compared to our main system. If everything is right, it updates automatically. If there is a difference, CS/Finance teams get an alert to look into inconsistencies.
  • Customer success: As our CS team used Zendesk, we leveraged Windmill for translating, fetching, and insering articles into Zendesk using OpenAI for new languages (I shared this flow on WindmillHub) and made an app out of it.

Currently, we use 9 apps, 20 flows, and 63 scripts in our daily operations. They all serve as the foundation for essential tasks, allowing users to independently manage their activities according to their specific needs.

What's next?

Looking ahead, our plan is to expand Windmill to more use cases.

While I manage the back-office for now, our goal is to engage less-technical team members in building workflows independently. This will be facilitated by leveraging ChatGPT and Windmill's Code Generation, coupled with Windmill's rapid code testing capabilities, which significantly shortens the feedback loop.

Use case: App for translating Zendesk Helpdesk using OpenAI

Bellow you will find an internal app that is used by our CS team to translate fetch articles with OpenAI and insert them into Zendesk with the new language.

Windmill Logo
Windmill is an open-source and self-hostable serverless runtime and platform combining the power of code with the velocity of low-code. We turn your scripts into internal apps and composable steps of flows that automate repetitive workflows.

You can self-host Windmill using a docker compose up, or go with the cloud app.