Thursday, December 12, 2019

Building Dwindle, a list of challenges



This entry is more like the establishment of an initial backlog of topics to discuss than an in-depth discussion of a particular topic.

Building Dwindle was more of a challenge than I expected. Not the programming part - that's my bread and butter. The integration part was the challenge.

When incorporating a 3rd-party product into something owned by a "faceless corporation", we tend to whitewash the situation and tell ourselves "we all need to be patient".

Incorporating 3rd-party services and products into something that you own - something that's on hold and is blocking your plans - exposes the reality: Nothing works as advertised.

Some things work very closely to how they are advertised. Some people or organizations have superlative support and will make what they built work as advertised. Nevertheless, the safe expectation is that what you get won't start out as what you bought.

I found this pattern expressed over and over in the development of Dwindle. Whenever I found myself struggling, it was in trying to figure out how to make something work that didn't fulfill the promise on the box.

The major challenges I encountered were as follows:

  • Getting Android client tests working for a Unity game
  • Getting WebGL client tests working for a Unity game
  • Incorporating Unity Cloud Build into my pipeline and retrieving the results
  • Utilizing Firebase and PlayFab for push notifications on Android
  • Making Firebase play nice with deep links and domain association
  • Countless "Buy-Try-Discard" cycles with 3rd party components on the Unity asset store
There are also integrations that were enjoyable or, at least, not overly painful:
  • Azure (enjoyable)
  • Azure DevOps (enjoyable)
  • MK Glow (enjoyable)
  • PlayFab (started off okay, keeps getting better)
In addition to what I call "challenges", there were also large efforts. The distinction, for me, is that a challenge is a frustrating, open-ended, and risk-bearing activity. An effort may be a lot of work but you know how to do what you're going to do and you know you will eventually get it done. Here are some of the major efforts:
  • Making the game server-authoritative
  • Adding a PvP aspect
  • Making my tests multi-bound (reusing the same test definitions in many different contexts)
  • Defining a pipeline
  • Making it so that I can mostly work in Visual Studio
There was one challenge that didn't have to do with the integration of a 3rd-party component: style. I constantly struggled with it and, honestly, think I still am. Some people say it looks nice, now, but they are probably just saying that in comparison to how it looked before. I have no way of knowing. This was a challenge not because of what someone else didn't do but because of what I basically can't do. Overcoming it (mostly) was probably the thing I'm most proud of with this project, so far.

I'll be writing about these things for a while.