Two weeks ago we introduced a new approach to our game development process that we call our
Super Cycle, inspired by a process of the same name that we use for
product development at my day job.
We wanted to kick off on April 1st, so we used the last two weeks to get a head start on the cycle and just generally start feeling out the new process.
We implemented a few things in the Rust + Wasm WebGL client such as rotating towards the direction that we're walking, hunting huntable entities and even whipped up a few basic models and icons. Among other things!
(As usual - these are all first passes and will need improvement and gloss over time.)
Tomorrow begins the first day of our first
Super Cycle and I'm already very excited to make some focused progress!
To quickly re-cap, our
Super Cycle is a 6 week process that is split into two phases.
Phase 1 I'm calling the
Investment Week. This is the first week of the cycle where we decide on what we'll be doing for the next 5 weeks after this first week,
and is also time that we can spend working on things that aren't necessarily the exact thing that we need to do right this moment but will pay dividends over time.
Phase 2 I'm calling the
Priority Weeks. This is the last 5 weeks of the cycle when we execute on the things that we need to be doing right now do give players a better experience.
Then we rinse and repeat.
I usually like to avoid inventing names for things and concepts when possible - but naming our phases and development process makes it a bit more fun which can be a difference maker when you're working on a multi-year project that requires consistent incremental progress regardless of the ebbs and flows of your life and focus.
Just to be clear - we'll still be releasing as frequently as possible all throughout those 6 weeks. We are in no way moving away from deploying frequently.
I'm loving the new
Super Cycle process so far based on informally trying it out these last two weeks.
As I've worked on the game and its underlying tech for the last three years (way back when I was using Node.js on the backend and JS on the frontend!) I've come across lots of ideas of things to make to improve my work flow such as Percy, blender-iks-to-fks landon and lots and lots of other things.
When these ideas would come I'd usually instantly jump on them.
I found that in the last 2 weeks when ideas came I wrote them down and tucked them away - knowing that I could get to them during a future
Instead of instantly jumping on ideas that I'd have for investing in scaling longer term I was forced to stash them and prioritize them against other things that I could do during Investment Week.
I'm expecting this to be a massive improvement in my workflow since in the past I would let them pull me away from making progress on core gameplay.
Each time spending a 1-2 days or even sometimes 1-2 weeks of time away from delivering a great game sooner rather than later.
Granted those pull-aways would've all been shorter if I wasn't just working on the game in my spare time - but even still we want to be more deliberate about how we spend our time and never let things pull us in a new direction unless it's an intentional act of prioritization.
I will want to continue to work on these things and make these improvements to my workflow and tooling - just in a more structured and prioritized way.
Our first Investment Week has a heavy focus on further automating our deployment processes. Right now it's too easy for me to accidentally mess up a deploy since parts of the process are manual.
At this time there is no fully automated deployment for any of our services.
I've been improving our deployment scripts here and there - but nothing is quite so seamless yet.
An example of this is that I've known of an issue in the authentication server that can crash threads when people try to sign up for over a week now. The fix is simple, but I
haven't gotten to it yet because I didn't want to go through the process of
sshing into the server, pulling new code and creating a new release build.
Our CI has been red for months. I fixed it at one point but it's red again. This is mostly due to CI not really controlling anything right now. There is nothing that happens when CI is green.
Having my deployments be based on green CI will give me good reason to make sure that tests are always passing and make sure that I'm paying attention to the entire test suite, not just the tests for whatever I happen to be working on at the time.
There are four main services right now.
The authentication server, the billing/payment server, the website server and the websocket powered game server.
I'll be setting up continuous deployment of the authentication server, the billing/payment server and the website server this week after I get the test suite passing in CI. I'll be following this CircleCI tutorial on automating AWS ECS deployments.
The game server will need a much more complex deploy process since at any given time there can be thousands of active websocket connections to a game server.
I haven't begun to think through that deploy process yet. So for now it will still be a somewhat manual process until some future Investment Week when I decide to tackle it. Maybe even in the next one!
For the 5 Priority Weeks of this Super Cycle I'll be focusing on two overarching things.
One is being able to complete the first quest in the web client. Right now I have an integration test that completes the quest in code - but completing it in game requires UI elements, meshes and polish that do not yet exist.
An integration test that completes the first quest in the game by pretending to be a real player.
The second is creating and rendering the equipment UI. Right now we have a basic inventory interface taking shape - and by the end of this cycle we should have something similar for player equipment.
All throughout I'll be writing new tests and features, and creating new interfaces and meshes.
I'm hoping to end this cycle with things starting to look much more like a game.
I'll update you next week on how the first Investment Week of the first Super Cycle went!
See ya next time!