Categories
English Startup

My 2023 in numbers

Happy 2024! Here we are for another yearly review of what I have spent time on. Slightly delayed due to loads of “more important” work, but here we are.

For the past 4 years I’ve been tracking what I’ve been spending my – what I consider to be – work time, and so I did for 2023. This report is an insight on how I spent quite a large portion of my life.

The data

ProjectHoursRevenueHourly
Work for hire1.702,06€ 122.157,43€ 71,77
QuizWitz301,75€ 8.236,86€ 27,30
Quizfabriek113,00€ 2.809,57€ 24,86
Quizkalender18,50€ 328,15€ 17,74
Tyyp20,00€ 0,00€ 0,00
Administratie14,00€ 0,00€ 0,00
CatLab Drinks11,00€ 0,00€ 0,00
As all years before this, I’ve only counted revenue. I did only deduct costs related to external labour that were used for projects. Servers, transport, equipment and other costs are left included. All amounts are excluding VAT, but obviously other taxes have not been deducated yet.

I’ve spent a total of 2.180,31 hours working in 2023. This averages out on a hearly 45,42 hours per week. A pretty big increase compared with 2022, but actually pretty much in line with 2020 (54 h/w) and 2021 (52 h/w). Developing – outside of ‘work for hire’, is pretty much my biggest hobby, so honestly 45+ hours feels better than the < 40 hours I managed to do in 2022.

As always, I’ve spent a huge chunk of my time on work for hire. In November 2022 I started working for edutech startup Smart Symbols. It’s a great project, so definitely check it out if you have any affinity with preschool education.

This being a proper startup, meant a pretty hefty kick in the hourly rate. By doing a whole bunch of side jobs for other projects (mainly for old clients) I managed to keep this within limits, but I do feel that having to switch mindset between projects does have a certain mental cost as well. This is probably going to be a challenge for 2024 (spoilers ahead!)

Projects per month.

QuizWitz

QuizWitz, why you not dead yet? I keep dumping a fair amount of hours in the quiz platform that hasn’t been going anywhere in the past few years.

As usual, the things I do for De Quizfabriek are pretty much a direct result of us developing QuizWitz in 2015, so as usual I’ll be adding those two revenue streams together. This results in QuizWitz generating a total of €11.046,43 (= about €26 / hour).

As long as the revenue covers the server costs, I guess we can keep going.

Other projects

There’s not much to say about the other projects. I’ve introduced a ‘pay-for-publicity’ Spotlight package for my Quizkalender, which – in combination with very annoying – but pretty lucractive – Google Ads revenue resulted in some beer money.

Finally, Tyyp is a startup of a friend of mine where I try to help out a bit. If you don’t know how to blind type, definitely check them out. Their platform is amazing. (Something I wonder if QuizWitz would do better if it had the same level of quality, but I guess we’ll never know.)

Highlights

Honestly, professionally there haven’t been that much highlights in the past year. It’s pretty amazing to see that Quizfabriek is pretty much doing its own thing without much of my involvement, organising quizzes and team buildings all around Belgium. It’s not huge, but it keeps growing, and it’s based on something we’ve started. And that makes me happy.

A Quizfabriek teambuilding quiz for Teamleader in the Giraf (a small pub in Ghent).

However, not all highlights are technical…

Personal highlights

On July 25th, a postcard arrived. The card had been posted over 12 months early, in Korea, by my girlfriend Tine (the 12 month delay was by design).

As usual, I’d be getting the post, but this time I was in for a surprise. While walking from the letterbox, I read the text on the back of the card, and… it was a card from Tine where she asked me to marry her… I guess that’s a thing that is going to happen now. Imagine asking someone to marry you with a 12 month delay…

Also, we’re going to have a baby soon. Yolo.

Next up

We’ll see. Unless I turn into a full-time house dad, there surely will be a new yearly report next year.

As always, if you have a project or an idea, take a look at my cv and let me know if you want to do something together.

Until then, I wish you all the very best, and see you in 2025.

Categories
English Startup

My 2022 in numbers

Happy 2023! May your senseless wars end swiftly, you energy prices plummet, inflation slack up and economy recover.

I have been tracking my worky-worky time for the last three years now, so why stop now. 2022 was a rather quiet year, so here we go.

The data

ProjectHoursRevenueHourly
Work for hire1.072,5788.627,7082,63
QuizWitz477,8817.436,2736,49
Quizfabriek251,104.308,0117,16
Eukles49,000,000,00
Quizkalender14,5071,484,93
CV9,500,000,00
CatLab Drinks7,000,000,00
Administratie6,000,000,00
Papyri3,000,000,00
Same as last year I’ve only counted revenue and excluded all cost except for personnel cost that was directly related to the event (so when I needed an extra pair of hands to work on a QuizWitz event, the cost of those hands are not included in this revenue list). Servers, transport, equipment and other external labour are ignored (= left included) and all amounts are excluding VAT.

I’ve logged a total of 1890,55 hours, which is only about 39,38 hours per week. This is 32% lower than last year! What happened? Not too much, it seems.

The biggest change is in ‘Work for hire’: 1564h in 2021 versus 1072h in 2022. The company I have been working for was taken over and a project I have been working on was scrapped. Summer is not a great time to find a new project, so it took me a few months to find my bearings again. Either I have been slightly overvaluating my skills and experience, or I am downplaying the economic situation. In the end I had to take a significant fee drop. But at least I’m working again.

Projects per month. Summer holiday was awefully quiet.

It’s not all about the money

(It is though… overall I have a very Scrooge-like personality. But I found some other numbers that are more fun to share.)

QuizWitz has been hosted for 12.570 hours in 2022. That is about 524 days. A total of 159.965 people played a game. The biggest quiz hosted in 2022 had 554 players.

If you sum up all time spent in QuizWitz games (= duration of the game multiplied by the amount of players) we end up with a staggering 35.894 hours of playtime; that is 1495,59 days.

It does make me happy to know that something I have built is at least having some kind of impact on some people, even if it is not where I want to project to be.

QuizWitz Financials

QuizWitz made about €5996 in online sales, €1693 from Airconsole and €10746 from projects. Additionally, through de Quizfabriek projects, another €5050 was generated in projects.

Online sales€5.996,30
Airconsole€1.693,09
Projects€14.054,89
Total revenue€21.744,28

Operation costs for QuizWitz are at about €300 / month (servers) + €300 / year (transaction costs) + €1000 (useless google ads), so lets say about €5000 yearly, give or take. I stopped doing analytical accounting on this project as it made me sad.

Highlights

It doesn’t make much sense to do an overview of all projects as there really aren’t any projects I have not described in earlier blogposts, so instead I am going to list a few highlights that happened in 2022.

Nerdland festival

De Quizfabriek was hired to organise the final event for the Nerdland festival: a Nerdland quiz. This quiz wasn’t much different from any other quiz we have been organising of the years, but seeing your heroes and your mates on the same stage is always amazing.

Wietse & Marthe on stage with the Nerdland team.

Cultuurcentrum Blankenberge

For the season opening of culture centrum Blankenberge we used QuizWitz to add an interactive element to the presentation. I added additional controls to the quizmaster app to make it easier to display slides, video and audio content to make QuizWitz more usable as all-round presentation tool.

FIT UK mission

In May 2022 Ken and I joined the Flanders Investment and Trade mission to London to explore the possibilities to launch QuizWitz in the UK. This ended up leading nowhere, but it was definitely some kind of experience. Also I wore parts of a suit.

Thijs in parts of a suit; mainly the jacket.

Het slimste reclamebureau ter wereld

In cooperation with Sitting Bull quiz & entertainment we hosted a livestream quiz for the marketing team behind “De Slimste Mens ter Wereld”. For this quiz we had to implement a new question- and round type to match the format of the tv show.

Next up

Honestly, I don’t know. I’m spending more time on developing my software engineering skills to get back in the game. Meanwhile I am playing with ideas for new game related interactive experiences, but I am not sure where those ideas will take me.

2023 will also be a year house renovations and I’m sure that will have some impact on any new projects as well.

However, if you have a project in mind (quiz-related or anything else), hit me up. You can find my curriculum vitae here.

See you next year!

Categories
Startup World Wide Web

Eukles: Marketing Automation done DIY

For the past couple of years I have been playing around with the idea of a hard divide between outgoing communication (transactional emails, push notifications, newsletter contact list synchronization, marketing automation, slack notifications, etc) and the business logic of my applications.

It never made sense to me that a backend system that manages ticket sales for an should would also implement a mailer queue; but also it doesn’t make sense that the copywriter who wants to change the content of an email would have to talk to a developer to do so.

In 2017 I started working on removing all logic for these kind of actions from my websites and replace them with a single event driven microservice that would handle anything related to outgoing communication for all projects I build.

My goals where to:

  • Be vendor independent: Services like Mailchimp, Moosend, Sendpulse etc have basically already built what I wanted to have, but given my DIY nature I wanted to stay independent from them.
  • Base all actions from a stream of events sent by the business logic.
  • Manage all GDPR related permissions and preferences from a central location.
  • Cut all links between the app domain and this microservice: no accessing data that has not been provided. Push only.
  • Be able to synchronize lists of users (= segments) according to relationships and synchronize these to newsletter services. (ie: automatically make an email list of all registered users who are attending a certain quiz).
  • Provide a management panel where non coders could change the content and the logic of the outgoing notifications.

That is what I started building. I even setup a website to ask feedback from smarter people to make sure I wasn’t reinventing a square wheel, but in the end I kept building nevertheless: Eukles was born.

The Slack notification

I started with our ticking website CatLab Events, and my first goal was pretty modest: send a slack notification to our channel every time someone bought a ticket for one of our quizzes. I setup a MySQL database (probably not the best fit, but as I wanted quick results I stayed with the tools I knew best) and a Laravel/Charon REST API and also created a separate API client package for PHP to easily implement in existing projects. A few days later I registered my first event:

/**
 * @param OrderConfirmed $e
 * @throws \GuzzleHttp\Exception\GuzzleException
 */
public function onOrderConfirmed(OrderConfirmed $e)
{
    $order = $e->order;

    $attributes = [
        'event' => $order->event,
        'order' => $order,
        'ticketCategory' => $order->ticketCategory
    ];

    if ($order->group) {
        $attributes['group'] = $order->group;
        $attributes['subject'] = $order->group;
    } else {
        $attributes['subject'] = $order->user;
    }

    // Track on ze eukles.
    $euklesEvent = \Eukles::createEvent(
        'event.order.confirmed',
        $attributes
    );

    $euklesEvent->unlink($order->user, 'registering', $order->event);

    if ($order->group) {
        $euklesEvent->link($order->group, 'attends', $order->event);
        foreach ($order->group->members as $member) {
            if ($member->user) {
                $euklesEvent->setObject('member', $member->user);
            }
        }
    }

    \Eukles::trackEvent($euklesEvent);
}

To break it down: what I wanted to communicate to Eukles was:

  • An event.order.confirmed event has happened
  • This event has some related properties (event, order, ticketCategory, group and subject (which can be user or group, depending on the event type).
  • Unlink the ‘registering’ relationship between the active user and the event (= the user is not registering anymore, as the registration is already done). The idea is that these relationship actions could be defined either in the business logic or triggers on Eukles itself.
  • Link the ‘attends’ relationships between the group and the event. This would allow us to create a segments of all groups that attend a specific event and synchronize that to Mailchimp later.
  • Add all members of the group as properties of the event (= when a group has 4 members, send an email to every single one of them)

(Note that all models used as properties would have to implement an ‘EuklesModel’ interface that included methods to serialize the content that is send to Eukles.)

The content of the event properties is stored in two places:

  • As part of the event, so that we always know the state of a model at the time of the event creation.
  • (If a unique identifier is provided) the model it is also synchronized with a centralized project-model database that contains the relationships between project-models and always contains the last known properties. Every time an event is sent, the content of these models get updated.

Now I just had to add a SlackService, store authentication details for these services in the database and setup a few Action and Trigger models that would listen for the event and cary out actions. And using the Jobs queue in Laravel everything was handled without impacting the user flow.

Internal use only (for now). Everything is manageable from a REST API with the goal to build an angular frontend in a later stage.
Humble beginnings.

To keep things simple I used Laravels Mustache syntax to parse the arguments that were used by the service clients.

GDPR consents

As Eukles would become responsible for all outgoing communication, I found it fitting to store communication preferences and consents on Eukles instead of in the business logic. Eukles doesn’t really have the concept of a ‘user’, as user project models are sent in events and follow the same logic as any other event property. So I created an API endpoint that would show me all consents in a given project by a given project model. By adding this call to my registration process I was able to ask all users that logged in (existing or new) to give the required and optional consents.

By adding these as filters to segments and actions, I was able to block communications to users who opted out of these messages.

Segments

The goal of Segments was to make dynamic or static lists of project models and synchronize those lists with newsletter services like Mailchimp. For example: by defining segment rules and setting a parent model in the segment schema, Eukles is able to create a segment for each ‘event’ projectmodel, containing all ‘user’ projectmodels that have the ‘attending’ relationship set to it AND have given consent to receive newsletters.

Once every hour these segments are then synchronized with Moosend or Mailchimp, and whoever is in charge of sending out the newsletters can rely on those lists being up to date at all times.

This synchronization also checks for users who are marked as ‘unsubscribed’ in Mailchimp, and the applicable consent is removed from those specific users, resulting in remove them from that segment.

Templates

As all emails in QuizWitz use the same basic template, I have added the ability to define mustache-like ‘templates’ for each project. Anywhere parameters are parsed, these templates can be used (but they only really make sense in html-like contexts)

The email that is sent whenever a player starts a QuizWitz PRO game uses the standard ’email’ template.

Wait 1 hour. if !subject.hasLicense(event.license): then: send email.

And that is pretty much where the project stayed for a few years. My simple event -> trigger -> action model worked fine for sending transactions emails, notify us about certain events and even sending tweets with giphies based on event attributes (implementing services is trivial since the base architecture for defining actions and storing credentials is already provided).

All was well in Eukles world… until I found myself with a bit of time on my hands and I decided to implement some dark design patterns to try to raise the conversion rates in QuizWitz: when someone initalizes a license purchase but in the end decides not to complete the purchase, send them an email asking for feedback.

A perfect use-case for Eukles, where it not that I had gone for the quick event -> trigger -> actions design instead of a fully fledged ‘workflow’ state machine. So that is what I started building.

Instead of triggering an action, all events now check for ‘workflow triggers’ that initializes states in the workflow machine. Depending on the trigger configuration, Eukles also checks for duplicates to make sure that recurring events don’t cause too much triggers. A state then follows the configurable steps in the workflow and triggers actions that are defined in steps. Each trigger also has the ability to set one of the event properties as ‘subject’ that can be used anywhere in the workflow, to reduce the dependency on the initial event.

A simple shunting yard algorithm offers me the ability to define conditions in string format and makes it possible to setup decision trees in the workflow, while a special ‘wait’ step adds a delay to the state machine processing. The whole thing is using Laravel Job queues, so it was all fairly trivial to setup.

The table based interface is obviously a horrible choice for setting up workflows like this, but as for the moment I am the only one using this, it will do. No need to pour more hours in things that only marginally improve my life 😉

And that basically is the current state of the Eukles project. My goal is to clean it up and release it under a GPL license in the future, but in order to do that I first want to improve the admin panel interface and write down some documentation. If that ever happens, I’ll definitely post it here.

Categories
English Startup

My 2021 in numbers

Happy 2022! May the omikron-variant (and the corona-virus in general) die a quick death. No other wishes… just that.

As I’ve been tracking my worky-worky time for the last two years, I continued doing that in 2021. This years report is probably less interesting than previous years, but I’m writing it for good measure.

So first, the data:

ProjectHoursRevenueHourly
Work for hire1563.99121,070.3977.41
QuizWitz546.918,483.0133.80
Quizfabriek247.253,479.9014.07
Dolumar627.774.63
Papyri58.50.000.00
Quizproject X570.000.00
Administratie15.50.000.00
Varia70.000.00
Eukles2.50.000.00
Same as last year I’ve only counted revenue and excluded all cost except for personnel cost that was directly related to the event (so when I needed an extra pair of hands to work on a QuizWitz event, the cost of those hands are not included in this revenue list). Servers, transport, equipment and other external labour are ignored (= left included) and all amounts are excluding VAT.

I’ve logged a total of 2504,64 hours which amount to an average of about 52,18 hours a week (at 48 weeks / year, so holidays excluded). This is about the same as last year.

An overview

Work for hire

Work for hire still is the big one. I’ve been lucky to be working on an interesting and challenging project for the last two years. While in previous years I sometimes saw these clients jobs as a necessary evil in order to reach true goals, this has lately shifted somewhat. These days I describe my other projects as ‘hobbies’, as they never seem to get out of that stage anyway. Not meant to be bitter, but labeling them as hobbies gives me more peace of mind.

QuizWitz

Revenue from QuizWitz is down 35% since last year, and this while I’ve spend a considerable amount of money and time in improving the communication around our product. Of the €21.962,91 generated revenue (note that I include the Quizfabriek ‘revenue‘ in here as well), only €9.950 came from the online platform (was €16.727 last year). The rest came from support at events etc.

At the same time I’ve spend about €14.500 on various freelancers to improve the communication and marketing around our product, so the bottom line is that QuizWitz resulted in a net revenue of about €7000 in 2021. Whether these investments in clearer communication will result in continueing return remains to be seen.

Quizfabriek

This number is a bit unreliable as revenue from this non-profit is actually license fees for using QuizWitz at their events. De Quizfabriek has been doing pretty well the last two years and Wietse and Mathias managed to setup a pretty decent B2B sidetrack.

The tracked hours here are mostly spent on Quizfabrieks B2C events and thus aren’t really related to the revenue that is noted here.

Other projects

Not much to say about these. There are a few projects that just require maintenace to keep online but don’t really return any revenue. Sane people would probably take them offline, but I feel they still have some value.

  • Dolumar is a browser based game I made when I was studying. There is one guy still playing it every day. This makes me very proud.
  • Papyri is a project in the document management space that I’m still working on as a side-hustle.
  • Eukles still handles all outgoing mails, slack notifications and other messages that are sent out by QuizWitz and some other projects.

One day these projects will probably suddenly appear under an open source license.

Technology

Not that much really. I guess I could label this year as ‘maintenance of older projects’.

  • In accordance to our privacy policy I started automatically removing inactive user data from our servers, which resulted in some interesting edge cases in my SSO system and a huge amount of bounced emails (not doing that again!)
  • I’ve automated the whole invoice flow for QuizWitz so that professional users can now request invoices without me having to hack away at the payment gateway.
  • Tired of manually switching scenes during livestreams, I’ve hacked together a control panel for our Atem mini that listens for midi-notes from our QuizWitz midi generator (that we already used for controlling the light fixtures in the venue over DMX) and switches between game view and camera view at appropriate events.
  • For a Quizfabriek quiz I’ve implemented a greenscreen imagick script in our Photobooth. Nothing fancy, but the end result was pretty neat.
Photobooth with greenscreen (that is hardly visible due to too many people in the frame).

Next up

While in 2021 I’ve spend quite some effort in re-launching QuizWitz, I feel like I’m finally done with that. Not that I will drop the project completly, there’s still an amazing bunch of people who still regularly use our software. But I’m done with trying to push to the masses. I don’t have the skills to do that, so I better just focus on what I can do: try to make sure that our existing users have the best experience possible (without hurting myself too much).

My main focus for 2022 is going to be the project I’m working on for hire. Sure, there will be QuizWitz events and other projects that just suddenly turn up, but I don’t really feel like prioritizing those anymore.

I guess I’m getting old.

Categories
English Startup

My 2020 in numbers

Happy 2021! May all your pharmacy stock pay off and may your hodling enhance your riches!

What a crazy year it was. Covid-19 forced everyone to work from home and online conferencing tools almost brought down the internet… and (spoilers ahead) introduced the mass market to online streaming quiz games.

Last year I started extensive timetracking on anything work related and this year I did the same. Slightly less hobby projects this year, as QuizWitz took a bit of a jump and caused some gear shifting on our side. So only 9 projects this year (excluding the 3 projects I worked on under ‘Work for hire’).

ProjectHoursRevenueHourly
Quizkalender0,00€ 73,24€ 73,24
Work for hire1.523,33€ 102.970,72€ 67,60
QuizWitz748,00€ 32.958,94€ 44,06
Dolumar4,00€ 22,56€ 5,64
Quizfabriek218,50€ 1.000,00€ 4,58
Photobooth53,00€ 0,00€ 0,00
Eukles18,50€ 0,00€ 0,00
Administratie15,50€ 0,00€ 0,00
CatLab Drinks4,50€ 0,00€ 0,00
Same as last year I’ve only counted revenue and excluded all cost except for personnel cost that was directly related to the event (so when I needed an extra pair of hands to work on a QuizWitz event, the cost of those hands are not included in this revenue list). Servers, transport, equipment and other external labour are ignored (= left included) and all amounts are excluding VAT.

I’ve logged a total of 2585,33 hours which amounts to an average of about 53,86 hours a week (at 48 weeks / year, so holidays excluded). A fair bit more than the 44 hours I logged last year.

An overview

Isn’t it great when a project generates revenue without having to work on it? That’s how a silly website as www.quizkalender.com managed to jump to the top of my project list at €73,24 (google ads) revenue for 0 hours of work. That is an infinitive amount of revenue per hour! If only I had spent slightly more time on it…

Secondly, same message as last year: don’t quit your dayjob just yet. Working for the man still pays the bills. When comparing the numbers to last year, I must admit that I’m a little annoyed with myself for trading a 15% price cut for the convenience of working close to home, especially at a time when working from home is the default. No rights to complain ofcourse, but bills were paid 15% faster last year 😉

Thirdly, the big one. QuizWitz. Suddenly teleconferencing became huge and people had to be entertained. I managed to quickly adapt the software to take the streaming delay of YouTube and Twitch into account without affecting the gameplay too much and together with de Quizfabriek we started replaying old live-quizzes on YouTube. A few additional changes soon followed and we fairly quickly gained a bit of an online following.

After testing on a small scale, QuizWitz grabbed the attention of a few bigger players and after some nerve-wracking meetings, tests and experiments we supported a whole series of quizzes at www.huiskamerquiz.be with hosts like (start <namedropping>) Belpop Bonanza (Jan Delvaux & DJ Bobby Ewing), Nerdland (Lieven Scheire & Bart Van Peer), Bahamontes, Sofie Engelen, Xander De Rycke. Not to mention a whole bunch of these livestreams were filmed on the old Studio Mussle location where Mosselen om half twee was recorded for a while. (end </namedropping>)

Meeting your heroes whilst stressing out over the stability of your software and servers: big check! (Having your servers crash on one of these events and working through the night to fix them by next evening: also check.) We’ve also worked with Sitting Bull and Roularta to organise livestream quizzes.

Meanwhile de Quizfabriek started doing their own teambuilding activities. It’s awesome to see that something you helped setting up suddenly kicks into gear and starts accelerating without you pushing it forward.

While the events were ofcourse a strong push for QuizWitz, another thing started happening in april: online sales of the regular platform jumped to heights we had never seen. As soon as the surge started I started concentrating on usability and compatibility of the game and the platform (at this point it was mostly tested on google Chrome only, as this was the platform used at the events). We also wrote a manual on how to use the software in various situations and this seemed to help the sales as well.

QuizWitz made €10.358,82 in work (support at events, excluding extra hands) and €23.600,12 in licenses (including €1.445,01 on Airconsole). Of those licenses, €16.727,17 was made through online sales and €6.872,95 was made through livestream license fees.

As I try to conduct business in an open and transparant fashion (and maybe also because I hope one day an investor will cold call me) I’ve started sharing the QuizWitz key metrics in a publicly available online dashboard. It takes a while to load so be patient.

So yes, QuizWitz took a fairly big part of the year again.

Fourthly Dolumar. Hardly did any work, hardly made any money. Not much to talk about. There’s still a few people playing it, and that games is now 13 years old. Yay me.

Fifthly, we’ve already talked about Quizfabriek in the QuizWitz section. The €1.000,00 revenue I took for licensing is already included in the QuizWitz calculations above (that’s why the total license income doesn’t match the column at the top). While I am taking a little distance from the non-profit organisation, I’m still putting in a quite a few hours 🙂

Technology

And finally, the fun (open source) projects. The CatLab Photobooth project was a rather silly attempt to combine the NFC scanners (that we use at de Quizfabriek for digital drink vouchers) with a remote controller DSLR camera to generate a photobooth that was aware of who it was taking a picture of.

We’ve used it for the Harry Potter quiz to make sure we had a picture of each individual quiz team. It then uploads these pictures to an Amazon S3 bucket and we then used those to generate a little memento of the quiz and mail it to the players. The photobooth project only took care of taking and uploading the pictures, the rest was done by Mathias (from de Quizfabriek) in Python.

I also spent some time on Eukles, a project that currently doesn’t do much more than gathering events from various websites, send emails and send Slack notifications. But hey, at least QuizWitz users now finally receive a receipt when making a purchase.

The CatLab Drinks project also need(ed/s) some fixes. We’ve used it extensively (and by third party bar people) on the Harry Potter quiz and it is … almost stable. We still have some trouble with people moving the card away from the scanner too soon … but it is mostly safe.

Oh, and Tine and I bought a house.

Next up

Honestly, I don’t know. I’ve started talking to a few people on how to keep the QuizWitz ball roling. I poured a lot of hours in the project again and every release it feels slightly more production ready. Getting the damn thing to the market keeps being the real problem and I’m realising it’s not one I can fix alone. The end of the covid crisis will likely result in a drop of the salesnumbers as well, so getting some kind of marketing ball rolling will likely be very important.

I should probably look into getting that Work for hire average back to 2019 level. Even though I’m quite happy with the projects I’m doing at the moment, knowing that there are more lucrative deals out there sometimes stings a bit.

And, as soon as these vaccines are finally rolled out globaly, go on a long holiday and enjoy life a little more. That should probably be a little higher on this list 🙂

Thanks for reading and take care! See you in 12 months.

Categories
English Startup

My 2019 in numbers

Happy 2020! May all your companies turn into unicorns and all your projects be bought by Facebook!

I have a tendency to blindly jump into new projects, lose interest along the way and then abandon them. It’s been a constant in my carreer, so in january 2019 I decided to do something about that. I started doing timetracking on my just-for-fun projects.

Turns out I worked on 16 projects this year, some of them as little as half an hour. I have also kept note of any income generated by the projects, and calculated an hourly income. Note that I’m ignoring any costs involved (servers, transport, equipment and external labour), and all amounts are VAT excluded.

ProjectHoursRevenueHourly
Work for hire1.013,76€ 77.897,38€ 76,84
QuizWitz388,75€ 8.547,76€ 21,99
Dolumar10,25€ 78,67€ 7,68
Quizfabriek336,00€ 925,00€ 2,75
Quizkalender33,00€ 13,78€ 0,42
CatLab Drinks167,00€ 0,00€ 0,00
Kitten Race55,00€ 0,00€ 0,00
Werewolves34,00€ 0,00€ 0,00
Escape game21,00€ 0,00€ 0,00
Research project13,00€ 0,00€ 0,00
Administratie11,00€ 0,00€ 0,00
Word game11,00€ 0,00€ 0,00
Eukles8,00€ 0,00€ 0,00
Dolumar TCG6,00€ 0,00€ 0,00
Trading game2,00€ 0,00€ 0,00
Wittegeit0,50€ 0,00€ 0,00

Since this is the first year I’m doing time tracking, I don’t have running totals of the projects. The bulk of QuizWitz development has happened over the past few years, and a quick estimation shows at least 5000 hours have been put in before (by various people). However, to not completely lose my mind, I have decided to only measure this years activity.

In total, I’ve logged 2110,26 working hours, which is about 44 hours a week (at 48 weeks / year, holidays excluded).

An overview

Don’t quit your dayjob just yet is probably the lesson to learn here. I deciced to turn down a lucrative project in May, in order to take some time off and take on projects a little closer to home. It took a cut out of the hourly rate, but at least I don’t have to drive for two hours every day. But even then, pet projects don’t even come close to working for the man.

Next up: the big one. QuizWitz has been my main project for the past few years, so I’m happy to see at least some revenue coming in. Quizfabriek, a little lower on the list, should actually be added to QuizWitz as well, as any income from Quizfabriek comes in the form of license fees for QuizWitz. That brings QuizWitz to €9472,76 in revenue, or €24,36 hourly. (I’m not counting the 336 hours worked as a volunteer, since none of the other volunteers get paid either.)

The bulk of the QuizWitz revenue comes from offering support at live events and renting out equipment (so basically me doing actual work) totalling €6544,50. That means QuizWitz generated €2928,26 in software sales (including Airconsole).

Related, but not exactly the same: Quizfabriek, our now 10-headed non profit that tries to revolutionise the traditional pub quiz. As stated above, all revenue that is listed here comes out of QuizWitz license fees. All hours put in should be considered ‘unpaid voluntary work’, but just for funsies I split them up anyway.

I’m not sure what happened, but for some reason Dolumar also generated some sales this year. Not enough to keep the server running, but since this game was my first proper try to build a strategy browser game, I can’t bring myself to shutting it down. And obviously thousands of hours have sunk into the Dolumar project, so the hourly revenue is way off. Thanks for the support though!

The last project that generated any revenue was Quizkalender. This project was built to give to provide some free advertising space for our Quizfabriek quizzes. It uses data from various sites to compile the most complete overview of the Flemish quiz scene. When we’re not advertising our own quizzes, we’re using the space to show paid ads, resulting in a tiny bit of extra beer money.

On to another big time-waster, but one that has had a significant impact on the way we organise our quizzes at Quizfabriek. CatLab Drinks is a very rudimentary web based cash register system with support for NFC topup cards. It can be integrated in the QuizWitz quiz software, which allows players to order drinks from the bar during the game. When the NFC topup system is used, players can topup their card and all payments are done behind the scene, so that bartenders don’t have to worry about anything. I’ve released the code under GPLv3.

That leaves us with the projects that have had no value whatsoever. Kitten race was an attempt on an educational ‘classroom game’, but ended up being a refactor of our ‘CatLab Remote’ engine. That same refactored engine was then used to create a party game implementation of the game Werewolves (also known as Maffia in some parts of the world). Both games are still sitting on a shelf and might be released on Airconsole or Steam at some point in the future.

With Escape Game I wanted to see if the CatLab Remote engine could be used for a mass escape game, where tens to hundreds of people would try to solve a mystery or avoid a disaster, but I didn’t get much further than a few sketches.

Finally there’s a bunch of projects where I only spent a few hours on; prototypes that I still want to explore at a later stage. I even have a rough draft of a Dolumar themed card game, but it hasn’t come to the playtesting stage yet.

Technology

Overall, I’ve had a fun year. Not always productive, but I’ve played around with fun ideas and tinkered with lots of things I hardly knew anything about.

I’ve used DMX and WebMidi to automate moving lights and led pars at our quizzes. I’ve used WebRTC to stream QuizWitz to raspberry pi’s connected to displays (to avoid having to use HDMI splitters and unhandly cables).

I’ve played with NTAG213 NFC tags and readers to implement a cashless topup system and used html offline features to make sure the system runs even when internet connection fails.

I’ve made my old libraries compatible with npm and typescript, to make the game development less painful.

Oh, and I’ve also bought a new car!

Next up

I don’t think 2020 will be much different from 2019. I’ll probably try to put in some more work-for-hire hours, as you can’t spend every summer sitting on your arse, but I don’t think I’ll stop starting silly projects and giving up on them. It’s just too much fun.

I should look into more ways to get QuizWitz into the hands of event planners and quiz organisers. Everyone who’s used the software is enthousiastic and our very first client still calls us for every quiz they organise. I feel like I’m leaving a lot of potential on the table. I’m just not very confident reaching out and doing sales. Improving my business skills is pretty high on my list of new year resolutions. Or finding a cofounder who can handle that part.

Finally, I should finish renovating my tiny little house. I haven’t really done any construction work in 2019, and renovating a house of this size shouldn’t take 5 years to finish. 🙂

Categories
Startup

QuizTed: why so serious?

S2013.04.20 quiztedo it’s been almost two years since I thought it would be nice to develop a small quiz game. A game where questions would be shown on a big screen and where players would compete using their cellphones. A two week feat, I initially thought. Something simple. Socket.io, html5, some nice design slapped on top of it, and done.

Now we’re almost two years later and the project has grown from a quick proof of concept to a full fledged indie game. A project with budgets and market research and marketing and pr and distribution and apps and builds and steam and employees and partnerships and trademark issues and …

Oh, and a €40k subsidy from the Flemish government. Yay. A blessing, for sure. With this subsidy we raise the quality of the game to something that is actually worthy of some money (I hope). With it we can build the community framework that this game desperatly needs. And most of all, with this subsidy I can finally give this project all my attention.

titelschermt_V_2.0It’s already half a year ago that I’ve assembled my little QuizTed team. All 3 of them students. Ken, our marketing guy and manager-of-everything, Yannick our second code monkey and Katia, our design guru. A summer of developing, and afterwards we’d see what happens.

I had some money to spare and I really wanted to make this one work, so I just went for it. I had no idea if I’d make back the investment, and honestly I didn’t really care that much. I just wanted to make something awesome, something that I could play with friends. And these guys would help me make that possible for the price of a modest car. And it would be tax deductable…

Summer ended and the project had grown some more. We would implement a unique soundtrack, so I hired two student-composers, Michaël and Pieterpauwel who composed one for us. We would do voice over commentary, so I looked into voice artists. And the graphics would have to be amazing, so Jolanda drew something nice for us.

And suddenly I wasn’t developing a game anymore; I was managing a project.

Summer ended and the funds ran out, but the team stayed. The subsidy request was filed. Questions about full time positions were raised, but all I could say was: “I don’t know, it depends on the subsidy”. And even in this uncertainty, we kept working, and I’m unbelievably proud and thankful for everything we have achieved already.

And now the subsidy is granted. And I’m happy for that, really. I’m very happy.

uitwerking_characters_v2But now, when I lay awake at night, I’m not thinking about cool features anymore. I’m not thinking about game concepts or changes I could make to our open source libraries. I think about how I’m going to spend that money in a way that we can make this project work.

I’m thinking about how I can reward each team member for their unbelievable awesome efforts, without bringing the budget at risk. I’m wondering how the hell I’m going to resolve these trademark issues. I’m wondering if I should do most of the coding myself, or if I should spent a cut of the budget on a second developer. And are people really waiting for a cross platform quiz game?

We’ve started on this road and there really is no going back. This time it will work. This time we have a solid project. This time there is this bunch of really awesome people who want to see this game succeed as much as I do. So time to get smart, damnit, and go kick some ass.

But if this one fails… what then? I just hope I don’t have to write a post mortem soon…

Categories
Startup

Alle begin?

Dinsdag nacht, kwart voor één. Ik zit naar m’n code te staren zonder dat ik in het laatste half uur eigenlijk ook maar enige vooruitgang heb geboekt. Op de achtergrond Lindsey Stirling, geen kwalitatieve muziek, maar het neemt me terug naar tijden toen ik op een Parijs’ balkon sigaretten zat te roken en me zat af te vragen wat ik die avond in godsnaam zou doen.

Ze heeft wel een lekker lijf, die Lindsey…

Nog eventjes doordoen, de deadline is morgen, en met het geld dat ik met dit project binnen haal kan ik de jobstudenten ook in september aanhouden. Nog even persen, ook al heb ik al uren totaal geen zin meer. September, dat is de goal. Met september erbij kunnen we het sociale aspect van de quizgame ook afwerken, denk ik… hoop ik. Want na september wordt het moeilijk.

Ze doet me denken aan dat meisje dat me liet zitten omdat ik geen tijd meer voor haar had, die Lindsey. Een beetje hetzelfde haar, een beetje dezelfde teruggetrokken kin…

‘t Is nu dat het moet gebeuren, toch? Ik ben bijna dertig. Als het nu niet gebeurt, dan gebeurt het nooit meer. Dan moet ik me terugtrekken en achtendertig uur per week mijn kloten afdraaien voor een baas. Hoewel… is dat eigenlijk niet beter? Ik weet niet meer hoe lang het geleden is dat ik na achtendertig uur kon zeggen: zo, het is weekend.

Keuzes maken, heet dat, denk ik. De keuze voor een eenvoudiger leven. Niet dat wat ik nu doe geen voordelen heeft, en ik wil geenszins klagen over mijn bestaan. Het mag, gewoon, soms eventjes rustiger.

Ik glij langzaam van de slippery slope van de klagende zelfstandige.
En moeten zij er maar niet gewoon mee stoppen?

Misschien moet ik dat meisje nog maar eens bellen.