Developing '256 k'

DEBRECEN, Hungary, Oct 29, 2019 (Ákos Diviánszky)

After being removed from the store for 16 months, 256 k is available again. Until now I kept convincing myself that it's water under the bridge, however the fact that rereleasing it makes me feel so good shows I could never really disconnect from this app. Perhaps I will be able to smile again when thinking about it.

Born to be lightweight

I don't remember when the idea of a really tiny footprint app concieved in my mind. I mean, I could never stand bloated software, which is like 99.9% of all software, including most of mine and yours. I'm unsure why I'm like this but a couple of things come to my mind. I started programming finding a way around the limited resources of the C64. I have lived with a father filling up our home with things others dumped. Also, I was born early weighting 2 humble kilograms.

Flasback 2015 January

Invictus Games, the company I co-founded was in a miserable state. To survive a bit longer, every other developer were laid off, but 4 out of the 5 recent app releases had failed. Still, I was confident that in an unpredictable way God would help us - it happened before. It was then when I shared the idea of developing dwarf star, the smallest possible app on the App Store, with procedurally generated, nice visuals and music, where the simple gameplay, sound and visuals live together. I was pretty sure that even if gamers would ignore it masses of iOS developers would get it for $1 paying back the development costs, followed by more tiny app releases, competitions and a special section for sub 1M apps on the store. The idea was not well received, my business partner did not believe in dwarf star, and tried to convince me to abandon this crazy idea. Still, my other project was on track without me, and I started exploring how should I proceed with my precious idea. I've stated it's an R&D project I couldn't estimate so instead I planned with a 12 man month time box.

I didn't know that I didn't know how much skill I would need to accomplish the task, and now it looks strange how big is the list of tools and topics I first met during the journey: Xcode, openGL, shaders, raycasting, git, Twitter, basic music theory, subtractive synthesis and the Mach-O file format.

How on earth could I miss all that before? Well, even though I started as a programmer my role slowly elevated as the company grew doing less then no programming. Years passed and then Invictus started to require less and less higher level tasks, and in 2014 I returned to programming to reduce the gameplay complexity of Daytona Rush. I recognized that Unity is not my piece of cake.

Building the foundation

Watching 4k and 64k intros inspired me but I had no idea if these mobile devices are capable for something similar. I had an iPhone 5 at that time, the 6 being the newest model. Fortunately I found ShaderToy which helped a lot in learning what is under the hood of those beautiful visuals. Usually raycasting it was. So I dropped a couple of nice but small and smooth shaders from ShaderToy into my app and realized raycasting isn't for mobile yet: the attempt to have parallax layers where only the small strip of pixels need to be calculated frame by frame failed.
I also realized how big leap Apple made from the 5 to the 5S in terms of GPU performance, and decided to have the 5S as the minimum config. I wish I had stick with this decision.

To get out of this pit I watched older 4k demos and Elevation struck me. The articles of IQ, the coder behind ShaderToy and Elevation helped me learning a lot so greetings to him! I managed to put together the geometry of the procedurally generated terrain then started to explore the world of synthetic audio. The TonicAudio library looked lightweight, had nice code and an Xcode project file, but missed instrument patches. To build my instruments I looked at Csound's sources and experimented with Pure Data and SuperCollider. Also read a lot of Synth Secrets articles on Sound on Sound.

Soul depleted

I've been enjoying programming again a lot. I've ben learning a lot. Actually I've been getting addicted to the project, and believed in it's sucess more and more. Did more and more overtime, get home later and more like a zombie. I felt any other task at my company and in my family was just getting in my way. I've talked less and less with my business partner, since every time I wanted to share my joy about my progress, he kept responding with how miserable the whole idea was. Eventually he started stating he is doing his best to move the company forward, while I do hardly anything beneficial.
Fighting with him and the unhealthy amount of work depleted my soul tank. I still believed in the project but realized I could not carry on like this.

First I talked to him listing all the achievements I brought to the company lately. I've been lucky, I had my growing developer team working on two successful projects. Afterwards he stopped poking at dwarf star. Then I measured how much of my time went into C-level tasks and team management. It took half of my time so I decided to promote one of the team members to a PM, and after a month I've been spending 70% of my time on dwarf star. I'm still happy I made that decision and still have the same company structure. I've started using the Pomodoro technique to manage my time and it throttled my addicted rush down to a much more enjoyable development pace. A year passed and me, the company and my project all survived.

Time's up

2016 started with testing the first playable versions and finalizing gameplay, then all energy went to making it as nice as, as small as I could, and it took lot's of trial and error. Owning an iPhone5 influenced me so much I changed the minimum hardware to it. I've been working alone. Only one QA guy supported me, otherwise noone cared at the company. The twitter profile I opened as the indie way of promotion did not draw the attention of other developers. In September I run out of the time planned for the project. The app was almost as small as you can get it on the App Store, it was nice enought for me, sound was decent, melody a bit boring but OK. I felt something is still missing, but could not come up anything that could be pulled off quickly. I felt tired and also thought Invictus was nice letting me work on my project for a year, it would not be fair to abuse this goodwill. I removed half-done ideas, fixed critical bugs, prepared marketing materials and released dwarf star by the end of the year.

There were no sales on the first week, so on my birthday I made it free, which yielded a handful of downloads every day mostly coming from crosspromotion from our successful apps. I released a few small updates, simpified gameplay, on a plane trip to China managed to push it below 256k and renamed it accordingly, but nothing helped. Being unnoticed for one and a half year, I agreed to remove it from the store mid 2018.

Did I learn anything

Only pain can write my unerasable memory, so here goes the painful stuff hopefully I'll handle better next time:

I never decided if dwarf star is going to be a 256k demo or a 256k game

A demo should have aimed for the latest hardware, using as much resources as possible showing off never seen things on mobile.

As a mobile game it should be more conservative with energy, compatible with older devices, development resources spent more on gameplay than visuals and sound. For a game, size limit should not have been a concern as long as it is below 10MB, freeing up more development time. The App Store also does not care about radically saving app size. Zero padding and signature are much bigger in the final binary than actual code, and there's packaging metadata too.

The idea of closely tied sound and visuals were implemented poorly

Tempting to say if only I had more time for playing with this and polishing but honestly I still have no workable idea how should I connect the too.

Smiling again?

Last week I took my unused iPhone 5 for a recharge to keep it's battery from dying. I found 256k on it, and all those emotions come to me. How could I escape? How could the app escape? I asked my business partner if we could transfer the app so I could release it, and he said yes immediately. I instantly felt that this could cure all that was hurt during development. I opened a dev account, he transferred the app right away, and within minutes 256k got rereleased.

256 k on the App Store