Unnanounced project

Summary

Company Ludia
Date 2019 - present
Tech Custom engine : C# / Java / Unity

Unnanounced project of a server mobile authoritative game. The main gameplay logic is done on a Java backend, while the client is a Unity project.

Test Driven Development

Ever since my arrival at Ludia I have been a vocal advocate of Test Driven Development and unit testing in general. As the new project entered pre-production I researched ways to unit test as much of the game's logic as possible. As Unity included the Unity Test Framework in the 2019.2 release, I got to design a development workflow based around it. We refined it with over time (and are still improving it as we go !), and it is now part of our core development worfklow.

A big part of this was the design of our actual code, as unit testing can only be fully used if it was carefully planned from the ground up. The design is based on the extensive use of the model view controller and dependency injection patterns. The idea is to isolate all separate components as much as possible behind interfaces that will be injected at runtime. Coupled to a complexified version of the MVC this allows complete separation of gameplay and Unity-specific logic, making the logic easy to unit test.

For dependency injection we used the Zenject framework.

  • Fully unit-testable client side gameplay logic
  • Gameplay and UI logic separated, making gameplay flow easier to write and maintain
  • Heavily based around MVC and dependency injection

Git Flow workflow

This new project also brought the opportunity to switch version control systems. While we used Perforce before, the team took the opportunity to switch to git. The goal was to implement CI/CD wherever possible, and git offered more versatility in that regard.

This was a challenge as I was the only full time developper experienced in git. It then fell to me to implement the new git worflow. After some discussion, we settled on the classic Git Flow workflow, for its versatility and the possibility of tracking multiple releases simultaneously.

It then fell to me to train the dev team and art integration team to use git, and smooth out any pain points that arised. While Unity isn't especially "git friendly", most notably by the difficulty to merge Unity prefabs, the team is still using Git and is now more productive than before.

  • Introduced teamwide use of Git Flow
  • Trained the development and art integration teams in Git

Acting as substitute Tech Lead

The main difficulty the development team faced in pre-production and in the early stages of production was twofold.

First, the team was made up of a majority of juniors to intermediate level developrs, with the only senior being the lead developer. For this project the lead decided to switch to a manager approach, leaving the vast majority of the actual coding to the rest of the team. Plus the team had next to no experience with backend development, which left many questions unanswered at the end of pre-production. And finally, the role of tech lead had yet to be filled.
When we started production, I was appointed as a substitute tech lead while several candidates were being considered for the role. My job was to lead the other developpers in day-to-day development, coordinating the implementation of the different features. I was also the first point of contact for the lead developper, to whom I would present an analysis of any problems we may have and bring potential solutions.
I ended up prototyping the core layer of the game which was used for several months. After an actual tech lead was brought to the team I retained some of my coordination duties, which I still have to this day.

I believe that at this point I lacked the technical expertise needed for such a task. But this was an invaluable experience for me, which pointed me clearly the areas where I needed to improve. And since when the tech lead arrived he didn't throw everything I did in the garbage can, I would say that all things considered I did a decent job !

  • Lead a team of 5 junior and intermediate developers for several months in the early stages of production

Implementing the core gameplay feature

As the game isn't out yet I can't go into much details here. Essentially during later stages of production I was tasked with implementing the core feature of the game, and coordinating other features that have an impact on it.

Conclusion

As the project has yet to launch, I will hold my final conclusion until then. Nevertheless, undertaking this project is an amazing experience to be part of and I'm very excited to see it launch !