The last two years of work I've done has revolved around the scheduling, generation and syndication of automated content. I've really enjoyed the work and have learned a lot along the way - it has been a really good platform to finesse some skills I've been wanting to work on and explore some languages and tooling that I had a strong interest in, specifically TypeScript.

Without going into detail about the actual implementation, I'll give a quick summary of what the system I've worked on for the last 24 months involves and how it works today.

The overall system has four distinct components:

  • A system for generating information used to describe the types of content we are able to produce for the entities we produce content about (i.e. what topics are relevant).
  • A scheduler for making decisions about which of the topics from this pool should be posted about for which entities, in what order and at what frequency.
  • A composer for actually producing the content based on the selections made by the scheduling system.
  • A syndication system that facilitates forwarding the content to our partners either via direct API calls or by producing feeds from our database directly.

Some of my personal highlights from this work revolve around abstracting the content into a format that can be easily transposed into alternative formats to suit their destinations during syndication (i.e. we don't simply store HTML, we have our own virtual format for all of out content that we generate and store), as well as creating an intelligent scheduling system that automatically adjusts its behaviour based on the content available to it at any given point in time.

The biggest challenge has been creating an easy to understand but supportive development environment for our authors, who have no coding experience but are required to create the schematics for the pool of content types using our choice of templating language. Full type-safety and editor support (i.e. accurate IntelliSense, instant feedback on syntactical or type errors) is difficult to combine with a trivial to read and write language, but is essential to avoid the mass production of invalid or buggy content. There is still a lot of room to improve in this particular area of the workflow, which is something I am excited about ironing out because it's a very unique challenge.

There is still so much opportunity and ground to cover in this system and I am really looking forward to bringing it closer to its full potential in the coming months or years.