Blog Article

My struggle as a businessperson

Published: October 9, 2019

tldr; Thank you Kim and thank you Jen! Give ShukesAndGiff a go! Creating is hard. Know your core beliefs and stick to them.


This one might be a long one and might turn into more of a rant...

but I feel it is important to those who want to be creators to see what goes on in my mind as I develop products.


If you don't know me, people would generally describe me as a nice guy. I have always struggled with this idea of 'being nice'. For me the line on 'being nice' and 'being walked on or taken advantage of' can be hard to discern. It is this duality between innocence and naivety is a struggle that 42 years of programming (OK, probably not 42 years but I don't know when I would have started so by default went with my age) is hard to peel away.

At my core I am inspired and drawn towards innocence. I think of innocence as being overwhelmed by the awesomeness that life has to offer. Being shown something new for the first time is so amazing and awe-inspiring. I love the wonder in my daughters eyes as she learns something new or sees something for the first time. I love traveling and experiencing a different culture and opening a new perspective. The sunrise that changes daily out my backdoor leaves me in awe. I love the elegance of a new solution method to a math problem I have taught for 10 years.

This struggle can impact my decisions or weigh heavily on my decision-making process.



So about 5 years ago I made a thing called FormRecycler. In my math class I used a hybrid SBG method where students could continue to take quizzes on a certain topic. I had a set of problems that I generated with g(Math) to be the same level and autograded them with Google Forms. I would want to reuse questions and there was no native functioning in Forms to do that. So I built one. Was I the first person with the idea that this functionality was needed? Probably not. Andrew Stillman and I chatted about the functionality back in the fall of 2014 and even chatted with the Google Forms PM about it then. Nothing came about and I needed the functionality so I spent the time to clean up the code and publish FormRecycler. I published FormRecycler back on December 11, 2014. The time required to publish an Add-on can be significant. There are stringent rules that you need to abide by. Additionally once an Add-on is published it will get used (ideally) and need to be supported. That takes time as well. As you can tell by the screenshot from my Developer Dashboard, it is on version 48. That doesn't mean I have changed the code 48 times, that is the amount of times I have published an update. Some updates are just a few lines of code. Some updates were massive, like the licensing system I implemented and published back on April 1, 2019. I probably spent a couple hundred hours on my weekends and holidays to implement that code. I had to learn a bunch of new stuff and leveled up my coding a lot. I spent a lot of my free time away from my family too.

Blog picture

What did that licensing do? Well it restricted the usage of FormRecycler, allowing users to only recycle 50 questions per week for free. For the previous 4 years and change I had not been charging anything for its use. I spent a lot of initial time getting it published back in 2014. I spent time supporting it for the next few years. I sold g(Math) in 2016 and didn't really focus on my other Add-ons as I was fully focused on getting g(Math) turned into EquatIO and more professional. Around June 2018 Google updated the restrictions for Add-ons and I was notified that my Add-ons (FormRecycler and FormCreator) would be not working as I needed to verify the Oauth. I hadn't paid much attention to them beyond small bug fixes.

I was surprised by 2 things:

  1. There were over 100,000 people who installed both of them (almost 500,000 now for FormRecycler and FormCreator got reset on a glitch in updating the Oauth Verification in the GSuite Marketplace). Blog picture

  2. That a better solution did not exist natively.

I had always figured that Google would eventually add the functionality natively. Every year at ISTE I would chat with people at Google and figured this was the year that FormRecycler would become obsolete.

Since that still hadn't happened. I spent the time to update my Add-ons with the Oauth verification and enable people to keep using them. After ISTE in late June 2018 and more conversations with the Forms team, my takeaway was still that there was nothing that was going to be implemented natively (not that they have an obligation to share their roadmap with me anyway).

So I decided that there were a bunch of people who found FormRecycler useful and since there were some improvements in Google Forms, mainly with the ability to do Quizzes. (Which is based off another successful Add-on, Flubaroo...). I decided to spend the time to improve FormRecycler and at the same time implement a licensing system. I didn't want to restrict the feature usage of FormRecycler and also wanted to 'still be nice'.

This is the part that I struggle with. So I had a core group of people who were using FormRecycler for years. It was integral to their teaching workflow. As teachers, my wife and I spent so much money out of our own pockets buying resources we used in the classroom. I didn't want to penalize teachers who wanted to continue using FormRecycler, but at the same time I want to value my own time. That was the internal struggle. In the end I chose 50 questions a week for free as this would impact a minority of my users. If I was a 'better businessperson' I probably would have gone for a lower quota to impact more people. The impact of this quota in April was the workflow of the user was impacted if they reached it. This meant they needed to purchase a license for $24/year or stop using FormRecycler that week. I felt like the timesaving was worth the money they would spend (or $2/month) but I also understand teacher budgets are tight and it was most likely coming out of their own pocket.

There were some nasty emails and feedback I got as a result. That was hard. They said I wasn't nice and how dare I 'bait and switch' them. Some people emailed me thinking I worked for Google and that it was nasty how Google was taking something so valuable away from teachers.

Then, the first person subscribed to FormRecycler. Another email came in thanking me for adding features that they asked for previously. The Stripe app on my phone sends me a notification when someone subscribes and there is such elation from seeing that notification. The fact that I took an idea and turned it into something tangible, something valuable, something that other people are willing to pay me to use! That was awesome.

That happened 153 times from April 1 when it launched to the end of the school year in early June! (In fact it just happened as I was writing this blog post!!)

Blog picture

I spent a ton of my weekends and holiday time drawing up a roadmap for FormRecycler and getting a ton of ideas. I implemented a bunch of new updates based on feedback from users.

Then the days before ISTE 2019 in late June, Google announced they were going to incorporate the ability to Import questions from your Forms soon. I was devastated. Seriously, NOW they were going to implement it!?! If it had been a year earlier it would have hurt but not as much. The hundreds of hours I spent upgrading FormRecycler were going to be worthless. I just got a bit nauseous as I typed that still. It hurt. It still hurts.

It hurt more when I played with their native functionality and saw it was faster (as it should be).

It hurt when I saw they could also import embedded images (I had to hack out a crazy solution with XMLs of public form and a Chrome Extension as Google doesn't expose that method in their API).

It hurt when I saw they would import the correct answer (something on my roadmap that I would need to use a Chrome Extension to do or wait for Google to expose the API).

It hurt to read their release documentation and specifically not mention that it was possible with FormRecycler that the only way to do it previously was manually.

Blog picture

But what hurt the most is that their UI and user experience was so similar to FormRecycler. Even the Select All at the top and the checkboxes. Granted that was probably the most intuitive way to do it, so it shouldn't be surprising. But it felt so similar that it hurt. (I still like that FormRecycler gives a bit more detail like letting you see what the options are and what the Grid column and row headings are). It felt like all the work I had done was just for them to say, 'Hey thanks, we are going to take all your work and put it in our product'...except there was no thanks.

Blog picture FormRecycler question selection view

Blog picture Native Google Form import question view

Now I know this is only my perspective. Their development team is only focused on their roadmap, its probable they weren't even aware of FormRecycler existing. But that rationale still doesn't fix the hurt.


So why did I write about this today? Well mostly it is for myself (as is most of this blog :). It was cathartic to share the story and put it down in words. But I was reminded about it when listening to one of my favorite podcasts: Shukes And Giff. You should definitely give it a go, they are awesome!

I love their Podcast as I always learn something and they are both amazing people. (And I am ashamed to admit, I find their jokes funny...I literally laughed out loud at the fish joke yesterday).

I was listening to the latest episode and Kim started talking about this new, amazing Forms was like someone stuck a screwdriver in my ribs. Really painful, kinda too my breath away, I was getting a bit dizzy, then realized it was probably only about 10% or 1% as painful as getting stabbed by a screwdriver...but as a math teacher I love hyperbolas (apologies for the painful math pun there).

Then...Kim started to talk about FormRecycler and I was so touched. She mentioned about how impactful it must have been in integrating that feature natively. Her and Giff both talked about me in such glowing terms I couldn't keep it together anymore. I was glad that no one walked by my office at that time as they would have seen me ugly crying.

Thank you Kim and thank you Jen!

Secondly, I had an email from a person who bought a FormRecycler license a few days ago. They used FormRecycler to recycle almost 200 questions just after buying the license. Then they emailed me and asked for a refund since they just found out Google Forms does this natively, for free.

That is where my dilemma lies as a businessperson. Should I refund them? They paid me $24 to use FormRecycler for a license for the next year and used it. I assume it saved them time. At some point afterwards, they learned about the free functionality. I now work for myself full-time developing apps. My ability to buy food and pay rent and live is derived from revenue. I currently have monetized FormRecycler and FormCreator with some other apps on the way.

I refunded them. Why? Maybe I am not ruthless enough. I could justify that they used it and I plan on improving it over the next year. But I can't guarantee that. I do plan on implementing some roadmap ideas and want to reward those people who are supporting me with their license. However since Google is now giving away a version of FormRecycler for free, I need to make money on my other apps. So I have to focus my attention on those avenues instead of focusing on FormRecycler features. That is not good for the end users. I also do empathize with their point of view, why did they have to pay for something that is free in other channels?

My initial response was you paid for it, you used it, it worked, why should I refund you?

At my core, I don't want to be evil. Actually I want to come from a place of innocence. I felt like it was the right thing to do. It is the reaction I would have wanted if I was that person. I am not a big corporation. I am a person responding to another person. I want them to feel like the product I make is worthwhile and valuable. If they don't feel like that I will refund them. I feel like we are a team, with my apps helping to make them more productive. (Although I do want to prove them wrong, show them it will be valuable and then charge them 10x that if they want to come back...but I won't :)

Will Google continue to develop down that track? Maybe. Probably not though. So that is a lose-lose proposition overall. Yes, people can use the feature for free now. They could with FormRecycler with a generous (in my opinion) weekly quota. Yes, it is in the menu so it is more obvious. But Google could do more co-marketing for the 3rd party developers who are making Add-ons that extend their ecosystem, which in turn makes it more helpful for users.

Google is implementing some more strict developer usage of their APIs. This is a good thing, data privacy and security are great. I think they should be more in focus, especially in education. Currently if you use some Gmail APIs you need to undergo a 3rd party security review where the developer needs to pay $15,000-$75,000 to be able to publish Add-ons that use those scopes. That will impact developers like myself and also in turn reduce the free Add-on offerings. So that is not a great thing overall for users. I am not against the security review, mainly disappointed that it will impact free Add-ons. So GSuite users should get used to the fact that they will need to start paying for Add-ons. There will be Add-ons that they are currently using this school year that will either stop working or users will need to pay for to continue to use them.

So was it worthless for me? Was my time wasted?


I learned a ton.

I now have code that I can implement to monetize any Add-on, which I have with FormCreator.

I learned to be a bit more business focused and put a lower quota on FormCreator.

I expanded my brainstorming to think of other ways to focus my time other than FormRecycler.

I learned that I can't focus on only developing for GSuite because if I am playing in Google's backyard, they can also develop it into their own ecosystem on their own.

I learned how to grieve a product.

I learned to be a bit more empathetic to end users.

I learned how I want to be as a business and still want to be people-focused and not evil.

I learned that it is good to share (at least for my personal growth) and that others are aware of it and support me!

I learned that I can't fully focus on Education apps, which is a bit sad, because of the impending need to monetize a majority of my work.

I learned that I am resilient and will keep moving forward.

I learned that I just need to out-innovate Google and other developers who put out competing Add-ons.

If you read here to the end, thanks! Lemme know and I will give you a high five!