Saturday, December 14, 2019

Making my tests multi-bound

To multi-bind a test is to make it so that a single test enforces the same semantic requirement against different portions of a system.

This has been going on for a long time but not everyone noticed it. Teams that use the Gherkin syntax to define a behavior are likely to exploit those definitions in two ways:
  1. Bind automatically with Specflow or Cucumber.
  2. Treat as a manual test script.
This is an early form of multi-binding.

I'm talking about something more than that and it's the foundation of stability in all my pipelines. So we need to discuss it, first.

In my environment, any given test can be executed all of the following ways:
  1. As a unit test.
  2. As an integration test with no networking (everything runs in a single process).
  3. As an integration test for the backend with mocked data.
  4. As a gate between the blue and green environments of the backend.
  5. As an integration test for the Android client, with a local server and a mocked database.
  6. As an integration test for the WebGL client, with a local server and a mocked database.
  7. As a gate between the blue and green environments of one of my WebGL deployments.
There's nothing to stop me from adding more ways to run tests if I need them. This seems pretty good for what amounts to a one-man show.

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.

Wednesday, December 11, 2019

Dwindle released on Kongregate

Dwindle has been released on Kongregate. You can play it here. This deployment interoperates with the existing Android deployment.

This release coincides with a major UI overhaul. Here are some screenshots:



Here's a cute little animated gif, demonstrating gameplay.



Here's a video of me beating the AI on the "normal" (1 star) setting, using the Simple board.


It took a lot of behind the scenes work to make this happen. In addition to everything you see and what you may easily be able to imagine (like the back end server), I also needed to build a very reliable pipeline to guarantee that what I build flows out to production in a well-controlled way.

The pipeline is summarized in the following dashboard:


It seems like there's months worth of writing on the subject of getting to this milestone.