Decisions and war stories
Short notes on problems I hit and how I solved them. More notes in Russian on my Telegram channel Kindexation.
- 2023
A roach that gets tired: modelling race biology
ATP, oxygen and lactate instead of a speed stat — and an admin simulator to balance it.
- 2019
Game balance when you can't patch the items
In a blockchain game, released assets are permanent. Our first season flooded the economy — and fixing it took a new mechanic, not a patch.
- 2019
Three DDoS attacks, one $200 ransom note — and why we paid Cloudflare instead
Blockchain Cuties was attacked in June 2019, blackmailed in September and hit again in 2020. We never paid; each time the defence got stronger.
- 2018
Debugging production at 130 km/h
Production broke, the team was stuck, and I was in a car crossing Poland. A laptop, a tunnel through my office PC — and a query that ran far too many times.
- 2018
Splitting a game between the chain and the server: signatures, a watermark and plugins
How Blockchain Cuties kept NFTs on-chain and everything else off-chain — with one-time signatures, a “minimum sign ID” that kept contract storage flat, and plugins instead of proxy upgrades.
- 2017
Platform risk: when free traffic ends overnight
Our publisher lived on free Google Play traffic. Then Google changed the rules.
- 2016
From days to hours: cloning a game skin in Unity by rewriting GUIDs
Reskinning a match-3 game took days of manual work and still broke. One editor script that rewrote GUIDs in .meta files turned it into a couple of hours.
- 2015
Hiring juniors through a meetup and an office tour
How a game-dev college group became a hiring pipeline for our content team.
- 2015
Tuning match-3 difficulty with one number: win rate
A sawtooth difficulty curve, win rate as its unit, and production data that told us the right number of moves for every level — without another playtest.
- 2015
An onboarding checklist where every line has an owner
Two new hires with the same name on the same day — and the checklist that made onboarding boring, in a good way.
- 2014
A level editor you paint with — and an argument about “feeling” the game
Turning a store-bought prefab into a palette-based match-3 editor with a Play button, and why a designer doesn't need final art to make a playable level.
- 2014
One engine, many games: how a small studio shipped 160+ titles
Seven genre engines, one shared core, and a new game in two weeks.
- 2014
The $100 asset that we rewrote completely — and that paid off
A match-3 template from the Unity Asset Store, a full rewrite, and a game that outperformed our flagship at a fraction of its cost.
- 2013
BotWars: letting the game test itself overnight
A test scene where bots spawned and killed each other all night — and the bugs no human tester would ever catch.
- 2013
Designer-first configs: a month that turned a tester into a level designer
Rebuilding Steam Defense's configs for the game designer, with scenarios as real code.
- 2013
The GG button: everyone on main, and a button that screams
A physical button that yelled when someone broke the build — and what trunk-based development cost and gave a small team.
- 2013
Measure first: making Steam Defense run on an iPhone
Frame rate on iPhones was the worst. The fix wasn't in the game logic but in shaders, transparency — and a grenade icon stored in Full HD.
- 2013
An engine built for a mechanic nobody needed
Steam Defense's engine was built around branching paths before the game design was settled. The players never used them; the graph stayed in the core and taxed everything.
- 2013
Shut up and write down the criticism
Independent testers tore our tutorial apart. We stopped defending it and rebuilt it.
- 2006
muo.lv: twelve years of running a game I didn't have the source code for
A private MuOnline server turned into a full product: market, economy, payments, my own anti-cheat, a packet-filtering proxy, ops automation and a bot that ran events.
- 2003
I listened to the champion's lecture — and won with a 2 MB bitmask
A tournament where programs play each other, a lecture on minimax, and a precomputed table of 16 million positions.
- 2002
“Best algorithm ever”: binary search and an IOI gold
My coach kept insisting one algorithm was the best of all. At IOI 2002 one task needed it again and again — along one axis, then the other — and it gave me 100 points.
- 2001
Doom RF: a birthday present that took two weeks — and a year
A 4-player hot-seat deathmatch in Pascal, a bank-switching trick to beat the 64 KB video window, and the reason I like starting projects on February 28.
- 2000
Space War 2K: one engine, three games — in the year 2000
A single executable that became a space shooter, a top-down tank game or a Worms clone depending on the folder you pointed it at — and a video player written in Pascal.
- 1999
Where “KindeX” comes from
A Pascal compiler error that turned into a nickname for the next 27 years.
- 1999
Space War: how two little ships taught me trigonometry
Reading someone else's source code, discovering sine and cosine on my own, and the first game people actually liked.