Stratelight #8: I Built FindFunCars and It Was Fun
Escaping daily business and letting creativity roam free. A PM side project with refreshing learnings.
Hey everyone again and thank you so much for sticking around! I appreciate you waiting patiently for some new content and I hope I can deliver.
This post is going to be slightly different to the last couple of posts. This is not a permanent change. I was trying something new during the Christmas holidays by building my own little product and I'm trying something new with this post by adding in some sprinkles of personality.
Alright, starting off with some history of my own.
When I was in primary school I would read car magazines, get my hands on the model catalogs of brands like BMW and Audio and spend hours working out what would be the perfect car for me. I was always in the search of just the right balance between performance and price. While being 8 years old, yes it was a bit early to select my perfect car, but I thought back then "better prepare early for major life decisions" ;)
I've always loved cars and even wanted to become a car engineer at BMW or Audi before swinging to IT just in time of the decision which high school to go to.
Side note: In Austria you have to decide at the age of 14 if you want to go to a high school which focuses on general knowledge, or to a high school focusing on a specific industry like IT, car manufacturing, gastronomy, fashion and many more.
While I'm very happy to have made the decision for IT, my love for cars and the engineering that goes into them, has stayed.
Now another topic I'm fascinated with is data and making sense out of it. I love to use data to answer questions. I love to think up systems that help bringing structure into data and I love extracting information out of it.
In the last year I've become somehow reminiscent of the problem of finding the "perfect" car for me. Like back when I was 8 I still don't have an immediate need, but at least I could drive one this time around.
The perfect car for me means a car that is fun to drive, has great performance metrics but doesn't break the bank.
Finding a car using those dimensions has proven incredibly hard using existing platforms out there. You either get no performance metrics, but all the data there is about interior and exterior details and a price, or you get just the performance metrics without any information about details or price.
I couldn't find a single platform that combines both and let's me easily determine fun cars according to my dimensions.
The Product Management in This Whole Story
You might think at this point "Markus that's all fine, but I came here to read about Product Management", and I'll get to that in a second.
Where there is a problem there is a Product Manager to solve it ;)
Since there was no solution out there, I took the matter in my own hands and started to think what I would have to do to solve the problem for me MVP-style.
I wanted to focus on my two passions laid out without thinking too much if this could become a business or not. In my daily job I spend a lot of time thinking within the constraints of a Product Manager and didn't want to put the same constraints on this holiday project. It was meant to break free of them.
The only two restrictions I had were time - I had to finish it within 5 days - and actually solving a problem rather than building a random solution.
Getting Started - My Assumptions and Motivations
My assumptions and "facts" I set out with were:
It should primarily serve my need. If others would see value in it that's fine, but I really want to solve my problem here.
If it would ever become a product to sell, it would be a very niche product.
It only has to work in Austria. Car buying is a very regional experience, which is exactly how this problem started in the first place as Austrian looking for cars.
Scaling will be hard. Because of its regional restriction it has a clearly defined market cap and expanding to new countries takes big investments and cultural expertise.
Now reading those assumptions, it might sound like something you don't want to do in the first place. However, enter my set of motivations and it becomes clearer why this still makes sense:
My biggest motivation and goal was to really focus and "get lost" in something I love. No restrictions, no "but this won't make any money", just fun for fun's sake!
This also meant I was not in it to build a business or earn a single dime with it.
Lastly, I had to time box it. I had to get back to my real job after a couple of days after all ;)
First - I set out to solve my problem.
That meant finding data sources for cars in Austria for sale and performance data I could match to those cars. To make the matching part somehow feasible, I focused on specific car brands I generally know are building performance cars. Those were the classic German brands Audi, BMW, Mercedes and then I added Alfa Romeo into the mix.
The biggest used car site in Austria (I know of) is autoscout24.at so I started there. This gave me a couple thousand cars to work with. Off to a good start!
The couple thousand cars were still lacking proper performance data (0-100km/h times, cylinder count, horse power per tonne, ...) so I set out to find that data next. Sure enough I found a good data set at fastestlaps.com
Having the data sources, I needed to build out a lean ETL pipeline to make data extraction, transformation and loading an easy, repeatable process. This was the part I loved most. Data wrangling, figuring out common denominators and making seemingly random data work together still has some magic for me.
Last but not least I wanted to have an easy way to access the data, filter, search and present it
Second - See if anybody else has the same problem.
Now I talked a lot about how this was just about me and my specific problem. I guess that's my Product Manager mentality comes in - I had to see if somebody else sees the world like I do, if people out there have this problem, and if they do, how they solve it today.
This was really meant to be problem exploration, not marketing nor promoting my idea.
Getting My Hands Dirty
To solve my problem I chose 3 different tools:
Data ingest - webscraper.io
ETL - sheets.google.com
DB + UI - backendless.com
webscraper.io is an incredibly easy to use tool for web scraping. It just plugs into your Chrome web dev console and lets you visually select items + define regex rules for data extraction. I have used webscraper.io a couple of times in the past and was never disappointed.
sheets.google.com is incredible versatile and by using a couple of different scripts it also can generate UUIDs, lookup values across multiple different sheets and do powerful data extraction using regex.
One example formula I have in use to extract car models is
=ArrayFormula(IFNA(vLOOKUP(regexextract(C2,TEXTJOIN("|",1,IMPORTRANGE('Instructions/Variables'!$B$3,"Audi_Models_Lookup!$A$2:$A"))),IMPORTRANGE('Instructions/Variables'!$B$3,"Audi_Models_Lookup!$A$2:$B"),2,0)))&" "&TO_TEXT(O2)&" "&VLOOKUP(N2,IMPORTRANGE('Instructions/Variables'!$B$3,"Audi_Models_Lookup!$D$2:$E"),2,FALSE)&IF(AND(O2>=3,regexmatch(C2,"Quattro|quattro"))," Quattro","")
backendless.com was first introduced to me at the Vienna NoCode Meetup organized by a friend of mine, Michael Ionita-Ganea. It allows to manage database, backend services and also has a UI builder utilizing the well known open source editor by Google. Since I didn't want to play around and get blocked by tasks like setting up my own IDE, deployment pipelines and cloud accounts, NoCode was clearly the way to go for me.
I had a great first run with webscraper.io on autoscout24.at and fastestlaps.com, combining the date in a Google sheet and playing around with filters, but when I wanted to build it out into a repeatable process I encountered a couple of problems:
autoscout24.at only allows to view 100 pages, so I was limited in how many cars I could pull. After reading their terms it also turns out they explicitly prohibit webscraping, so I had to find an alternative if I wouldn't want to get into problems (apart from the timeouts I had to add already as they detected my scraping). I got into thinking, the best platform for scraping is an aggregator, as they already get their data from multiple other platforms. So I switched to autouncle.at, which allows for more data to be scraped and has nothing against it in their terms.
backendless.com while being a great platform and allowing to get started quickly still has quite some things that are undocumented. Yes there are videos explaining a couple of things, but I encountered a lot of different problems which should be easy to solve, but there are simply no docs about it. Especially importing data is basically not documented at all. On the plus side, I was really impressed by their swift support, even on December 31 I got responses in less than 1 hour!
Now I set up the data ingest, built a repeatable process using webscraper.io and Google sheets, had a way to import the data into backendless.com and built a first version of the UI. Time to celebrate!
Yes, my focus was function over form :D But I improved, expanded and updated the UI step by step.
After building out my solution and solving my problem - it was indeed MUCH faster to find cars that fit my requirements, I set out to ask how others find fun cars to drive and got quite some responses. Overall the sentiment was that "fun to drive" is a very hard to define quality of a car. Its definition is also very subjective. Full thread at https://www.reddit.com/r/whatcarshouldIbuy/comments/komodg/how_do_you_find_cars_that_are_fun_to_drive/
I didn’t further explore the business side of findfuncars.at, but decided to be happy with my creation and instead add the feedback from Reddit to the things I learned.
What I Learned
Google sheets is really powerful, but of course also has its limits as a database. Especially when combining multiple sheets I then found out that imported data is only refreshed once per hour per default. Also with sheets containing several thousand rows with 20-30 columns it begins to really lose performance.
Communities are powerful, especially for topics which are emotional and can not be well explained with data or metrics. How "fun" a car is to drive is often better described by fellow humans talking about their emotions than a fact sheet of a car. I still think this is the most powerful lesson here.
People connect with emotion and other humans, not with data and facts.
NoCode is already in an impressive state. Backendless.com made it so easy to spin this up in a couple of days. I didn't have to write a single line of code - well some CSS to style my components, but that really doesn't count. However, while NoCode really speeds up the whole process, it still needs solid web technology, architecture and data structure knowledge to really make it work for you. Naming traversing JSON data just as one thing which I see people getting stuck if they don't know the basics.
What I Would Do Differently next Time
One constraint or decision I left out in the beginning and which came back to haunt me was if I want to build this as a one off information gathering to determine the car models that fit my bill or something with dynamic updates I can check again and again.
This led to questioning my approach of data breadth vs data depth (+ automation) more than once.
Why Not Just Publish the App
Now you might ask, why I didn't publish the app or push it out more actively. The reason is it was never my intention. Yes, findfuncars.at still shows the front end (no data since my backendless.com trial ran out), but for now my learnings were the real value I got out of it. Finding people who see value in it is an effort I don’t want to take on right now.
It was a relief to build something that is not about making money or making it big for once and I wouldn't want it any other way for FindFunCars.
Thanks for reading Issue #8 of this newsletter.
I’d appreciate it if you’d hit that heart button and share with a friend.