Having a Team of Novices

Part where the team thought we could provide value to demystifying engine development was by being a team of inexperience engine developers. We thought this would be valuable because we wouldn't have any preconceived notion or assumption in development and could then document what we assumed for others. There was another added benefit of us being novices, no one on the team could feed us answers.

A significant part of the engine development process was from making decisions about the engine, which took place in team discussions when we would gather around a computer or the whiteboard. In these discussions, someone would present the problem and then typically their original naive solution and why it wouldn't work; from there the team would throw around ideas and prod for more details. At a minimum these meetings provided everyone context on a feature that was being developed in the engine and forced some problem solving. However, if someone on the team already had engine development experience before the meetings would probably end before they even started because that person could just say, this is the answer because I did it this way before. This highlights a challenge of working with more experienced people; while that experience helps the product ship and your skills, it can also be harmful for learning.

In the beginning of the project, we had a pseudo expert in the room in the shape of a book, "Game Engine Architecture". Everyone on the team had read the book in some capacity, which gave us this vocabulary to use in our discussions. However, a pitfall we almost fell into, especially in the beginning, was following "our expert" too closely. Some of our discussions and decisions started to boil down to, "what does the book do", and while this was helpful to continue development, it wasn't really good for our growth. Don't rely on or imitate your expert's experience too closely, particularly when just starting off learning.

With professional engine development, the goal is the product and learning along the way is a side effect. But for our project, the goal wasn't to have a perfect, bug-free engine but to learn engine development and having a functioning engine at the end was the side effect. By eliminating the expert from the room, we made mistakes which impacted the engine but learned more from those mistakes than had we had someone tell us how to do it.