How to Start a Business
Software

Analyzing Failure and Success : What Works and What Doesn’t in Game Development [Journey in Coding] #9

Angus Cheng
October 8, 2024

Previous Post|The Reality of Solopreneur Life: The Ups and Downs of Software Development and Side Projects [Journey in Coding] #8

Failed Projects

Let’s Get Fiscal (2011)

The second game I created for the Xbox Live Indie Game store. Instead of making a sequel to Get Rich or Die Gaming I made a beat ‘em up similar to Streets of Rage 2. I spent over a year on the game and I think it made about $2000 USD.

I can’t verify that number because the Xbox Live Indie Game developer portal is dead. I do recall spending about $5000 USD on art assets for the game and not covering those costs.

Rock Bottom (2012)

The third game I created for the Xbox Live Indie Game store. I worked with a friend on this one, his job was to write the story and I would code the game. My friend wanted a 50/50 split of the profits, but I convinced him to take 20% instead.

This was a big mistake on my part. If you partner with someone and don’t give them an equal share they’re going to be demotivated and wont do very much work. That’s kind of what happened. If we went with a 50/50 split we could have met up everyday and worked on the game together.

Anyway the game came out terrible. There are videos of this game out there on YouTube. I believe it sold even worse than Let’s Get Fiscal, and cost even more money to make.

The Rise of Gaddafish (2012)

The fourth game I created for the Xbox Live Indie Game store. Personally I think it’s a better game than Rock Bottom, but it sold terribly. It turned out to be the worst selling Xbox game I made.

KILL THE CLEAN SHAVEN (2013)

This was an XNA game, inspired by Contra Hard Corps. The main character is called Rugged McBeard. He is part of a paramilitary organisation known as The Beards. Their one objective is to “KILL THE CLEAN SHAVEN”. Personally I think the name of the game is really cool.

During development I put up a few clips of the game on YouTube. I abandoned this game to make Girlfriend Plus. I should probably open source the assets and the code since I don’t plan to work on it anymore.

International Racing Experts (2013)

Also an XNA game. Following the success of Tokyo Hosto I planned to make another visual novel. It was a straightforward project because I already had the engine and the relationship with artists.

However I abandoned it to work on Girlfriend Plus.

Sim Kim (2015)

I hadn’t worked on a game for a few years, so I felt like making a visual novel. In 2014 I spent a year working at a game studio with the Unity game engine. It seemed like the logical choice for a game so I used Unity to create Sim Kim.

Sim Kim is a visual novel where you play as Kim Jong Un. You have to help him get through the problems he faces as the leader of North Korea.

You can play Sim Kim for free on itch.io

I just played it for a little bit, it’s not bad and more or less finished.

Cleared for Takeoff (2017)

I got a job offer from Credit Suisse in August 2017, but the job didn’t start until October 2017. So I had two months of free time. I used those two months to work on a game where you play as an air traffic controller. The cool thing about this game was you had to talk to play this game, just like a real air traffic controller.

It’s kind of a cool idea, but I didn’t finish it. I also made this game in Untiy

Alexa Girlfriend Plus (2018)

When I was at Credit Suisse a guy called Sandeep asked me to give a five minute talk about something.

“What do you want me to talk about Sandeep?”
“Doesn’t matter.”

I decided to talk about how to make an app for Amazon Alexa. I went through a tutorial online, and then deployed it to AWS Lambda. Then I did a five minute talk about it.

I thought “Hey that’s pretty cool, I should make Girlfriend Plus for Amazon Alexa.” I took a character from Girlfriend Plus and hired a voice actor to record all the audio.

Players would start a conversation, and then choose how to reply using options. It might go something like this:

  1. Game: Hi [PLAYERNAME] how are you? Reply with A: Doing good or B: I am mad.
  2. Player: Reply with B
  3. Game: Oh no sorry to hear that.
  4. And so on.

Interestingly I deployed this Alexa App to AWS Lambda, which is a serverless system. I used Lambda because the guy in the tutorial used lambda and also because Amazon had some sort of sweet deal. It went something like:

“If you host your skill on Lambda, we’ll give you tons of AWS credits. Way more credits than you need to pay for Lambda. You can use those excess credits on other AWS stuff.”

Is that sweet deal still in effect? It is. Is my skill still running? It is! This is really cool, I deployed it in April 2018 and have not done anything since then. It’s still up and running.

Every month since I launched this skill I received between $50 and $100 USD in AWS credits. I could go through my AWS bills and total up all the credits I gained, but I don’t really feel like doing that. I’d say I got about:

$50 * 6 * 12 = $3600

Is this a failure? Maybe not, but I wouldn’t classify it as a success either.

Plelarious (2020)

I liked to think of Girlfriend Plus as a chat application simulator as well as a fake girlfriend app. I started thinking “What if I made an Instagram simulation game instead? Surely people would like that as well.”

Well I started making it, and I used an advanced programming technique known as Event Sourcing. Banks use event sourcing to calculate your bank balance. Instead of storing it as a number, they store all the credits and debits in your account. Then they sum them all up and tell you the balance.

There are benefits to using Event Sourcing but it complicated my design and made working on Plelarious hell for me. I still think Plelarious is a good idea, in fact now with generative AI it’s a mega excellent idea. If I was going to work on it again I’d like to partner up with an awesome UI developer.

Girlfriend Plus Web (2020)

I worked at a crypto exchange from February 2020 to November 2020. After I left I started working on Plelarious again. I realised it was too complicated, and I wanted to build a subset of the app. The idea was to use the Plelarious code base to make Girlfriend Plus for web browsers. This is what I was working on right before starting Bank Statement Converter.

The biggest problem with Girlfriend Plus Web is that you can’t really send notifications. One of the best things about Girlfriend Plus on iOS/Android is the notifications.

Another problem was, I was sick of working on this application. I started working on Girlfriend Plus in 2013, I had spent way too much time on it.

CantoRead (2021)

CantoRead is an iOS application that helps you to learn Cantonese vocabulary. I created it for myself. Often I would see unfamiliar Chinese text around Hong Kong and want to look up the characters.

CantoRead lets you take pictures, and then it uses OCR to recognise the Chinese text, then it looks up the characters and phrases in a dictionary. From there you can make flash cards.

It wasn’t a bad idea, but Pleco kind of lets you do all this apart from the OCR feature. Soon after launching CantoRead iOS added really high quality offline OCR. That kind of killed my motivation to work on CantoRead.

CantoRead did go live on iOS but very few people downloaded it. It’s still available but I recommend using Pleco instead.

Solana Chess (2021)

A friend came up with a blockchain game idea. The idea was something like “People stake money behind a chess move. The move with the highest amount of money behind it is executed by the game. If the side you stake money behind wins the chess game, you take a portion of the money staked by the losing side”.

The game we had in mind was chess, but I’ll use tic tac toe in the following example because it’s simpler.

Board #1 - X turn

[ ] [ ] [ ]

[ ] [ ] [ ]

[ ] [ ] [ ]

  • User #1 puts $100 behind [1,1]
  • User #2 puts $50 behind [0,0]
  • User #3 puts $50 behind [1,1]
  • Placing time elapses
  • [1,1] is chosen.
  • User #2 gets $50 back because their move was not chosen
Board #2 - O turn

[ ] [ ] [ ]

[ ] [X] [ ]

[ ] [ ] [ ]

  • User #4 puts $200 behind [0,0]
  • Placing time elapses
  • [0,0] is chosen
Board #3 - X turn

[O] [ ] [ ]

[ ] [X] [ ]

[ ] [ ] [ ]

  • User #1 puts $100 behind [0,1]
  • Placing time elapses
  • [0,1] is chosen
Board #4 - O turn

[O] [ ] [ ]

[X] [X] [ ]

[ ] [ ] [ ]

  • User #4 puts $100 behind [1,0]
  • Placing time elapses
  • [1,0] is chosen
Board #5 - X turn

[O] [O] [ ]

[X] [X] [ ]

[ ] [ ] [ ]

  • User #1 puts $100 behind [2,1]
  • Placing time elapses
  • [2,1] is chosen
Board #6 - Game over

[O] [O] [ ]

[X] [X] [X]

[ ] [ ] [ ]

  • X has won the match.
  • We sum up all the stakes from the O side.
  • $200 + $100 = $300
User #1
  • Put $300 behind chosen moves
  • Gets 300/350 or 85% of the O stakes.
  • Gets $255 of the O stakes
  • Gets $300 back. All of their X stakes.
User #3
  • Put $50 behind chosen moves
  • Gets 50/350 or 15% of the O stakes.
  • Gets $45 of teh O stakes
  • Gets $50 back. All of their X stakes.

Example over, please stop thinking about the example. Theoretically it’s possible, but then a question arises. Why would anyone want to do this? To make money? If so, then surely you’d just use a chess playing AI to win this?

I figured that would happen, but I didn’t really care, I wanted to make it for the hell of it. Well we chose to code this in Rust for the Solana blockchain. Let me tell you, writing Rust is very difficult. You need a brain the size of the earth to do it. Writing code for the Solana blockchain is also mega difficult.

I could code this thing as a Web 2.0 app in about a week, but in Rust and Solana? No chance. The difficulty of the tech sucked the fun out of it and I gave up.

Solana Chess never went live.

Detective Benny (2021)

Another visual novel game I started working on. This one was written in JavaScript and used the Phaser game engine. I barely worked on this and failed to launch it.

NFT Watches (2021)

I talked about this a bit in the month by month chapters. This took up a lot of my time, and we failed to launch it before the NFT market collapsed. I don’t think I’ll do another project like this again. The main problem with it was I didn’t believe what we were selling was of value.

Project Management Sim (2022)

A game where you play as a project manager. Your job is to gather requirements from users, pass them to the developers and then verify what the developer made matches your ‘specification’.

My original idea for this game was to make a game where you’re a project manager, but the way to beat it is to do nothing. If you try antod interfere in any way you kill the project.

This game is 80% done, I should publish it on itch.io as is, maybe even open source it because I don’t think I’m going to finish it.

SocialMediaMonitor.io (2023)

I talked about this in the January 2023 chapter. Of all the failed projects, I think this one had really good potential. We operated it for less than two months, but we had quite a lot of users. If we kept working on it and talking to the users we would have figured out what to build.

This one failed because I was working with people who had full time jobs. You just move so much slower when you’re working in your free time.

Launched but didn’t make any sales.

AngusForm.com (2023)

This one failed because I automated processes that people didn’t really want automated. Another thing is the UI for AngusForm.com looks so untrustworthy.

I automated two Hong Kong Transport Department forms and one form for the Hong Kong Police. Then I bought ads on Reddit. People panned me in the comments for that Reddit Ad.

AngusForm.com is a useful website if it automates forms and processes that lots of people want to do. My new thinking with AngusForm is:

  1. Let people upload a form. PDF or series of image files.
  2. Let them define the fields they want filled in on that form.
  3. Generate a web form from the fields they defined in step two.
  4. Let the users share that web form

The difference here is I let the users choose what forms they want automated. I can even hire people to use AngusForm.com to create forms.

AngusForm will provide printing/mailing/payment collection services. I still think it’s a good idea and I think I will come back to it at some point.

Customer Support Sim (2023)

A game where you play as a customer support representative. I wrote this in Kotlin and Raylib. The game is playable, but not very fun. I mainly made this because I wanted to create a game in Raylib.

Successful Projects

Get Rich or Die Gaming (2010)

Around 2009, when I was at university I didn’t have much to do, so I spent a lot of time playing adventure games from the late 80s and early 90s. I especially liked the Leisure Suit Larry series. At the time adventure games were not cool anymore and developers had stopped making them. This made me sad so I thought like this:

“I’ll make my own adventure game!”

Somehow I found out about a piece of software called Adventure Game Studio. It had everything I needed to make an adventure game. I started writing the story for a game I had called “Business Adventure” and did some coding with Adventure Game Studio.

But then I was offered a programming job. I took the job, and put “Business Adventure” to one side.

What a charming young man I was.

At the end of 2009 I found out about a game library called XNA. I watched a series of free tutorials on how to make a 2D game. The series was really cool because it went really slowly and the instructor did every step on camera. So I followed along, understood everything and thought “This doesn’t seem very hard”.

I had a ton of free time at work, so I started coding Business Adventure in C# and XNA. My reasoning was “If I use XNA I can sell it on the Xbox 360, that would be cool”.

A friend of mine convinced me to change the name from Business Adventure to Get Rich or Die Gaming. I used to work on the game, and then bring it into the office to show my colleagues. They would play it, tell me it sucked and laugh at me for how unintuitive the controls were.

I changed stuff based on their feedback. When I felt it was done I submitted it to the Xbox Live Indie Game Store for review. Around this time someone told me not to submit it. I think they were worried it would get bad reviews or people would tell me it sucked and I would get sad. That kind of thinking didn’t really make sense to me, the most fun part of making a game is seeing other people play it. It went on sale on October 14 2010.

I don’t have the raw sales data, but I do have this graph. It went on sale for 80 Microsoft Points, which equates to about $1 USD. In the first week it made about $7000 USD. Pretty exciting for a 22 year old. Since then I have released it on Windows Phone, Windows 8 Store, iOS, Android and Steam. I’ve permanently lost a lot of the sales data, so I can’t really say how much it made in total.

I think it has brought in roughly $100,000 USD over the last fifteen years.

Tokyo Hosto (2013)

My sixth and final game for the Xbox Live Indie Game store. I reckon it’s the best one I made. It’s a game where you play as a young guy starting out his career in a host club in Tokyo. In March 2013 I went to Tokyo with a friend. One day we went to some weird suburb and my friend took part in a Magic the Gathering tournament. He did really well so we were there all day.

I had nothing to do, so I sat at an empty table and wrote the story for Tokyo Hosto. I wrote the majority of it in the two weeks I was in Tokyo.

I had worked with an animation studio in Cebu, Philippines on two other games. I hired them again for this game. Since they were pretty close by I thought “Why not go for a holiday and meet the team”. It was a great trip, they were really nice and we spent a lot of time hanging out.

Here’s a picture of me and the head of the studio Philmore at Kawasan Falls. The animators did a great job, I think the game came out well but wasn’t a mega success. I lost the sales numbers, but I’d say the game made about $20,000 USD.

Girlfriend Plus (2014)

In 2013 I was paying for a hot desk at a co-working space in Hong Kong called Cocoon. Cocoon was more interested in incubating start-up companies than selling office space. Because of this, they offered free ‘business analysis’ meetings. Someone asked me if I wanted to take one so I said yes.

I talked with a woman called Joyce who I think was an executive at a diamond company. I told her about the games I had been making. She said “How do you know how well a game will sell when you’re making it?”

“I have no idea, you just make it and see”
“I see, well then I think you should try to increase the speed you make games. Now it takes you three months to make a game, but if you can get it down to one week you’ll be able to have more chances at success”

This was an interesting idea, and I wandered around thinking “How can I make a game in a week?”. The problem is I needed to get a lot of art assets made. Things like music, voice acting, animation, concept art, background art and writing.

Could I make ten games at once? Probably not, I didn’t have the money or the project management skill to do that. Around that time Tinder was a really popular app and I was thinking:

“Could this app be turned into a game? What about a game that’s basically a Tinder simulation?”

I was also checking out Android apps to see what apps people were downloading. Virtual girlfriend apps were very popular, they had mega download numbers. I played a few of them, and they were all terrible. I started thinking:

“If I make one of these, but good, people will download it”.

Then one day I got the idea, a Tinder simulation virtual girlfriend app. I knew exactly how I wanted it to be. Later that day I met up with two friends and we went jogging. I told them about my idea. They both told me it was an excellent idea. One of them was a guy called Hubert who is a programmer. He said “Angus I will help you make this”.

Hubert and I coding Girlfriend Plus at Cocoon

Hubert has an amazing work ethic. We would meet up at 8 AM in the morning, and work until 6 PM at night. Hubert would sit at the computer with perfect posture, smashing in excellent code in silence. At the time we both had zero Android development experience. I was amazed at how much quicker Hubert learnt Android development. I learnt through tutorials and videos, while Hubert read the official Android documentation. I found the official documentation very difficult to understand.

We started coding in October 2013. The original plan was to launch the app with ten virtual girlfriend chats. Which would require:

  1. Hiring ten models
  2. Writing ten scripts
  3. Hiring ten voice actors
  4. Coding the app

We started off by hiring writers to write out the script for a character. The script would include picture messages and audio messages. The writers would define what they wanted in a picture message. They might write something like “Leilani is at the gym, she is stretching while taking a mirror selfie”. The script would have about twenty picture messages.

Once the scripts were done we would hire voice actors to record the audio messages. We would also hire models, and ask them to take photos to match the picture messages descriptions in our scripts. This turned out to be a big ask. We hired a lot of models, but very few of them took the photos we needed. This was holding everything up, so we flipped the plan around.

Instead we hired models, and paid them for whatever photos they already had. Then we would pay writers to write a story around the photoset we had. This went a lot better.

Getting Lean

In early December I read The Lean Startup. I actually read about half of it, that’s the leanest way to read a book. The book made me realise the importance of launching quickly. Originally we planned to make ten characters and then launch the app.

The lean Startup made me realise we should launch with one character, and then add characters over time through app updates. Then we could react to what our users said about the app. I suggested this to Hubert and he was down with the plan.

I spent the rest of December writing Java, fighting Gradle and editing the content files.

Launching

We launched Girlfriend Plus on January 10th 2014. The version we launched had one character, and no payment processing code. People downloaded and played the app which was encouraging. About a week later we added a character players could pay $0.99 to unlock. On the first day a few people bought that character.

Revenue

Across various app stores, it has made over $300,000 USD.

Tech Stack

Programmers love debating about how to architect their applications. I like to use old and boring technology.

Amazon Lightsail

Amazon lightsail is a cheaper version of Amazon EC2. It has a lot less features, but I don’t really need any of those extra features. I get my virtual machines, static ip addresses and managed database instances from Amazon Lightsail.

Lightsail is cheaper than EC2, but it’s still kind of expensive. A friend of mine has suggested I save some money and rent bare metal servers on Hetzner instead. I’m thinking about it. I’ll get more performance per dollar, but I might have to colocate some stuff. One idea is to put the build server, and dev servers all on one bare metal server. That’ll save me some money.

Postgres

I used to use MySQL, but people seem to think Postgres is better so I tried it out for Bank Statement Converter. It seems fine, been pretty happy with it. I don’t use any of the cool features.

Kotlin

I learnt Kotlin when I worked at Credit Suisse. It’s a really nice language, and interoperates nicely with Java libraries. I wrote the backend in Kotlin.

Typescript

The front end is coded in Typescript. It’s nice to have types.

Ktor

Ktor is an HTTP framework, I chose it because someone recommended it to me. It has mostly been fine, although it can be very complicated. It is developed by JetBrains.

Stripe

I use Stripe for payment processing. I’ve been pretty happy with them.

Ansible

I use Ansible to set up new virtual machines, create builds and deploy builds. I much prefer it to Kubernetes and Docker. I don’t like using Kubernetes.

It all works, but runs a little bit slow.

Buildkite

I use the Buildkite to trigger builds and to deploy builds into dev or prod. At Credit Suisse we used to use TeamCity, it was fine, but expensive and very complicated. BuildKite is a lot simpler and a lot cheaper.

NextJS

I didn’t choose to use NextJS, it was something Dom chose. I think it’s okay though. I knew how to make UIs using React, so learning NextJS was easy. It performs pretty well, the page load times are fast. When the NextJS builds fail I have a hell of a time debugging them.

Netlify

I’ve liked Netlify for the most part. Recently a few horror stories around bandwidth have freaked me out. I am considering moving some of my static websites over to Cloudflare.

Brevo

I use these guys to send transactional emails. Brevo’s sign up process is a lot simpler than SendGrid’s. Their free tier is very generous as well, I’ve only just moved off their free tier.

My Working Style

TODO.md

In the root of whatever project I’m working on I have a text file named TODO.md. This is what I use instead of issue tracking software like Jira or Trello. Everytime I think of something to do I put it in the backlog section.

When I start working I grab some items from the backlog and I put them into the section under today’s date. When they’re done I put an x in them. I use the items as commit messages as well. This means I don’t need to think about commit messages.

I don’t know if this would work for people working in teams but it works for me. The benefit is I don’t open a web browser to mark something as done. This helps me stay in the programming zone. Once I open a web browser it can be really tempting to check out what’s going on on Twitter, Instagram or some other website.

Streaming

For other apps I’ve worked on I would stream myself coding on Twitch. This helped me focus a lot. When you’re live streaming your screen, you aren’t going to waste time on the internet.

I didn’t do this when developing Bank Statement Converter. A lot of the work I do  is improving results for specific bank statements. This requires me to open up the bank statements. It’s personal information and I cannot live stream it.

Going to the office

In theory I don’t need an office. I don’t meet clients, and I don’t have any employees. However I still rent a hot desk at a coworking space. I don’t like spending too much time at home. It makes me go a little bit crazy. It’s also nice to separate work time from relaxing time.

I do work from home quite a lot, but I use my office as much as possible. This helps me, but I know a lot of people who work much better at home.

Trunk Based Development

I use Git, but I do not use branches. Partly because I’m the only one coding the app, but also because I’m a fan of Trunk Based Development. When I worked at Credit Suisse we used SVN and we committed everything to one branch.

It went really well. We didn’t fight over Pull Requests, we didn’t have merging pains. We also did a lot of pair programming. I believe that pair programming eliminates the need for pull requests.

Automated Deployment

I use BuildKite to automatically test and build the app every time I commit. If the tests pass the code automatically gets deployed to dev. At any time I can specify a build number and manually trigger a deployment into prod.

Copycats

I publish live sales data on Indie Hackers. This has led to a lot of people writing articles about Bank Statement Converter. It has also led to a lot of copycats. Sometimes these guys email me asking about technical implementation details.

I don’t really like the copycats, but I do understand they’re allowed to copy me.

If you’re thinking about copying me, I suggest instead you send me an email, I can give you some of my cool app ideas. Maybe we can work on them together on one or you can just have the idea and go nuts.

me@anguscheng.com

Data

Written by Angus Cheng (Link)

BankStatementConverter.com

Original post : BankStatementConverter.com

*Curious about app development and entrepreneurship? Check out the "Journey in Coding" series in Asia Tomorrow!

How I Came Up With an App Idea & Turned the Product into a Business [Journey in Coding] #1

From Concept to Launch: The Birth of Bank Statement Converter [Journey in Coding] #2

Why My App Didn’t Make Money Initially and What I Learned [Journey in Coding] #3

A Cool Idea and Costly Lessons: The Roller coaster Ride of My App Development [Journey in Coding] #4

“Be a Doctor” : Grueling Growth, Discrimination and Rethinking My Startup [Journey in Coding] #5

From Marketing Hiccups to NFT Distractions : Lessons from a Founder's Real Struggle [Journey in Coding] #6

Sales, Software, and SaaS: The Journey from the Client's Request to Closing the Deal [Journey in Coding] #7

The Reality of Solopreneur Life: The Ups and Downs of Software Development and Side Projects [Journey in Coding] #8

0 Comments

Active Here: 0
Be the first to leave a comment.
Loading
Someone is typing
No Name
Set
says...
4 years ago
This is the actual comment. It's can be long or short. And must contain only text information.
(Edited)
Your comment will appear once approved by a moderator.
No Name
Set
2 years ago
This is the actual comment. It's can be long or short. And must contain only what if text information.
(Edited)
Load More
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Load More

Writer

Angus Cheng
BankStatementConverter.com
|
CEO
Founder of BankStatementConverter.com