Introducing, FormFlow
Welcome to the journey of an Indie Hacker
As I git push
the last commit for the MVP that I’ve created and watch my Vercel builds complete, a familiar sense of dread starts to creep in…
If you're an indie hacker like me who wants to run their own successful SaaS product, you'll know exactly what I'm talking about when I say dread.
It’s that sense of dread whenever that voice in your head tells you to stop coding and start marketing.
“Stop adding features!”, it screams.
FormFlow is the simple way to create surveys in seconds using AI. Simply provide some basic information about your survey, such as the type of questions you want to ask and the audience you're targeting, and let our tool do the rest.
Try a Live Demo to see for yourself →
Close VS Code and start telling people about the product that you're building.
I wince at the word marketing. How do I even market?! I have to fight the urge to add one more feature to my product. It’s SO easy to do though. I have a list, no, I have an endless list of features that I can add to my product that will take me well into next year. But I know that if I do that I'll end up going into next year with absolutely zero users and a whole bunch of features that new users won't use. And let's be honest, features that are completely wrong for the product, or at least for where the product is in its life-cycle.
Instead, I know I have to stop coding and, according to the few posts and books I’ve read about startups, I have to somehow get my first 10 users.
If I’m to build a successful SaaS product as an indie hacker, I must be comfortable marketing and selling it. Either that, or recruit someone in to help me. That’s an option, and I’m not ruling that out. If 6 months down the line someone reaches out to me and we get on well, then I’d absolutely consider doing that. However, at the beginning, I need to at least try and market it and get my first 10 users.
I know from reading endless Hacker News and Reddit posts, that I'm not alone here. I know most indie developers who are working on their own product are suffering from a similar fate. That is that they are very comfortable building an app, however when it comes to marketing and selling the product it's almost like they become a deer in the headlights and freeze.
A bit about me
Hi, I’m James.
I’ve been a dev for the last 10 years in London, UK and have worked in teeny-tiny 3-person startups all the way up to 100,000 people plus enterprise companies. You could say that when it comes to building products for other companies, I’ve seen it all.
I’ve also built countless side-projects over the last 10 years.
I’ve built an AR app when Apple announced ARKit back in 2016. I’ve also built a Fireplace app for AppleTV. (I used to be an iOS Dev by the way…)
Notice that I say built countless side-projects. I’ve not once worked on a marketing team. Yikes!
After building the v1 of every one of those products, I stop.
I freeze.
Like a deer crossing the road, and a bloody great big truck hurtles towards me with its headlights on, and on the side of that truck is plastered the words: “MARKETING”.
This time, I'm not going to freeze. This time I'm going to push past that feeling of “marketing dread”.
Here’s the thing though. I don’t know how to market, but I do know how to teach myself how to do something. I taught myself how to code, after all. Therefore, I’ve decided that I’m going to teach myself how to market my SaaS product by taking multiple mini shots in the dark.
Oh, and I'm gonna record every shot in the dark that I make.
What worked, what didn’t, what was successful, and what was an absolute waste of time. I'm going to share it all with you.
🚀Follow my Indie Hacker Journey
The problem
TL;DR: There’s no easy way to create engaging user flows for the web. By user flows I mean things like surveys, questionnaires, onboarding tutorials, documentation, support centres, sales forms, etc. Anything where the user needs to be directed to do something, enter some information, and perhaps submit that information.
For the last ten years, I must have been asked to set up, integrate, and configure 100s of forms and flow type experiences. Each and every time, I’m so frustrated by the current offering that I build my own because it integrates into whatever app I’m building.
There are countless SaaS products that each do one specific thing I listed above. There’s a product just for onboarding. There’s a product just for building forms. There’s a product just for support requests. You end up signing up to several SaaS products just so you can have a contact form, help centre, onboarding flow, and sending a few surveys.
When you think about it, all of the use cases above use the same user interface: some text followed by a list of options that the user can click to be guided to more text, more options and perhaps some input fields.
If you're a web developer, you know that even building the simplest web form is notoriously laborious. You have to deal with validation, formatting, storing the data, posting the data, and that's before you even come to designing the flow of the form itself.
When you add multi-step to forms or any kind of component, you add complexity. Now you have to start storing state. Flows are horrible to build as developers, and forms are the least engaging thing on a website. No one wants to fill out a form. Especially if you’re presented with those huge, never ending forms asking you for your life’s history.
For a form, or flow, to be engaging, it has to include complex branching logic to allow the form to get specific to what the user is trying to achieve.
But wait.
Don’t these exist as no-code form building tools?
Yes. There are thousands of no code form, building tools for non-developers. However, the irony is that in my experience, it has been me as the developer who is asked to implement forms and integrate them into a website or web-app.
At the end of the day, these no-code tools are actually quite complicated to use and understand, especially when you get into complex branching logic. Business and marketing users don't want to have to learn another user interface. Engineers and developers are really comfortable learning new user interfaces and therefore there is less friction for an engineer to use these no code tools, compared to a marketer or a salesperson.
These no-code solutions also do not integrate well into web-apps. They’re a walled garden. I can’t easily drop a type form into my web app as part of a user onboarding flow.
What I want to build is a flexible, dev-friendly way to build out “flows” and to be able to customise the flow using variables, and then extract variables out of the end of the flow, so it integrates seamlessly into whatever web-app I’m adding the flow to.
The solution should:
- Be developer (and non-dev) friendly
- Integrate seamlessly into any web-app or website
- Have elegant syntax
- Be completely customisable
- Take in variables
- Modify variables throughout the flow
- Spit out variables at any point of the flow
The solution
At the beginning of last year, I toyed with the idea of building a point and click adventure game. I know it's silly, but I grew up playing video games and it has always been a fantasy of mine to build one. During the research phase of this idea, I stumbled across Ink. Ink is a scripting language for creating branching narratives in video games.
Now, if you think about it, branching dialogues in video games are not too dissimilar to forms and surveys…
One day, I was reading Hacker News and I came across a post about Ink.
There were a couple of comments talking about how Ink would make for a good implementation for interactive, engaging documentation. The comments stopped me dead in my tracks. What if I could use Ink to solve my problem of building complex, branching forms?
What if the user interface wasn’t a video game made in unity, but instead a beautiful, clean, customisable web UI?
I'm pretty sure I wasn't the first person to think about this idea, so I looked on GitHub for existing projects that use Ink to build web forms. To my surprise, there weren't any current popular projects. There were a number of libraries who had attempted to port Ink to the web, but still within the medium of video games and interactive stories.
My brain was running at 1,000,000 miles an hour with ideas.
Ink could allow me the flexibility to create engaging onboarding flows using a simple, elegant syntax.
FormFlow is born.
The stack
So at the start of this year (2023), I fired up a brand-new Redwood JS project and got to building. The inner engineer in me was incredibly happy. I felt energised! I hadn’t found a project that I was this happy building in years.
However, I knew that in a few weeks time I would have to put my marketers hat on and that absolutely filled me with dread.
But for now I was happy building.
I do actually want to give a massive shout out to the team over at RedwoodJS for creating an absolutely amazing JavaScript framework. Yes, there are countless jokes about how a new JavaScript library or framework is released every week. However, Redwood JS really is the best bits of Ruby on Rails and the JavaScript ecosystem combined. I was able to get an MVP up within weeks. So if you are thinking of creating a new web product I urge you to take a look at Redwood.
After a few weeks, I had a working MVP that would allow a user to create complex flows. Surveys, quizzes, questionnaires, onboarding flows, etc. Anything!
Using a super easy to understand, simple syntax like this:
How was your experience at Bistrot Pierre?
+ [Excellent] -> BestPartQuestion
+ [Good] -> BestPartQuestion
+ [Average] -> BestPartQuestion
+ [Poor] -> WorstPartQuestion
+ [Terrible] -> WorstPartQuestion
== BestPartQuestion ==
What was the best part of your experience at Bistrot Pierre?
+ [Food] -> ImprovementQuestion
+ [Service] -> ImprovementQuestion
+ [Atmosphere] -> ImprovementQuestion
+ [All of the above] -> ImprovementQuestion
== WorstPartQuestion ==
What was the worst part of your experience at Bistrot Pierre?
+ [Food] -> ImprovementQuestion
+ [Service] -> ImprovementQuestion
+ [Atmosphere] -> ImprovementQuestion
+ [All of the above] -> ImprovementQuestion
== ImprovementQuestion ==
What could Bistrot Pierre have done to improve your experience?
+ [Better food quality] -> RecommendationQuestion
+ [Better service] -> RecommendationQuestion
+ [Better atmosphere] -> RecommendationQuestion
+ [Nothing could have been done to improve my experience] -> DONE
== RecommendationQuestion ==
Would you recommend Bistrot Pierre to others?
+ [Yes, absolutely] -> DONE
+ [Yes, but only with reservations] -> DONE
+ [No, I would not recommend it] -> DONE
Created this. Go ahead, try it. It's interactive.
The AI pivot (and my jaw hitting the floor)
I was happy with the direction my product was going in, and knew that I was on to something when I built the variable part of FormFlow. You could pass in variables via URL query params, and FormFlow would ingest them and change the flow. It felt really magical.
Enter, the GPT-3.5 API
Now, I’ve heard of pivoting before, and I didn’t think I would. It felt awkward.
But everyone stopped what they were doing when Chat-GPT came out. It feels like there’s a revolution happening right in front of us, especially as engineers. So, I hopped on Chat-GPT and decided to ask it to create a survey using Ink.
My jaw hit the floor.
It knows Ink, therefore it knows how to create surveys using Ink.
I was able to write things like: "Create a 5 question survey about a Samsung washing machine", and because GPT-3.5 would know about the washing machine and all its features, it could create a survey in seconds.
If you don’t believe me, try the interactive playground and see for yourself! It feels magical
So, obviously I spent the next few weeks tweaking FormFlow to be a survey generator using AI. It made sense, right? You can still use FormFlow to create any kind of user flow you want, but for now I’m going for the angle of generating surveys on demand. Kind of like if a user buys something from Shopify, you can use FormFlow to automatically email that user about that product, asking for specific feedback.
What’s next
Phew, that was a lot. If you got to the end, well done! I’m going to continue not coding, and push through the awkward feeling of marketing.
My plan is to get this MVP in front of as many people as possible to start receiving feedback. I need real users, and the only way I can get real users is by telling people about what I’ve created. I’m likely going to post this to HackerNews, as well as Reddit. So my next post in the indie hacker journey will be all about how I intend to get my first 10 users.
đź‘‹ See you next time!
(If you liked this post and want to be notified when the next post in my journey arrives, pop your email address in the form below, and you'll get an email notifying you when it's here.)