With offices in Prague and Johannesburg, our team of highly talented developers is building a world-scalable platform, delivering the best Subscription Video-On-Demand experience on the African continent and beyond. Our blog is where we share what we’re working on, how we’re working on it, and tips and tricks for all the engineers out there.

What we do?

The Showmax back-end is an in-house developed, microservice-oriented platform, mostly written in Ruby, Go, or Python. When writing microservices in Ruby, we use Rails for applications with web interfaces and Grape for the pure RESTful APIs. We use Puma as the application server, and MRI as our Ruby VM.

Go is typically used where we need large throughput like end-device event collection or routing of storage requests. We use Python for our Content Management System (CMS), having built it with a Django web framework and PostgreSQL for the storage of metadata - in our case, movies and TV shows. Our speedy API microservices are provided by Falcon - bare-metal Python web API framework. To satisfy need for speed, microservices read denormalized data about assets from Elasticsearch.

In fact, our primary business resolves around video streaming. To get there, we have our own video encoding pipeline that can orchestrate encoding across hundreds of servers and powered by FFmpeg - the Swiss army knife of video encoding that gives versatility to our encoding pipeline. We support multiple streaming protocols as well as DRMs (Digital Rights Management), and have developed routing layer for our origin storages to be able to scale throughput and storage capacity based on our needs.

Our platform is not just about APIs and streaming. What would the streaming platform be without user front-ends? Not much! We maintain and develop applications for an ever-expanding set of devices served with JavaScript applications. Obviously, desktop and mobile browsers are important, but we also support embedded JavaScript engines on SmartTVs and game consoles, and we have gone pretty big on our native applications for Android, iOS, and AppleTV (tvOS).

Planning and task management is done in Phabricator and all of our code is in git (we have our own installation of GitLab CE).

Showmax and the Open Source Community

We love open source (OSS), and a lot of our developers are active members of the OSS community - something that we encourage. We use OSS and we are always trying to give something back to that community through bug reporting, submitting pull requests, and open-sourcing our own tools - which you can check at github/showmax.

Many of the tools we use on the infrastructure side are part of Cloud Native Computing Foundation (CNCF), of which Showmax has been a member since 2017.

Showmax Technology Stack: puma,crate,react,flow,tensorflow,prometheus,django-logo-positive,fastlane,elastic-logo,redux,kotlin,graphql,webpack,debian,eslint,gitlab,go,puppet,elastic-logstash,apollo,rabbitmq,rubocop,jenkins,rx,phabricator,grape,etcd,elastic-kibana,elastic-elasticsearch,lodash,babel,uwsgi,spark,consul,falcon,grafana,r,icinga_logo4,psql,superset,haproxy,varnish,rails,apache-http,swift,redis,docker,vault,gradle,ruby,python,hls_js,nomad,mesos,shaka-player-logo,nginx,git,unifiedstreaming-logo-black,ffmpeg

Currently the list of OSS projects we use includes: Debian GNU/Linux, ElasticSearch, PostgreSQL, Varnish, HAProxy, nginx, RabbitMQ, Apache Spark, Apache Mesos and many others.

Delivering Quality Product

We take the quality of our product very seriously. We deploy combination of automated and manual testing, canary deployments, detailed monitoring of the complete request lifecycle, and more to help us deliver fewer bugs to production. Stack and coverage is different for every team, so we have listed some teams’ specifics down below.

All of our automated testing is orchestrated by Jenkins, which executes the appropriate test-suite for every commit. We have recently open-sourced our internal tool for visual regression testing - ImageDiff.

Team What we use for automated testing
iOS Apple’s XCTest is used for unit tests, Fastlane for CI, iOSSnapshotTestCase for static UI tests, and EarlGrey for interactive end-to-end UI tests.
Android The usual suspects - JUnit, Espresso, Hamcrest, and Mockito - are used for unit testing. We mock our dependency tree with DaggerMock, and record and replay our network communication with OkReplay.
Website WebDriver with BrowserStack and visual regression testing.
Smart TV suite.st to run tests on multiple TVs from various manufacturers. Thanks to suite.st, we are able to write tests in JavaScript and use them as integral parts of the product code-base. TV wall for development and testing Automated tests running on our TV wall
Backend Backend services are covered with end-to-end UI tests using a RSpec/Browserstack/Capybara/SitePrism stack with image snapshot comparison using ImageDiff. We also check latencies, throughput etc. on the most-loaded endpoints. To be able to keep an eye on regressions or newly introduced performance degradations, we run automated performance tests every night. These are built around JMeter.

Sometimes, using automated testing is impossible or impractical and manual testing is the easiest way to verify the implementation. We use Testrail for keeping track of recurring manual tests.

Team What we use for manual testing
Mobile Teams We test on more than 50 devices, 60% of which run on Android. We support Android versions from 4.1, and iOS versions from 9.3. For test build distribution, we use Beta by Crashlytics on Android, and TestFlight on iOS.
Website Making sure that our website works across wide variety of browsers is very important to us. We use BrowserStack Live to check on various combinations of operating system vs browser version.

Get in touch with us

Let’s talk

Found our work intriguing? Let’s have a chat. We are going to various events, please check the calendar below. You can also just send us an email at geeks@showmax.com.

Talked about us

We have been fortunate enough to receive a great coverage by independent writers: