Tournaments

1/28/2020 6:17:09 PM

Although I prefer the two-way instantaneous communication that discord provides, as mentioned in my previous post, I'm totally swamped right now with implementing Tournaments. So in the interest of not totally abandoning all communication, I'm gonna try to at least talk "at" you all more regularly via this blog.


So... what can I say? I guess one item that probably deserves a bit of explanation is why Tournaments are late in the first place. To explain that, I have to talk a bit about how Rhino Games works. As you know, we're a tiny team - the engineering team is all of four people, of which I'm one (I split my time between management, direction, and engineering). We have no QA staff, so we're all pretty much responsible for testing our own code.


Over the last couple years of development, the Mythgard code base has gotten pretty extensive. The vast majority of it is code we wrote ourselves. The client runs on top of Unity (which seems pretty common for CCGs these days), primarily because of how easily Unity abstracts cross-platform development. The programming language used to interface with Unity is typically either C# or Javascript (in our case we use C#). As an aside, none of us are primarily C# programmers - most game development is done in C++, and this is actually my first time writing C# code. The servers are entirely custom code, from the front end, which take connections from the clients to game servers (which handle the actual simulation of the game and game rules), match making, community (which handle social stuff), metrics, web, customer service, payments, mail, persistence (kind of like a memcache for the technical minded, these guys talk to the various databases we use to store your data), and more.


It's kinda crazy actually, but all this custom code gives us the ability to do some of the stuff we do that other CCGs have a real hard time doing. Like how you can instantly switch devices in the middle of a game. All in all, it's a pretty damn cool tech base that will allow us to deliver features for both Mythgard and any future games faster and better than what anyone else can do.


The point is that we really make an effort to architect everything "correctly" the first time, whether its to scale to millions of users or to be easily extensible with additional features. Doing this also helps reduce the number of bugs we create as we work on the code (remember how we have no QA?). 


Bringing it all back to Tournaments - with the small, highly experienced, engineering team we have, we typically each take on a feature and own it front to back. Even though we're a very collaborative team in terms of planning, feedback, etc, the actual initial implementation of any feature is usually done by a single person, which is probably the most efficient way to get things done in terms of raw man-hours. However, for larger features especially, that single person also becomes a bottleneck to completion. In this case, I'm doing Tournaments, and make no mistake, it's a bit of a beast - there's just a metric ass ton of cross communication between all of our various servers to make it work - especially if we want to do it "right". And, because it's big and complex, and because this is my first time building a tournaments system, my initial estimate of how long it would take was pretty far off the mark.


Anyway that's it really. Like I said previously, I think it's coming along pretty well, and I'm not gonna rest until it's done. Alright, back to work now. Have a great day everyone!