Inspiration
A friend of mine developed an Android quiz game app, and we talked about making an iPhone version. His monetization strategy was entirely ad-based, which matched perfectly with the new Catvertising category. I started looking for interesting ways to combine quizzes and puzzles with advertising.
After some back and forth with ChatGPT about possible ways to incorporate ads into a sequencing puzzle or matching game, I had an idea: what if you were trying to avoid the ads?
At the time, I was reading an Agatha Christie book (a callback to my unsubmitted 2024 Shipaton app) The Secret Adversary. In it, there is a character with a hidden identity who you know is somewhere among the rest of the characters.
And so Adversary was created: one card hiding among the other cards in a matching game.
The basics are simple: it’s a memory-matching game, but it has a twist. There is a Danger card you do not want to flip.
I also managed to incorporate ads in a unique way. More on that in the Catvertising section.
What it does
Adversary is a memory game with a twist.
In a classic memory game, every card has a matching partner. In Adversary, at least one card doesn’t have a pair.
Players flip cards, remember their positions, and try to find all the matching pairs while avoiding the hidden Danger card.
You know upfront that Danger is there; you just don’t know where.
The game has five difficulty levels. Starter is free, while the other four levels are unlocked through a one-time lifetime in-app purchase.
Each level starts with a score of 100. Every mismatch reduces the score by 1 point, while revealing the Danger card reduces it by 5 points. In the fifth level, Extreme, the game ends immediately when the Danger card is flipped.
The goal was to keep the familiarity of a classic memory game while adding a little tension to every flip.
How we built it
Building the basic gameplay was not the main challenge, especially with the tools available today. The more important part was verifying the core mechanic, scoring, and Danger system.
I had considered posting different gameplay options and asking people to choose between them, but I felt that would only go so far. Some parts of the game are difficult to judge without actually playing them, so I created a separate web-based testing page.
The goal was to let people try the gameplay and core mechanic, see whether the scoring felt fair, and, most importantly, whether they understood the Danger card.
People could play directly in the browser, adjust the settings (such as the number of pairs, number of Danger cards, mismatch penalty, and Danger-reveal penalty) and leave feedback through a linked Google Form. That also meant people didn’t need an iPhone or a TestFlight build just to try the idea.
The feedback I received was reassuring around fairness, scoring, and willingness to play another round, which gave me enough confidence to continue building the native app.
At that point, the iPhone version became the main product. I built out the five difficulty levels, local scoring and history backed up to iCloud, and the RevenueCat-powered lifetime unlock.
I also added the Layers SDK in the hope of measuring growth and understanding where installs were coming from.
At one point, I became concerned that Apple might not get to reviewing the app in time, so I started building an Android version as an additional release path. Unfortunately, the Android version is still in the 14 day testing period, and will not be released before the deadline.
Most, if not all, of the actual coding was done with Codex. I also set up a PM-style main Chat that I used to plan the work, create prompts for implementing specific features, give feedback on the UI and every assist with content creation.
Challenges we ran into
One of the biggest challenges was deciding what not to build.
Shipaton was announced right before our planned trip to the Czech Republic. Knowing I wouldn’t have much time to code, I spent the trip exploring different themes the game could take on, such as mystery and adventure.
I was preparing visuals to ask people which themes they preferred when I realized I was asking the wrong questions.
I was asking, “What should the game look like?” before I had fully answered “What should the game be?”
So I scrapped that work and went back to the core decisions:
- Should players know that Danger exists, or discover it as a surprise?
- What should the core identity of the game be? Should Adversary feel like a classic memory game, or should it become something more like a bomb-defusal game?
These questions became part of my Build in Public progress. The feedback I received helped shape the game into what it is today.
Another challenge was around what could be the selling point for a game that has been around for decades. Luckily James from Noise had a great idea with the use of the anti-doomscrolling angle.
Accomplishments that we're proud of
I’m very proud of the fact that I didn’t just “jump into coding.”
The fact that I was on a different continent when Shipaton started probably helped. It gave me time to think about the look and feel of the game, even if I eventually ditched that direction. I spent time thinking about the core idea of the game and posting about it before fully committing to the implementation.
Building the testing site was also a smart move. Even with a small number of responses, it gave the unfinished mechanic a chance to fail early instead of only asking people for opinions based on screenshots or descriptions.
I’m also proud that my posts got people engaged enough to leave tangible, useful feedback.
And even though Codex did most of the heavy lifting, I’m ecstatic that I'll have my first Android app on the Google Play Store. Shipping an Android app is something I’ve wanted to do for a long time.
What we learned
Some of the biggest lessons came from asking people for feedback on social media.
One example was when I asked about the best way for players to discover the Danger card. My original idea was to let players discover it for themselves. However, the responses favored telling players upfront.
One piece of feedback pointed out that surprise only really works once. After the player encounters Danger for the first time, the secret is gone.
Probably the best feedback was getting a phone call from my dad :). He brought up Hitchcock’s distinction between surprise and suspense: surprise stays with people for a short period of time, whereas suspense can keep them engaged for much longer.
Another lesson came from the classic-memory vs. bomb-defusal decision.
The votes were much more in favor of the bomb-defusal direction, but the written feedback gave clear reasons why the classic-memory approach would be easier for people to understand.
That taught me that the most useful part of feedback isn’t always the vote. It’s the explanation behind it.
From the testing site, I learned that the people who responded generally felt the game was fair and were willing to play another round. With such a small sample, I wouldn’t call that validation, but it gave me confidence that I was on the right track with the basic gameplay and mechanics.
This has been much more of a "marketing" journey for me. I'm used to writing code and trying to make it work, so having my main focus be "getting the word out" was a great learning experience - working with editing tools, finding the right video flow, using sound in an engaging way and much more.
And one more thing - for future Shipatons: release the first version of the app at the beginning of August, so I’m not spending the end of the competition stressing about whether Apple will review it in time.
What's next for Adversary. Memory game with a twist
I'm adding another game mode, in which the cards are shown and shuffled at the start. This was a feedback I received from the testing site form. Not sure if it will make it into the latest version.
I’d love to take another pass at creating themes for the game. It would be fun to have Adversary adapt to different events and seasons.
I’ve also been getting feedback about focusing more into the memory aspect of the game. Using the game and the mechanic as a training exercise and helping people improve their memory.
A friend created a Persuasion Audit skill and sent me the report. I've got a lot of opportunities like a small bonus or trial taste of a locked difficulty.
A different direction could be to go back to where I started: investigating how ads could fit into different types of games, and seeing whether I could disrupt other familiar games with a little Danger.
Built With
- admob
- apple-icloud
- chatgpt
- codex
- figma
- layers
- revenuecat
- revenuecatads
- swift
- swiftui
Log in or sign up for Devpost to join the conversation.