Category
Technical Challenges

Testing the Algorithm – Evaluating TLA plus

If writing distributed algorithms is hard, proving they work with the many permutations of state in a highly concurrent distributed architecture is next to impossible. To mitigate this risk, typically you would write a comprehensive set of unit and integration tests and couple this with load and system failure testing to determine correctness both of the algorithm and the implementation. However, testing has its limits. It is difficult to simulate the many variations of system stalling, network latency and failure and to determine the consequences to other system components of resulting back pressure. In addition, discovering and fixing a flaw…

Read More

Reducing The Footprint Of Our Virtual Sports Streaming Platform

…and improving on HLS latency and our ability to scale in the process Background For over a decade we have been operating a suite of virtual sports games on our website with the ability to watch the event via a video stream. These streams have always been encoded and packaged for distribution to the client player by systems and appliances ran ‘on premise’ within bet365’s data centres. Throughout this time the products and solutions in place have evolved in accordance with the technologies behind live and on-demand streaming across the internet and the client players within the browser (we have…

Read More

More for less, more or less

I have always loved simple designs, being able to look at something and see immediately how it works without needing to ask the person who built it. I believe that is one of the cornerstones of good architecture whether it is buildings, machinery or software. When working in a company, like bet365, where normal throughput exceeds 1000s of transactions per second, and there must be consideration for every millisecond (or microsecond) used, multi-threaded code is a necessity. The challenge, from an architecture point of view, is to establish a standard approach in C# to define and organise highly concurrent code…

Read More

Riak Update

Riak has come a long way since the unfortunate demise of Basho Technologies. With the release of Riak KV 2.2.5 (https://github.com/basho/riak/blob/riak-2.2.5/RELEASE-NOTES.md), which is the first community-led release of the database, the incredible success over the last few months is clear. A significant number of pull requests have been created, from organisations that operate large-scale Riak deployments, and also individual contributors. The community has continued to grow steadily, in both size and activity, across social channels and in terms of code contributions. The progress is staggering, considering that it was only a little over 6 months ago that the first community…

Read More

Moving between technologies

…and the challenges that we face when bringing in change and enforcing it For this post we are going to have a look at how the Sports UI team within bet365 handle the rapid pace of change in technology, what happens when it doesn’t go well and how we have reacted to this to allow success in the future. Being a company focused on technology we are all too aware that the landscape of technology is constantly moving. Today the flavour of the month could be Angular2, which could flip entirely to ReactJS the next month and then next month…

Read More

Image Optimisation

One of the most important but perhaps under-appreciated tasks in the design and development teams is the judicious optimisation of images. We use the word judicious very specifically here because it is a job we can’t currently leave solely to computers. It is a job that requires keen eyes and excellent judgement. Why? The largest category of assets, in terms of file size, on a web application are almost always the images. An unneeded JavaScript library like jQuery or generally flabby code (which obviously we would never be guilty of writing, but suppose we did) can be easily dwarfed, in…

Read More

Efficient Default Property Values in TypeScript

In order to ensure that our website runs as fast and efficiently as possible, we often use performance analysis tools to take a look at what is happening inside the browser, specifically on more constrained devices such as Mobile Phones. It was during one of these profiling sessions that we realised that the JavaScript emitted by the TypeScript compiler had the potential to be optimised so that the output used CPU and Memory more efficiently. While investigating this we devised a TypeScript design pattern for properties of classes called the Static Initialisation Pattern. This article discusses this pattern, how it…

Read More

Normalising Geometric Data at bet365

Normalising geometric data is not a problem solving exercise that immediately springs to mind when you initially join the Sports UI team at bet365. What does geometry have to do with sports betting? As part of bet365’s In-Play Sports offering, we have enhanced several sports; with a feature we call “Match Live”. We know that our customers may not always be able to catch the sports they have placed a bet on, Live on TV. The Match Live feature enables customers to get an overview of the latest scores and view several different statistics for the Matches that are in-play….

Read More

Large-Scale Web Development Using TypeScript

Or, Re-building The World For The Post-Flash Era This article discusses the technology decisions that we made in developing our latest desktop site, and how those choices allowed us to deliver the site in the face of pressures outside our control. Background In 2014, our flagship desktop sports product had reached the pinnacle of what we could do using Adobe’s Flash platform. Even so, we knew that Flash was reaching the end of it’s natural life as a web platform. Ever since Steve Jobs had penned his “Thoughts on Flash” in 2010 the technology industry (specifically browser vendors) had begun…

Read More

Bi-Directional Communications for the Web

Or: Websockets for Fun and Profit   What Is This Hyper Text Thing Anyway? HTTP (Hyper Text Transport Protocol) was originally built to provide a resilient means of conveying data across a unreliable network of unreliable networks, and it arguably accomplishes this very well. It is now one of the most widely adopted and implemented application protocols in the world. The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems. It is a generic, stateless, protocol that can be used for many tasks beyond its use for hypertext, such as name servers and distributed object…

Read More