Latest News & Updates

How to Create a Successful Bubble Shooter Game

By Hannah Press on February 21, 2020 in Articles, Game Developers

In the world of mobile gaming, Bubble Shooter is an incredibly popular genre. In a crowded, competitive mobile gaming market, what do you need to know about creating and launching a Bubble Shooter? We’ll discuss some of the most pertinent information on this highly-engaging sub-genre. 

Bubble Shooter History 

Before we get into the creation of a Bubble Shooter game, we’d like to share a brief history of the genre. Bubble Shooters are based on the “Puzzle Bobble” arcade game released by Taito in 1994. The first Bubble Shooter game, created in 2002, was ported to iOS in 2010 and Android in 2012. With the rise of the mobile phone and highly accessible casual gaming, Bubble Shooter games have grown in popularity and success. The object of the game is simple and engaging: clear the playing field by forming groups of three or more same-colored bubbles. 

Why is the Genre Successful?

Considering the history of Bubble Shooters, we can conclude that the genre has staying power. It was popular in 1994 as an arcade game, and it has only grown more successful since. Bubble Shooters are uncomplicated, yet exciting puzzle games. Players must strategize and think, but it is relatively easy to learn the game and improve technique. 

Another key reason that Bubble Shooter games are so popular is that the gameplay is very accessible to a large player audience. As casual games require minimum previous gaming experience and are relatively easy-to-learn, the number of players across a diverse player demographics are eager to discover this type of content. With Bubble-Shooter’s falling squarely in the casual genre, there is solid player demand for new and exciting content.

Creating a Bubble Shooter

There are tons of games in the Bubble Shooter sub-genre in the iOS App Store. In this crowded market, you’ll need to create a crisp-looking game to make it successful. First, ensure that your target audience is correct. While gaming has historically appealed to largely male and young generations, hyper-casual mobile games tend to attract middle-aged women. Confirm that creative and messaging are correct for your audience in order to have a solid Install to Deposit ratio. 

Remember that a great game is easy to learn, but difficult to master. Make the gameplay engaging and simple, yet challenging enough so that the player must learn and improve over time. In designing your Bubble Shooter game, ensure visual clarity for the player. Use high-contrast color combinations and consider giving each color of an item a distinct texture or shape. 

Spend time polishing the core game loop, using visuals and sound effects to celebrate winning moments. This will help maximize the likelihood of repeat play. Offer power-ups, increase the value of large matches, or give players a creative objective to create more game depth. 

All of these things considered, your Bubble Shooter game needs to be unique. Ask yourself: What will set my game apart in this content-flooded genre? What will motivate players to keep coming back?

Bubble Shooters on the Skillz Platform

One way to set your Bubble Shooter game apart from the rest is to make the game competitive. With the Skillz platform, you can position your game on a competitive tournament system where users play against others of equal skill. 

Bubble Shooters work well on the Skillz platform. If you’re interested in seeing how Skillz can help you launch and monetize your mobile game, then check out our Developer Console to download the newest SDK.

How to Create a Successful Puzzle Game

By Hannah Press on February 12, 2020 in Articles, Game Developers

Puzzle Genre History 

Puzzle games originated with offline brain teasers and puzzles throughout history. Games like “Blockbuster”, “Snark Hunt”, and “Door Door” incorporated puzzle elements as early as the 1980s. The first video game to use the word “puzzle” in its title was “Puzzle Panic” in 1984. But puzzle games were largely popularized and revolutionized by Alexey Pajitnov’s “Tetris,” which went on to sell 30 million copies on Nintendo’s Game Boy. 

In the 1990s, Mahjong games and “Minesweeper” thrived on the PC platform. And in 2001, PopCap Games released a match three game that was the foundation for popular mobile titles like “Candy Crush Saga” and “Puzzles and Dragons”. In 2014, puzzle games were the largest genre on the iOS App Store.  

Why is the Genre Successful?

With so many new genres and games coming to fruition, it may be surprising that puzzle video games have remained so successful over the years. One reason for this is that puzzle games appeal to a basic pleasure center that humans have. Puzzle solving allows people to create order out of chaos, and in such a way that the player experience is never exactly the same. Therefore, players are constantly strategizing and making decisions, rather than simply using habitual memorization. Puzzle games are easy to learn conceptually but extremely difficult to master in practice. This is what keeps people coming back. 

The continued success of the puzzle genre is due, in part, to the rise of smartphones. 81% of Americans own a smartphone, which means the total addressable market is vast. Mobile games are accessible to a large player audience with a wide range of demographics. As casual games and genres require minimum experience and are relatively easy to learn, players are eager to discover this type of content. Giving gamers the opportunity to compete with each other in head-to-head matches, as well as offering in-game social features empowers gaming communities to further drive the success of the genre.    

Creating a Puzzle Game 

With the large volume of puzzle games available, especially in the fast-growing mobile gaming sector, it is important to create a stimulating, engaging game to ensure its success. First, identify your target audience and confirm that creative and messaging align with their motivations in order to achieve a solid Install to Deposit rate. 

When designing your game, remember that a good puzzle game is easy to learn but difficult to master. The player should feel that there is an end goal they are working toward, whether it’s solving the puzzle entirely or earning points for each strategic placement of a puzzle piece. Keep your style relatively minimal and avoid clutter. Use high-contrast color combinations and consider giving each color of an item a distinct texture or shape. Make the core loop engaging and simple, yet challenging enough so that the player must learn and improve over time.

Use visuals and sound effects to celebrate winning moments. Offer power-ups, increase the value of harder levels or matches, or give players a creative objective to create more depth. These additions will improve your retention by keeping players engaged and motivated. 

After considering these important aspects of creating a successful puzzle game, ask yourself: What sets my game apart from others?

Puzzle Games on the Skillz Platform 

One way to differentiate your puzzle game in the mobile games market is to make it competitive. With the Skillz platform, you can position your game on a tournament system where players compete against others of equal skill. Why are puzzle games so successful on Skillz?

  1. Puzzle games are built for competition. The level-based progression maps of puzzle games already serve as asynchronous leaderboards. With Skillz, players can compete against real opponents whenever and wherever they want. 
  2. The familiar gameplay and mobile format give users the ideal conditions to raise the stakes. The rules and mechanics are universally understood, and appeal to a variety of competitive player types (e.g., pattern recognizers, math-oriented players, problem-solvers).
  3. Puzzle games are fundamentally skill-based, but some randomness in gameplay enhances player retention. The “random” element of puzzle pieces fosters an exciting, evergreen experience, while the Skillz fairness algorithm ensures each competitor receives the same random conditions.  
  4. The quick, timed format is ideal for tournaments. Short game time leads to instant results and enables players to enter more tournaments in their available time. Players measure their progress against the clock, empowering a more rewarding experience while increasing their likelihood to compete again and again.

If you’re interested in seeing how Skillz can help you launch and monetize your mobile game, check out our Developer Console and download the newest SDK.

The What and Why of Chaos Engineering

By Hannah Press on January 23, 2020 in Articles, Game Developers

Netflix alumnus and serial entrepreneur Casey Rosenthal recently hosted a lunch-and-learn on chaos engineering at the Skillz San Francisco office. His work on chaos engineering at Netflix has established him as a top thought leader in the field. Rosenthal is currently the CEO/Cofounder of Verica. As an Executive Manager and Senior Architect, he manages teams to tackle big data, architect solutions to difficult problems, and train others to do the same. In this blog, we explore the principles and benefits of chaos engineering.

Modern systems in engineering are complex, with an ever-growing demand for both system reliability and abundant new features. A relatively new discipline, chaos engineering helps address the complexity and demands of modern systems. Chaos engineering can be thought of as the facilitation of experiments to uncover systemic weaknesses. It provides real-world insight into how services behave in production and addresses problems that result from the interaction of the numerous components in a distributed system. 

Chaos Engineering Defined 

Chaos engineering seeks to identify the “chaos” inherent in a complex system. Rather than reactively fixing bugs and addressing failures when they occur, the chaos approach practices proactive experiments based on hypotheses to uncover systemic vulnerabilities before they affect customers. It enhances a system’s ability to keep operating and providing a positive experience for end-users even when issues arise.

Scaling complex systems is hard, so there are many misconceptions and myths surrounding it. Rosenthal listed a few of them, including the common assumption that you can make your system more robust by removing people who cause accidents. However, they are rarely, if ever, caused by a single person. While some team members may be involved in more accidents than others, this is more likely due to resource constraints, communication hindrance, or inadequate training than an individual’s shortcomings. Moreover, the system often responds worse to removing a team member vital to its health. Rather than blaming individuals, chaos engineering focuses on proactively testing the system to support growth and stability. 

The Principles of Chaos Engineering

Chaos engineering involves all system stakeholders to intentionally “break” areas of the system through well-planned experiments that mitigate the impact of failures. According to Rosenthal’s principles of chaos, you should: 

  1. Define steady state behavior to build a hypothesis. Look for measurable output that combines customer experience and operational metrics (as opposed to focusing on internal attributes of the system). This will represent the system’s steady state. Then, build a hypothesis around the aspects of the system you believe are resilient.
  2. Simulate real-world events. Introduce variables that mirror realistic events like servers dying, malformed responses, and spikes in traffic. Anything that might disrupt steady state is a viable variable to experiment with.
  3. Carry out experiments in production. This shows in real-time how your system responds to change and how failures/outages affect customers.
  4. Run experiments continuously. Automating chaos experiments saves time and allows teams to focus on building out new features. It also deepens system knowledge for engineers to detect and tackle issues faster with little consumer impact.
  5. Minimize customer impact. When running chaos experiments, it’s the engineer’s responsibility to mitigate blast radius and ensure customers aren’t greatly impacted. 

  As systems grow in complexity, it’s important to incorporate continuous verification (CV) into the continuous integration and delivery (CI/CD) process. “Organizations do not have the time or resources to validate that the internal machinations of the system work as intended, so instead they verify that the output of the system is in line with expectations,” Rosenthal says of CV.

Benefits of Chaos Engineering 

Chaos engineering helps uncover the unknowns in a complex system and addresses them in a controlled environment. It’s a proactive strategy that allows proactive planning for potential problems, rather than scrambling to react to a failure in production at 10pm on a Friday when most users are engaged. 

Additionally, controlled chaos experiments help balance three important tradeoffs in engineering: economics, workload, and system safety. Ask yourself how to allocate money and resources, how your team is doing, and how much your servers can handle. By testing the system proactively within the boundaries of the team’s economic means and resources, it’s easier to maintain a healthy employee workload while ensuring the safety of the system.

A successful chaos approach empowers cultural growth across multiple teams. All stakeholders rally behind a common focus around avoiding system failures and building confidence in the future — resulting in happier, more efficient, and more engaged teams. 

As Skillz strives to make mobile competition accessible for every player worldwide, we’re focused on building confidence in our increasingly dynamic microservices system to deliver the best user experience possible. With over 30 million users on the platform, reliability is paramount. Understanding our strengths and weaknesses allows us to proactively prepare as we scale and successfully tackle failures before they damage the experience of our customers.

Competitive Multiplayer Mobile Games: Synchronous vs. Asynchronous

By Hannah Press on January 23, 2020 in Articles, Game Developers

Multiplayer mobile games drive long-term player retention by allowing players to compete for bragging rights or real prizes, and encouraging players to build social connections and communities through gameplay. To build a successful multiplayer title, developers must consider the game genre, style of gameplay, audience needs, and budget to drive early player adoption. 

This blog focuses on two major types of gameplay for multiplayer mobile games — synchronous and asynchronous — including the benefits and drawbacks of both, as well as key developer considerations. 

How to Market your Mobile Games in 2020

By Hannah Press on January 15, 2020 in Articles, Game Developers

With over 900,000 games on Apple’s App Store, there’s no doubt that the mobile gaming ecosystem is competitive. Marketers must constantly keep their app fresh on consumers’ minds, with the ultimate goal of having it featured in the App Store to drive downloads. Getting a user to install an app isn’t easy or cheap, especially when you’re convincing them to purchase an app. To put this into perspective, the average cost of acquiring a user who makes a purchase is more than $86 on iOS and $77 on Android. On top of that, just over 5% of global mobile gamers actually make in-app purchases.

Most game developers don’t have hundreds of thousands of dollars at hand to spend on marketing. So the key question to consider is: how can you acquire players with a limited budget? Let’s take a deep-dive into five successful paid acquisition strategies to drive more players to your game. 

Data and Tracking

First, integrate a Mobile Measure Partner (MMP) into the game. This MMP will provide performance metrics, such as attribution, Lifetime Value (LTV), and Return on Investment (ROI). Network attribution tracking ties an acquired user back to a specific ad campaign with an associated cost. This way, marketers can understand the monetization of the user from the specific campaign with respect to the cost of the campaign. A MMP ultimately empowers analytical thinking about marketing, which is the basis of performance marketing. For any game developer that is considering launching a Skillz-powered game, the Skillz SDK has a mobile measurement partner baked directly into it. No need to go out and establish a new partnership!

Analytical Insight

After identifying which users are acquired from each marketing campaign, you can begin the process of optimization. In this phase, you compare the quality of different campaigns and allocate budget to the ones that showed the best performance. A well-performing campaign is not necessarily one that has cheap Cost per Installs (CPIs) nor is it one that has cheap cost per actions (CPAs). What we ultimately want to focus on is the return that you are getting from the capital invested. However, this does take some time, so looking at indicators of success like CPI and CPA can be helpful, but don’t base everything on them. 

After analyzing campaign results, generate hypotheses around why the top campaigns are performing the best. Then make iterations to test these hypotheses. Ideally, some of the tests will yield better results than the current best performer, enabling budget reallocation to further aggrandize results. This process of learning, testing, and iterating is what ultimately allows a game to grow in an efficient and stable manner.

Creative, Messaging, and Audience

Now it’s time to produce the creative. If you have a limited creative budget, consider experimenting with photoshop yourself. Testing a wide variety of creative across different ad types will ultimately result in honing in on the right message and creative.

A marketer should not only look at a creative’s total portfolio spend across Cost Per Acquisition (CPA) & Return on Ad Spend (ROAS), but they should also evaluate the entire funnel. Consider how clickable an ad is (CTR), how relevant the ad is Click-to-Install (CTI), and how well the ad communicates the value proposition (monetization rate). By analyzing all of these metrics, marketers start to have a view of the full funnel. Here are a few ways to interpret full-funnel results: 

  • High CTR, Low CTI — Click-bait; lots of clicks but not relevant thus no one installs your game
  • Low CTR, High Monetization Rate — Relevant to the right people, so this is not necessarily bad. Sometimes higher CPIs are an indication of quality traffic, which makes the initial investment worth it from an ROI perspective. 

Test a wide variety of messaging across creatives and audiences to determine the highest performing type of messaging. Break up messaging into categories and measure the performance in aggregate to understand where to focus efforts. 

Additionally, test a wide variety of audiences across creative and messaging to hone in on the right people to target for advertising. Keep in mind that creative and messaging can be audience-specific so it’s important to take an audience-first approach and iterate from there. 

Be Patient

Remember that users have a lifetime value, which is inherently not immediate. It will take time for user cohorts to stack up and generate revenue, so keep a keen eye on the spend efficiency.  Make sure not to waste dollars on poor-performing campaigns holding out for hope. If spending is solely focused on ROI-positive campaigns, eventually the marketing investment starts to turn ROI positive. Finally, the extra budget allows for more cash to be funneled into marketing campaigns, which ultimately drives more players into a game!

A Great Product

Even the best marketing plan won’t work on a sub-par product. So make sure to have an engaging game, make it fun, and ensure a positive player experience — and the LTV will come.  

This is one of the areas in which Skillz delivers the most value. The Skillz competitive tournament management system provides game developers everything they need to transform a game into a mobile eSport. With a full-stack SDK that includes a wide array of features, Skillz empowers game developers to better monetize their games in a way that doesn’t interrupt the player experience. 

More than 20,000 game developers are taking advantage of the Skillz competitive tournament management system. Skillz-powered games experience higher player engagement, retention, and ultimately, better more monetization. To learn more about how you can utilize our competitive tournament system to boost your game’s revenue, head to developers.skillz.com.

Improving System Efficiency by Taking Meaningful Actions From Data

By wpengine on November 16, 2019 in Articles, Game Developers

Author: Shawn Hillyer, Software Engineer

This is a story of how we identified and fixed an issue of a key component of our business – improving its efficiency by over 70%.

Software engineers have the vital responsibility of ensuring the stability of the systems they design and maintain. This is especially important at Skillz, a massive marketplace platform that services over 4 million mobile game tournaments every day. We tailor the user experience with a data-driven approach that creates a record for each player in each game played.

We want to cache important information about every player, so we use Amazon S3 to stage that information and then index it in ElasticSearch for quick retrieval. 

However, in August, we noticed this data was taking so long to load that we were unable to finish loading records before the next scheduled load began. To preserve the positive player experience, we had to quickly identify and act on solutions.

Testing React Native Components with Jest

By wpengine on September 26, 2019 in Articles, Game Developers

Author: Milli Beckers, Software Engineer at Skillz Inc

Jest is the officially supported testing library for React Native. Those less familiar with the basics are encouraged to take a look at their documentation page on matchers to gain greater understanding of what Jest is all about.

Once you’ve done that, you may notice a page of documentation specifically for React Native. “Great,” you think, “I have components that I want to write tests for and this will show me how to do that.” Unfortunately, while the page contains useful information on customizing configurations, as far as practical examples go it only provides a surface-level snapshot test. Hopefully, this article fills in some of the gaps by providing examples of how to write tests for a few common situations.

Snapshot Tests

The Jest documentation provides a great article on how and why to write snapshot tests. To summarize, snapshot tests pseudo-render components as a JSON, which gets saved into a snapshot file. Then subsequent runs of that test will compare the current JSON to the existing one and highlight any differences, allowing you to catch any surprise changes.

A basic snapshot test example looks like this:

Testing iOS vs. Android

Sometimes we want to display different pieces of UI on different platforms, but how can we test that both variations render correctly? While it is possible to configure Jest to run all tests as though they were on Android instead of iOS, that doesn’t help when you need to switch back and forth between the two. The following example demonstrates how to temporarily set the platform to Android.

For this case, we will use jest.doMock to temporarily mock out the entire Platform module. This way, any calls to Platform.OS inside your component will return Android. Always remember to remove the temporary mock at the end of your test, otherwise subsequent tests will continue to run with the modified behavior. 

Testing Different Screen Sizes

Mocking Dimensions is even easier than mocking Platform. We can use the normal mocking pattern to apply the mock for the entire test suite, and then when it comes time to run the test on a different size we can replace the mock implementation for the next time the function gets called.

Assuming you determine the screen dimensions on each render as recommended by the React Native documentation, you can test sizes using the following example. The default test behavior for Dimensions without mocking would be to return a height of 1334 and a width of 750, which is the screen size of an iPhone 8.

However, it’s important to note that if you are using Dimensions in constant style definitions (such as in a const StyleSheet.create at the bottom of the component’s file), changing the return value of Dimensions.get won’t reevaluate the styles. Creating snapshot tests for different screen sizes using this method will mean refactoring your code to match React Native’s recommendations.

Testing with Another State Value

The setState function is technically asynchronous, so the only way to guarantee the component’s state will be changed by the time the snapshot executes is to make the assertions in setState’s callback. However, this introduces a new issue – if we don’t tell Jest we are performing asynchronous operations and then the test terminates before the assertions can run, it will be marked as passing even if the assertions should fail. This actively harms you by swallowing errors and tricking you into thinking everything is fine.

To prevent this, you need to add the done function parameter to your it to tell Jest not to terminate until done gets called. It’s also important to tell Jest how many total assertions to expect. This is another (some may say redundant) way of ensuring the test is marked as a failure if the callback never executes or the test terminates early. For more details about testing asynchronous code with Jest, take a look at their documentation.

Testing Logic Methods on Components

The object that renderer.create returns doesn’t mean anything on its own, this is why snapshot tests need to call the toJSON() method. Similarly, to test a logic method that’s defined on a component, you have to obtain its instance by calling getInstance(). An instance is the same kind of object that you would get if you had a ref to this component, so you can treat it the same as a ref.

Testing setState

Testing that a method sets the component’s state is a super common thing to want to test, but it’s surprisingly difficult to figure out. The Jest documentation makes no mention of it, and online search results tend to assume you’re using the Enzyme library. After several iterations with varying levels of effectiveness and elegance, I have arrived at the following code as the cleanest pure-Jest solution. 

This approach leverages a piece of Jest known as Spies, which is a powerful tool that allows for setting up some very complicated mocking on the fly. In this case, you can use it to monitor calls being made to the setState function. The spy tracks all calls made to its target function, as well as any arguments that were passed in, so all you have to do is make assertions on the arguments it received. 

Note that there aren’t any assertions on the component’s state after the action is taken – this is due to setState’s asynchronous nature. There is no guarantee that it will execute by the time we make our assertions, but this way it doesn’t matter. As long as the function you’re testing makes the call to setState correctly, it has fulfilled its obligations. 

Jest offers many powerful tools that can build some very detailed and complex tests. However, when it comes to these basic React Native scenarios, there aren’t many examples out there.  These examples should help bring your React Native component testing to the next level.