Working @Fandom.com: Mobile Apps

Grzegorz Aperliński
Fandom Engineering
7 min readOct 29, 2021

--

Greetings, fellow adventurers! In this blog post I wanted to give you a sneak peek into the inner workings of Fandom’s Mobile Apps team. We are responsible for the development of the D&D Beyond mobile app — the companion app to the world’s most comprehensive digital toolset for playing Dungeons & Dragons. What follows is a short summary of who we are, what we do and what’s great about working in our team. Sit back, relax and enjoy the ride.

D&D Beyond primer

D&D Beyond (DDB) is the official digital toolset and game companion for Dungeons & Dragons fifth edition. Since its launch in 2017 it has amassed millions of users worldwide and continues to be the go-to destination for both dungeon masters (DMs) and players. The toolset includes a wide selection of features, including a digital character builder and sheet, searchable books and game information, an encounter builder and combat tracker, and lots more. Our mission is to offer tools that minimize the negative impact of rules at the table, such as taking a long time thumbing through books to find an obscure rule or not remembering all your character’s options. Thanks to our tools, the key elements of Dungeons & Dragons, such as bringing characters to life and sharing an interactive story with friends, can shine through.

The D&D Beyond mobile app

The D&D mobile app, released in 2020, strives to deliver many of the functionalities found on the website. Our goal for players is to make sure that they can play D&D anywhere with just their mobile device in their hand. For DMs, our ambition is to build a suite of tools so that they can use their phone or tablet as a second screen. Another benefit of the app is that it allows for quick and easy access to all the tools on a spur of the moment when you have an idea for a new character, piece of a plot or just want to check the stats of a monster that your players are going to fight against soon.

D&D Beyond was App of the Day on the App Store on August 5th 2021

About the team

The Mobile Apps team is a diverse group of professionals from various backgrounds brought together by a passion to deliver the highest quality product to our users. The team consists of Android and iOS engineers as well as Quality engineers, but we also have experience in developing backend applications.

While everyone in the team specializes in a particular technology, we make it a point to often go beyond technology or platform boundaries to learn new things: We engage in internal training sessions to share knowledge across all team members and in some cases contribute code in areas outside of our specialization.

The team is brought together by their values. First, we value openness and directness and listen to everyone’s point of view. Our engineers have a direct impact on the shape of the product, taking part in the development process from inception to release. Second, we believe that the team is much more than the sum of its parts. Our team members complement one another and genuinely enjoy working together. Third, for us, feedback is fuel. We dish it out in spades in our retrospectives and team meetings — it’s just as important to “Catch People Doing Something Right” as it is to share any concerns we may have. Finally, we like being proactive and always do our best to anticipate potential issues before they become serious problems.

How we work

We have a well-defined process and tools to deliver value to our users. The team is subdivided into two smaller teams, each focusing on a different portion of the mobile app’s functionality. Each team consists of Android, iOS and Quality engineer(s) working over two-week iterations. Every day, we meet for stand-ups to formulate a daily plan of delivery. We also meet for backlog refinements to align on acceptance criteria for upcoming work, sprint plannings to formulate commitments for the upcoming iteration and sprint retrospectives to look back on what we’ve achieved and how we could improve. We’ve managed to fit in most of our meetings in just one day of the sprint, so that we can maintain uninterrupted focus time in other days of the sprint.

As for our tools, these include:

  • Slack (for daily communication)
  • Jira (for project management)
  • GitHub (for our code)
  • Zoom (for virtual meetings)
  • Jenkins, Github Actions, AWS Codebuild (for automation)

In addition to the above, we have some other notable events. Every two weeks, we hold a team meeting where we review progress on our goals, give each other kudos and discuss agenda topics raised by individual team members. Every sprint, we have a time slot for personal development in which every person can focus exclusively on their personal goals and growth without being interrupted by others. We also organize regular D&D sessions so that we can test the mobile app in a real-life setting (you can read more about them here). Finally, we also organize innovation days in which engineers can test out new tools and technologies as well as create prototypes for new features they’d like to see in the app.

Our tech stack

The D&D Beyond mobile is a native app, meaning that each platform has its own codebase repository. For both platforms, we’ve adopted a modular architecture to ensure a well-defined separation of concerns between individual features (you can find more info about how we manage modularization on iOS here).

We strive to use the right tools for the right job. For native development, we use Kotlin on Android and Swift on iOS. We handle asynchronicity using Kotlin Coroutines on Android (one of our teammates has written a series of blog posts about this topic) and a combination of GCD and Combine on iOS. We have used SwiftUI in some of the features in the iOS app and have plans to experiment with Jetpack Compose on Android. While we make sure to keep our codebase modern and up to the latest standard, we also think twice before falling victim to the cult of the new. We keep the number of third-party dependencies low to ensure we have control over the future of our code. Some libraries we do enjoy using are SnapKit for auto layout on iOS and Moshi for JSON (de-)serialization.

To ensure quality and stability, we automate as much as we can. We write unit tests (we have well over 80% of code coverage) as well as functional (UI) tests (using an abstraction layer over Espresso on Android and XCUITest on iOS). Each pull request (apart from receiving code review from fellow engineers) triggers running tests on modified parts of the app so that we can always be sure our main branch is safe to release from. We also use Python and Bash for scripting some repetitive tasks.

Recent project: Campaign view

One recent project we are particularly proud of is the campaign view. It is intended to be used primarily by DMs but can be also used by players to have easy access to selected player stats.

Campaign view shows stats crucial for in- and out-of-combat gameplay

The campaign view updates in real time, so whenever a player is damaged or healed a receives a condition like “poisoned” others within the campaign can immediately see that and react. We have implemented this using a web sockets message broker that powers other real time aspects of the app, such as the game log where players can see the results of dice rolls triggered by other players.

When you roll dice in the app, you can share the result with your fellow players and the DM

Main attractions

There are a number of things we particularly enjoy about working on the D&D Beyond mobile app. These include:

A clear roadmap

Every quarter we engage in planning sessions to decide what we intend to deliver over the next three months. We set goals and monitor our progress along the way to ensure we are focused on bringing value to our users. At the same time, we remain flexible along the way, adapting to external factors and feedback to deliver the best solution possible. Our roadmap, however, goes well beyond the quarter mark, and we often know what plans we have for the whole year.

Connection to our users

A huge boon of working on D&D Beyond is how passionate our users are and how they help us shape the future of the product. We engage with them on our feedback forums, invite them to provide ideas for our upcoming features and even answer their questions directly on our weekly Dev Updates on Twitch.

Focus on personal development and learning

We put big emphasis on making room for every individual to grow. Apart from the already mentioned personal development time, we engage in various internal knowledge sharing sessions and writing how-to articles so that the expertise we gain is properly distributed across the team.

Open communication

We are open and direct. If we don’t like something, we openly say it. If we make a mistake, we admit it. We treat every mistake as a learning opportunity to do better next time. Open communication helps us build trust in each other as a team.

What we do for fun

Apart from playing D&D at work there are loads of other activities we like to do to have some fun. We are currently working remotely so we look for ways to stay connected. Everyday, we have a coffee break meeting to chat and have some laughs or play a round of Among Us. After hours, some of us like to meet online to play games like Rocket League. We also try to meet up in person from time to time and play board games or just enjoy each other’s company.

Signing off

Hope you enjoyed the read and learnt something interesting. If you have any questions or comments about the contents of this article, feel free to contact me at gaperlinski@fandom.com or leave a comment under the article.

--

--