My name is Yousef Mahmood, and I’m a full-stack developer. For months, I poured my nights and weekends into a passion project: a polished, feature-rich mobile game called Pixel Pastry. It had a charming art style, a deep and satisfying progression system, and a core loop that I, as a developer, found incredibly fun to build.
It was finished. It was ready. And it completely failed before it ever had a chance to launch.
This isn't a story of pity. It’s the story of a weeks-long fight with a tech giant, the crushing feeling of hitting a geopolitical wall, and how I eventually realized that this "failure" was the best thing that could have happened for my career.
The Dream: Getting Hooked on the Loop
Like many developers, I got the idea after getting hooked on a game myself—the classic Cookie Clicker. I wanted to build my own. It started as a small project just for fun, but I got completely drawn into it. What began as a simple experiment quickly grew into a fully functional game with a deep, modular upgrade system, multiple monetization streams, and a level of polish I was genuinely proud of.
Working on it during nights and weekends, the most fun part for me was perfecting the core loop. That feeling of watching the numbers go up, of balancing the costs and rewards, of designing a system that felt addictive—that was the real reward.
I was especially proud of the upgrade system. To avoid messy, hard-coded logic for over 100 upgrades, I designed a data-driven system in Unity using Scriptable Objects. I could create complex, multi-effect upgrades simply by combining data assets, with zero new code. It was clean, scalable, and a challenge I was proud to have solved.
// An enum to define what triggers the unlock
public enum UnlockType { None, BakerCount, BakerProduction, GlobalDonutsBaked }
public enum Type
{
DpsMultiplier, // Multiplies the baker's personal DPS
DpsBonusFromTotalDps, // Adds a % of the total game DPS to this baker
CostReduction, // Reduces the price growth rate
IntervalProduction // Adds a temporary critical hit chance/damage buff
}
public enum UpgradeEffectType { BakerDpsMultiplier, GlobalDpsMultiplier, DonutPerClickMultiplier }
[CreateAssetMenu(fileName = "New Upgrade", menuName = "/Upgrades")]
public class UpgradeData : ScriptableObject
{
[Header("Upgrade Effects")]
public List<UpgradeEffect> effects; // An upgrade can now have multiple effects!
public BakerNames targetBaker;
[Header("Only used for Global Upgrades (0-9). Set to -1 for baker upgrades.")]
public int globalUpgradeID = -1;
public double globalDPSMultiplier = 0.1; //10%
[Header("Info")]
public List<string> upgradeName;
public List<string> description;
public List<string> spriteName;
public List<double> price;
[Header("Unlock Requirements")]
public List<UnlockType> unlockType;
public List<double> requiredAmount;
}
public enum EffectTarget { Self, Neighbor, Global, AllBakersOfType }
[Serializable] // This is CRITICAL. It allows this class to be part of UpgradeData.
public class UpgradeEffect
{
// --- Effect Type ---
public enum Type
{
DpsMultiplier, // Multiplies the baker's personal DPS
DpsBonusFromTotalDps, // Adds a % of the total game DPS to this baker
CostReduction, // Reduces the price growth rate
ProductionSpeed, // Reduces the price growth rate
IntervalProduction // Adds a temporary critical hit chance/damage buff
}
public Type effectType;
// --- Effect Value ---
public double value; // e.g., 2.0 for a 2x multiplier, 0.01 for 1% of total DPS
public double secondaryValue; // e.g., 5.0 for 5x crit damage
public float duration; // e.g., 5.0 for a 5-second buff
// --- Effect Target ---
public EffectTarget target; // Who does this effect apply to?
// --- Description ---
public string description; // A description of the effect, e.g., "Increases DPS by 2x"
// --- Effect2 ---
[SerializeField]
public UpgradeEffect effect2; // This allows for chaining effects, e.g., a DPS boost that also reduces cost
}
But a deep system isn't enough—it also has to be engaging. To give the game a charming, retro feel and make the progression feel tangible, I hand-drew over 100 unique pixel art icons for the various upgrades. Each one was designed to visually represent its function in the game.
With the technical systems complete and the art feeling great, I was ready to launch. I felt on top of the world...
The Wall: When a Line on a Map Ends Your Project
The trouble started almost immediately. I went to the Google Play Console and paid the $25 developer fee, excited to finally get my game out into the world. That excitement died when I tried to set up my merchant account.
Roadblock #1: "Country Not Supported." As a developer based in Iraq, I was ineligible for a merchant account. This meant I couldn't implement In-App Purchases (IAP), which were a core part of my game's design and monetization.
Okay, I thought. Frustrating, but maybe I can launch without IAP for now. I submitted the game anyway.
Roadblock #2: "Not Enough Testers." Google rejected the game. The reason? I had too few testers in my closed beta (only 15). To meet their new requirements, I needed a larger, more active community before I could even dream of launching.
It felt like a slap in the face. For weeks, I fought it, going back and forth with Google support, trying workarounds, and searching for solutions. But the message became painfully clear: Google's platform is built for big companies with resources, and indie developers like us often get thrown into the sea.
After weeks of this, I was exhausted. I lost all my passion for the project. The code I was so proud of now just reminded me of a dead end.
The Pivot: From a Grave to a Foundation
For a while, the project just sat on my hard drive, a monument to my frustration. I tried a few workarounds, but they didn't work, and my motivation was gone. I eventually uploaded a build to itch.io, not because I expected it to be a hit, but because I just needed to put my work out in the world, to give it some kind of existence outside of my own machine.
Then, after a few more weeks of distance, my perspective began to shift.
I realized the game hadn't just vanished. The code was still there. The design document was still there. And the skills I’d gained were more valuable than ever. The project wasn't a failure; it was a portfolio. The product failed, but the process was a resounding success.
I'm not just a game developer; I'm a full-stack developer who has tried nearly everything—apps, web, AI, and now games. This project wasn't my identity; it was a chapter in my journey.
My Key Takeaways from a 'Flop'
- De-Risk Your Distribution Channel on Day One. Don't wait until you're ready to launch to learn the rules of the platform. Research every legal, financial, and regional requirement of your target app store before you write a single line of code.
- Your Skills Are Product-Agnostic. The ability to design a scalable, data-driven system is valuable everywhere, whether it's for a game, a banking app, or an e-commerce site. The code is the asset, not just the final product.
- 'Failure' is Your Best Marketing Tool. My un-published game is now the foundation for my freelance career, the topic of my first technical articles, and proof of my ability to see a complex project through to completion. Your story is your brand. Don't hide the scars; they're proof you fought.
- Put It Out There, No Matter What. Publishing on itch.io felt like a compromise, but it was a crucial step. It allowed me to close the chapter emotionally and turn the project into something I could share and point to, rather than something I had to hide.
What's Next?
So, while you'll never get to play Pixel Pastry on the Google Play Store, its legacy is very much alive. It's the cornerstone of my portfolio, a testament to my skills as a systems architect, and the catalyst that pushed me to share my story with you today.
If you want to give it a try, here is the version published on Itch.io:
https://youxdev.itch.io/pixelpastry
If you've ever had a project hit an unexpected wall, I'd love to hear about it in the comments. How did you pivot?
Top comments (2)
Thanks for sharing! I don’t believe there’s such a thing as failure when you’re an indie developer. We just call it experience and now you’ve got even more of it 😉
I agree!