To expand the potential customer base of the Inspired Virtual Sports products a full featured bet management solution was required for clients who do not already have a custom solution. BetBOX was created and deployed on a trial basis, however a full user interface refresh and number of new features were required for version two to aid sales.
Inspired required a full user interface refresh for version two, adding interactive elements, promotions and an industry standard dynamic betslip.
To reduce queue times Inspired wanted to split BetBOX into two applications, one for customers to view schedules, check results and build bets and one for sales assistants to take payment and redeem bets. The applications should run on standard EPOS machines as well as low power free standing terminals.
Utilise and improve the existing VB.NET web services where possible.
Ensure speed for concurrent bet placement across hundreds of terminals.
To allow for the possibility of future applications targeting Windows Store and Xamarin supported platforms, the new applications were created using portable class libraries for business logic, with dependency injection being used to run platform specific code. This also allowed for the creation of the customer facing application BetBuilder and the sales assistant facing application BetBOX to use the same shared code with only some interface implementations having differences.
A large amount of the legacy system was rewritten for performance and code quality reasons, a number of bottlenecks were found in the database stored procedures and data access layer. Through intense load testing a number of critical SQL deadlocks were found and eliminated.
To allow for customers of various languages to access the application it was important that it allow for on the fly language changing, though the typical solution for WPF localisation requires the app be restarted it was possible to create a wrapper for this system that reloads languages dynamically and refreshes all UI bindings.
For the application to support a number of different configurations and different clients a new receipt printing system was required. To allow clients to define their own templates a simple templating language was created that allowed for binding, tables, loops and string formatting. At print time the template is transformed into a queue of commands that when executed fill a buffer with the correct byte sequence to print the receipt.
Previously new builds of the BetBOX suite involved manual deployment to both test and production environments, there were many manual steps involved and the process could take a day or longer for a deployment to a single environment. Building new environments was also a poorly documented manual process. It was clear that there was a strong need for automation to greatly reduce the time and manual input required for deployment and environment setup.
Due to the complex nature of the BetBOX suite it was not possible to fully automate the process using the basic TFS build templates, this meant the creation of custom build flows and custom workflow activities. The build process automated the build and deployment of all services and databases, incrementing application version numbers, generating webpages and deploying SSRS reports. With the new build process build and test time was reduced from 90+ minutes to only 10 minutes and deployment time was reduced to seconds with no manual steps required.
The majority of production deployments occur in restricted environments so a collection of scripts were created to configure Windows features and IIS as well as take a build output and deploy to the environment with little manual configuration needed.
"I worked with Nick for just over two years, and in that time, he constantly and consistently improved his skill-set. He would explore new areas of technology and develop solutions that made the best use of them.
Nick quickly became a knowledge-base in the team, and was able to help other members of the team. He works autonomously, and is able to turn his hand to pretty much any task that is given to him."