A year of Aftenposten, 2021
Frontpages, machine learning and experimentation
Everyone who's cool is doing year-in-review posts. Why don't we join them?
If you don't know Aftenposten, us in a nutshell: High quality news powered by a subscription service allowing us to deliver a multitude of current event coverage, magazine content, and long reads. We cover everything from the growing power costs in Norway to advice for parenting to where to eat in Oslo.
We're a relatively small tech team, and we're eager to grow. Instead of giving a typical job description, we figured we'd just tell you outright what our team has been up to in the last year. So yes, we’re hiring, people of all experience levels. You can find the job post here and mention this post in your cover letter!
Rewriting our frontpage
A big question we have is "how can we increase the quality reading time of our site?". We know that the frontpage plays a big role in how people spend time with us: it's the first thing people come to, it's what people refresh when they're bored, it's what sells our articles to the reader. Articles are what get people to subscribe, not the frontpage. There's a number of things we've tried: bundling content together so that there's logical groups of related articles, short summaries which help readers gain context over unfamiliar stories without reading the full article, daily summaries so that daily readers only need to read once, and a new grid layout. All these were A/B tested on our users, to measure the impact on both readership and time spent with us.
To give you an idea of how we use these features in the CMS, we manage the frontpage using a combination of automated ordering and manual curation. The curation is done by a creatively named Curate tool. In there, you can drag and drop articles so that they show up in certain places in the feed. Automated ordering is done via setting a combination of news value and lifetime in the CMS, then combining that data with publishing time. Basically, higher news value articles are more likely to be at the top, and articles with a longer lifetime show up there longer. To test our news beta frontpage, we've enabled an alternative frontpage in Curate, allowing journalists to experiment and see how our new code handles their manual configurations.
Our legacy frontpage is written in Handlebars and TypeScript. The rest of our stack is based on TypeScript and React (e.g article rendering). We did some experiments that showed that React was a faster alternative to Handlebars, so during our frontpage improvements, we started rewriting our code from Handlebars to React. We're switching things over a piece at a time, starting with teasers (article previews in the feed), moving over to bundles and our new concepts. Eventually we will skip Handlebars completely, but we're not there yet. The code does some transformations between what our content APIs provide and what our frontend code expects. There’s multiple publications using the same content API, so we use the transformations to adapt content to fit our rendering layer.The new grid involves switching our CSS over to using a different flex setup. We implemented A/B by giving users a random number from 0 to 100, and show various versions to the particular user groups. So users with <5 might get the beta while the rest get production. Given the importance of our frontpage, it’s important that we have both user feedback and stats to make decisions on what’s working and what isn’t.
Machine learning voice generation
We're eager to keep up with new ways of consuming news. In the fierce competition for user attention, tapping into audio rather than screen time, represents an opportunity for Aftenposten to be relevant in a much broader set of contexts. Enabling users to take full advantage of their subscription by not just reading, but also listening, is a major opportunity for Aftenposten. We already have a team creating podcasts and audio content, so when the chance came to link up with Beyondwords to immortalize one our podcasters forever as a robot voice, we jumped at the chance. The hypothesis is that audio will become more and more important as it becomes easier to produce audio content. Platforms like Youtube and Tiktok are already proving that text content might not be king or queen any more. Beyondwords enables us to have a workflow where audio is generated very quickly after an article is published, via a machine learning voice. We've actually worked with Beyondwords to create and refine a voice specific to Aftenposten.
First thing we've done with this was to run an A/B test where users were able to listen to a long-read for free. Some would get the unrefined robot audio, others would get a manually read version of the audio by our human podcaster. The results? A reasonable amount of people clicked to listen. Those that did start the audio listened through the human version more than the robot, but the rates for both were pretty impressive. In parallel, we got our brave podcaster to sit down and record 6000 flawless Norwegian sentences, to train the model. A few hours later we shipped off a bunch of audio files to Beyondwords.
Our next phase was to set up Aftenposten Junior, a branch of Aftenposten aimed at school children, and generate audio for each AP Junior article, so that our editorial team could review the text content against the audio content. Through providing Beyondwords with imperfections, we could adjust the model and generate existing audio. Everyone with Junior access could access this content, and feedback from the kids was pretty good. We then extended the testing to the main Aftenposten product, building an interface where articles could be fed to generate the audio. Aftenposten publishes around 80 articles a day, and they range from being brief to being a few minutes long. Each generation of audio takes some minutes, so we don't want to generate audio for every article until we're sure it's interesting to users. A university student was hired to review the audio, including recording themselves repeating the incorrect line correctly.
The final step this year was to add a button to our CMS that enables audio for any given article on publish. Once enabled, an audio interface shows up on the article once the audio's been generated.
Our A/B test was done using our multimedia tool. Basically a way of embedding some code into our articles. We wrote some JS that would provide the player interface, then changed the audio file depending on the A/B flag. Reviewing the audio was done via an Express app using Coed on the frontend, all in TypeScript. The audio embed is provided by Beyondwords, so all we have to do is use an iframe with a given audio number to listen to it. Finally, adding support to our CMS involved working with our centralized content API and web renderer.
We’re excited about where this project will take us, and all the new behaviours and use cases of our product it’ll enable.
Within Schibsted, Aftenposten's parent company, we have an initiative called 10%. The concept is simple: 10% of our time should be spent on learning, self-improvement, and side projects. Some examples of what we've worked on: programming language development, a low energy consumption frontpage, fitbit integration, reading about and learning React and Git, Next.js, animations, performance trackers. Every other Thursday, we have a short meeting to share what we plan to work on. Then on Friday, we work on what we planned, meeting at the end of the day to share our progress and play some games.
Some of our improvements, like performance, has gone right into our core product. When we realized that performance was worth spending time on, though, we actually started doing it as part of our regular workflow.
Applying AI to produce real estate articles
AI will likely play a big role in the future of journalism. Products like Google News are already using AI to improve their news feeds. In order to stay ahead of the trends, we have started experimenting with AI generated articles to learn and get experience with this growing future technology. Some of our team are part of the regular Nordic AI Journalism meetups, run by Schibsted employees.
There’s a lot of data out there for the housing market in Oslo, and it seems like a good place to apply AI: our journalists aren’t able to write an article for every sale that goes on, and the readers of this content are quite engaged. We paired with a startup called United Robots, a machine learning and AI startup from Sweden. The data we feed them is straightforward: we gather all the public data about the real estate sales, and generate articles describing each sale. Paired with geolocation, we’re able to show our users real estate sales from their own neighbourhoods.
Our main intention with this experiment is for the most part an exercise in working with cutting edge technologies. Does AI produce articles our users enjoy? Can AI scale to all our readers? The housing market was a great fit thanks to the large amounts of available information. This is just the beginning of experimentation with AI in the news media industry: the obvious next steps. Our pals working on Norwegian and Swedish sports coverage have already adapted AI generated articles to provide live coverage of football matches. Could we provide better coverage of elections in a similar manner?
How does an established news site reach more people, growing the audience? That’s a question we’ve been answering with the help of a workstream we refer to as Lab. In Lab, we’ve been working on identifying some new product development ideas. This team is working closely together, doing user research, market research, and design sprints. In the new year, we’ll have some prototypes which we’ll be implementing. We’re very excited about it: we’ll build without any legacy to test the concept, then think about how we implement the successful prototype into our core product.
Learnings from that way of working will be shared with the core team. We’re very adaptive, always iterating on how we run things. If someone has an idea for how our workflow should change, we put it to the test and reflect on it. So far, we’re really keen on being an empowered team where everyone has input into product.
As part of our research, we’ve worked on Oslos Beste: a community project where people could recommend their favourite places in Oslo and vote. Some of our sibling brands had already run a similar project in places like Bergen, with high engagement, so it made sense to do it in Oslo too! That’s a benefit we get from all being part of the same parent company — we get to learn from other news sites and adapt their code for our own spin on the matter. Our readers come from the content, the code is just there to enable the content to reach the audience in the most effective manner. It doesn’t matter if we share code in that case.
I hope this post gave some insight into what we’re all about. It doesn’t cover everything we’ve done, but a few examples of what we expect our developers to spend time on. We’re looking forward to the new year, and we’ll be improving Norwegian news to the best of our ability. It’ll probably involve a continuation of what we did in 2021, but we’re going to kick the year off with some workshops to figure out what our priorities should be.