business

The Tasks That Run Bitesize

At Bitesize Irish Gaelic, the business is run with regularly-created tasks for team members.

A team member is leaving us, so we’re in the process of looking at what tasks are being performed. Here’s the actual list of tasks that run Bitesize:

Who What When
Bookkeeper Issue payslips Monthly
Bookkeeper Accounts payable Monthly
Bookkeeper Accounts receivable Monthly
Sales and Marketing Create podcast posts Bi-weekly
Sales and Marketing Create Facebook post Daily
Sales and Marketing Free trials help desk Daily
Sales and Marketing Cleanup of member names on Aweber Monthly
Sales and Marketing Remove old subscribers from Aweber Monthly
Sales and Marketing Facebook Page audit Monthly
Sales and Marketing Udemo course promotion Monthly
Sales and Marketing Schedule blog and newsletter Weekly
Eoin Export bank accounts and budgeting Monthly
Eoin Pay payslips Monthly
Eoin Record podcast Monthly
Eoin Write blog post Monthly
Eoin Review Help Scout converations Weekly
Eoin Update scoreboard Weekly
Sys Admin Address Google Search console Monthly
Sys Admin Update server Monthly
Sys Admin Backup database and sites Weekly
Sys Admin Update WordPress Weekly
Customer Support Facebook comments Daily
Customer Support Help desk Daily
Customer Support Open registration for conversation practice Monthly
Customer Support Pre-conversation session Monthly
Customer Support Review and schedule conversation sessions Monthly
Customer Support Record video for new member On-demand
Customer Support Contact member to interview Weekly
Customer Support Invite to Facebook group Weekly
Podcast Producer Produce podcast episode Bi-weekly
Language Assistant Language help desk Daily
Language Assistant Facebook Group checklist Daily
Language Assistant Write ebomb blog post Language Assistant
Language Assistant Create five quizzes Weekly
Language Assistant Tag Help Scout conversations for blog post Weekly
Language Assistant Record and produce how to say video Weekly

Except for myself, I’ve removed the names of the people involved. The different people involved are in the roles of:

  • Bookkeeper
  • Systems administrator
  • Sales and Marketing manager
  • Manager (me)
  • Language Assistant
  • Podcast Producer

Peter Drucker, management legend, advised to do a tasks audit like this. You then ask:

  1. Does this task need to be done in the first place? (Get rid of it if not.)
  2. Do I need to be doing this task? (Can it be delegated?)
  3. What needs to be done and only I can do it?

It’s important to note that these are the regular tasks that keep the business going. They’re not the strategic tasks that grow the business through innovation. We have other goals on top of these regular tasks that we’re working on, and we meet once a week as a team to keep them moving.

The Strangler App – Two Years On

Feature image: balloons floating over Limerick city.

In 2016, I wrote about Martin Fowler’s term the strangler app.

It’s an approach to refactoring old software. You have an old piece of software. You introduce a new piece of software: the strangler app. Bit by bit, you let the new software grow its “vines”. Slowly it takes over the old software until that dies.

My strangler app for Bitesize Irish Gaelic is putting down its roots, two years on. As a way of a status update, here’s my progress. Bitesize is an Irish language learning application, with related services for customers. It as a mix of a marketing site and online course, all in one piece of custom software that I’ve built over the years, along with several contractors and an intern who had developed it.

Current situation

  • https://api.bitesize.irish/status API – a Slim PHP framework app. Structured with routes, controllers (with dependency injection), services, repositories (data layer), helpers. There are several older API approaches in the legacy app, which will need to be fed into this main API.
  • https://www.bitesize.irish main site – still a PHP legacy application, serving HTML through Smarty templating.
  • Integrated with Chargebee subscription billing platform, moving away from Fastspring which we were using for about five years.

I’ve been introducing VueJS into the main site, including learning-enhancement quizzes feature in summer 2017, its login page, and signup page for multi-currency functionality.

Interestingly, none of the Vue in the legacy application is built through a build process. The library is simply included. That doesn’t give you all the features of Vue (like single-file components), but it was a fantastic way to introduce it to the existing application.

The marketing site is barely responsive for mobile viewing, although that’s our main traffic type. The course itself works on mobile, but doesn’t give any type of “app-like” experience.

Where we came from – two years ago

The PHP application did not have namespaced components. It was (and is in places) built with a mix of strategies like data access objects, and a strange mix of service+repository for each type of entity, like lesson.

The PHP code took quite a bit of refactoring so far, just to be able to expose a new API application from it. For example, much of the logic was (and is in places) in scripts (not classes). These scripts essentially acted as controllers. They did the job, but needed restructuring into classes.

A fundamental part of Bitesize is its membership logic. We were using a mix of a legacy connection with 2Checkout, and Fastspring. The business logic for membership was all over the place, in different controller scripts and some classes. To support the launch a new membership plan in early 2018, I refactored this to a new membership periods concept, now controlled by several single-responsibility service components (including a “membership periods” service that tells use what the user’s current plan is and whether it’s expired, and a “feature access” service, to decide who gets access to which feature).

The end goal

Bitesize’s online presence will consist of:

  1. Marketing site – to be powered by WordPress, so that others can update the site’s contents without me in the way. But for that to happen, the legacy PHP application needs to make way. And for that to happen we need:
  2. Web app – driving the actual software for our members. It will be written in VueJS with a SlimPHP backend (and MariaDB database). This is the primary strangler app. It will be hosted on a separate domain or subdomain from the marketing site. A much more “appy” experience for members.

How I’ll get there

You can’t “do” a large project, you simply take a series of steps until you can consider the outcome “acheived”. With that in mind, I’ll continue with the strangler app idea, step by step.

In a small ordered list of priority:

  • API endpoint issuing JSON web tokens, including refresh tokens that can be invalidated. Validating against currently-stored user credentials in the database.
  • Use Vue CLI to build the new started web app
  • Develop login functionality in the web app, storing the validated user in the Vuex store
  • Then on to screens for Levels, Weeks and Lessons
  • It will be interesting how to adapt existing members to this new app. The current strategy I have in mind is to redirect any new free trial members this this web app when it’s functional, and later that we contact each of our members to educate them over time of the change. Many of our members use mobile and tablets to use the software, so the new web app will be a benefit for them.

That’s about it for the rest of 2018. I’m looking forward to the challenge of building the VueJS web app from scratch, after developing features for Bitesize so far without a build process.