Building software can be an ongoing challenge, but how do you setup your software environment in order to make sure that clients get the best experience? This article takes a sneak peak into the world of Software Stability!
Thanks to one of my good friends and colleagues (Srdjan L. – A FREAKING GENIUS and a true gem! Hi Srdjan!) who taught me a LOT about stable software, there are approximately FOUR environments (Though each corporation may have a slightly different setup) I recommend you setup to help you in creating more stable games and software (This works well for Multiplayer/Multi-User games or any app where there are usernames, passwords and logins, which most of the latest top AAA games and apps SaaS Software’s generally have – specifically you need some form of SERVER architecture going on).
1. Staging Environment
This environment is where all the development takes place. You can consider this the developers area where you can make your mistakes and break things as much as you want. Test out new code ideas, see if something works, but basically this is where all the BUILDING of new features and ideas (and bug fixes) takes place. Should anything happen in this stage, the client or end user will never see it. This should STRICTLY be for developers only and possibly for a Product Manager to kinda see if the team is going in the right direction to test things out.
I would not recommend marketing or any other department to go in to this as they may see a feature that may not be released. Be careful who in the team has access to this part of the product.
Once a product has been tested well in the staging environment (Using internal Alpha testing within the team), you then want to move your build into a second environment known as the…
2. QA Environment
The QA environment is where various forms of TESTING take place. Listen, just because something worked before doesn’t mean it still does. Any updates or changes you made in code could have literally broken another part of code. The goal of any QA environment is to literally test ALL the areas of your game/app to make sure its working.
Your app or game may have started off with one or two functions but over time this will grow and you wont be able to manually test EVERY function EVERY time. Thats where QA software comes in (Things such as JUnit, Appium, Selenium etc.) and you have SEVERAL types of tests that take place.
Two tests that you definitely want to do are a UI Test and a Code test. With UI Testing you’re testing to see if the PHYSICAL UI Works (Ex. If the user clicks a button, does that button do what it is supposed to do? If so, return SUCCESS, else return FAIL). For Code testing, we want to make sure our FUNCTIONS are returning what we need them to return (Ex. Function A takes in two variables and should return an integer value. Does this still hold true?).
The thing about the QA Environment is that it is ALWAYS preset. That means that everything is predictably set with default values to start with to help test out functions. Your goal should be literally to TEST to see if things work so focus on that => Ex. You are looking to see that if your function adds two numbers IT RETURNS TWO ADDED NUMBERS.
At this point you can then use GIT and other tools for Continuous Integration which will allow for cool things such as auto-building and stuff.
Which then brings us to our NEXT area…
3. Sandbox Environment
The sandbox environment is literally where you have your beta testers and sales team going out to share features. This is basically a production version without the actual final end users. This is where things can be tested for other unseen bugs before launching as now you’ll have users using the app/game, you can see any additional edge cases that you may not have detected in any of the previous tests with a more realistic data set and real users. It’s at this time that any final mission critical items can be addressed before a final push.
Keep in mind that you want to make sure that you don’t have anyone messing around with things when Sales teams are up selling the game or app or future features. It’s happened several times where a “Beta Tester” was updating data when a nice demo was going on LOL!
Finally that leads us to the most important environment…
4. Production Environment
I still remember every time production would ever go down, my good friend Srdjan would just about darned near have a heart attack! Basically this is literally where all the end users are. This is the FINAL build, the actual thing that gets into end users hands.
This is where you want to have analytics and tracking to see how users are using things. From various heat map analytics to video replays (If you can get them) you want to see where your user base is going. What is the user flow, what are they doing in your app or game?
Ironically there have been so many times that the end users use your app or game for an ENTIRELY different purpose!!
You want to make sure you know your up time and the second things may go down you need to be prepared!
Amazon AWS as well as Digital Ocean provide various services to help you with scaling as your app or game grows.
Well there you have it, if you have a four staged environment like that and build your software through those stages (Staging, QA, Sandbox, Production) you’re going to be able to build better software and ship things with higher quality than if you just went out and made your game and pushed it right to the end user (Basically right to production).
Strategies like this are what the top dev companies in the world are doing (I know I worked at several of them, including my last one) and I highly recommend employing some or all of this methodology to really get your games and apps to that next level! Not only will you have better software and games, you’ll also have a more bulletproof end user experience which in turn means higher revenues and a better bottom line!
Got some additional ideas? Please write out how you are using various environments in your own companies and add to the discussion!
Now go make some awesome games! You are a super star! Keep up the great work and NEVER GIVE UP! You Got This!! BE A CHAMPION!
Nav is a Unity Live Expert and Mobile Game and App Developer