Game Design, Programming and running a one-man games business…

An experienced coder’s approach to fixing business mistakes

I was the victim of an email today that was basically an invoice that was wrong. A company that has sent me a wrong invoice in the past has sent me it again another 3 times now, with increasing levels of angry demands and warnings about credit ratings. This raised my heart rate and anger level to extremely high distressing levels, but this is not a rant about how some companies are just awful, that would be too simple. This is more of an investigation into why stuff like that happens, and how software engineering can help you learn how to not fuck up like that.

I have been coding for 44 years now, since age 11. In all that time I’ve only coded in BASIC, C, C++ and some PHP, but 90% of it has been C++, so that’s the one I’m really good at. I don’t even use all of C++, so lets just say when it comes to the bits I DO use, I’m very experienced. This is why I’m using the term software engineering, and not coding or hacking, which implies a sort of amateurish copy-pasting-from-the-internet style of development. I’ve both worked on large game projects, and coded relatively large projects entirely from scratch, including patching, re-factoring and a lot of debugging. I coded my own neural networks from scratch before they were really a popular thing. Anyway…

Take the simple example of my experience today. An invoice is wrong, and sent to a customer anyway. This has happened three times now, despite the customer replying in detail, with sources and annotations and other people copied in, AND including replies from other people at the offending company who openly admit its wrong and will be fixed. Clearly this is a smorgasbord of incompetence, and irritating. But why do companies do this? what actually goes wrong? I think I know the answer: Once a problem like this is finally flagged up (which often involves threats from someone like me to visit the CEOs home address at 3AM to shout at them), the company ‘fixes’ the mistake, maybe apologizes, and everyone gets on with their life…

This is the mistake.

Companies want to ‘fix’ the mistake in the quickest, easiest and cheapest way possible. If an invoice was accidentally doubled, then they ‘go into the system’ (they just mean database) and they halve it. Problem solved, customer happy. Now I don’t give a damn about the sorry state of this company’s awful internal processes, but I am aware of the fact that companies like this try to fix things in this way, rather than the true software engineering way. So how SHOULD it be done?

Before I was a full time computer programmer I worked in IT. I had a bunch of jobs, gradually going up in seniority. I saw everything from ‘patch it and who cares’ mentality (consumer PC sales) to ‘The absolute core problem must be fixed, verified, documented and reported on with regards to how it could have happened’ (Stock trading floor software). I can imagine that most managers think the first approach is faster, cheaper, better, and the second is only needed for financial systems or healthcare or weapons systems, but this is just flat out wrong.

When a mistake happens, fixing it forever, at a fundamental level, will save way, way more time in the lifetime of the company than patching over a bug.

Spending a lot of time in IT support taught me that there are many more stages to actually finding the cause of a problem than you might think. Here is a breakdown of how I ended up thinking about this stuff:

Stage 1: Work out what has actually happened. This is where almost everyone gets it wrong. For example, in my case I got an email for a £1k bill. This was not correct. Thats the error. Thats ALL WE KNOW RIGHT NOW. You might want to leap immediately to ‘the customer was charged too much’ or ‘the customers invoice was doubled’ but we do not know. Right now we only know the contents of the email are wrong. Is that a problem with the email generation code? Does the email match the amount in the credit control database? Until you check, you are just guessing. You might spend hours trying to fix a database calculation error you cannot find until finally realizing the email writing code is borked…

Stage 2: Draw a box around the problem. This was so helpful in IT. Even when you know what you know, you need to be able to define the scope of the problem. Again, right now all we know is the customer ‘cliff’ got a wrong invoice. Is that the problem? Or is it that every invoice we send out is wrong? or was it only invoices on a certain date? or for a certain product? Until we check a bunch of other emails we do not even know the scope of the problem. If its systemic, then fixing it for cliff is pointless.

Stage 3: Where did things go wrong. You need to find the last moment when everything worked. Was the correct amount applied to the product in the database? was the correct quantity selected when entering the customer’s order? was the amount correct right up until the invoice was triggered? Unless you know WHERE something went wrong, you cannot work out WHAT or WHY.

Stage 4: Developer a theory that fits all available data. You find a line of code that seems to explain the incorrect data. This needs to not only explain why it screwed things up for cliff, but also explain why the invoice for dave was actually ok.

Stage 5: Test a fix: You can now fix the problem. Hurrah. Change the code or the process and run it again. Is everything ok? If so you may be preparing a victory lap but this is laughably premature.

Stage 6: Reset back to the failed state: Now undo your fix and run it again. Seems redundant doesn’t it? Experience has taught me this is vital. If you REALLY have the fix, then undoing your fix should restore the problem. Maybe 1 in a 100 times it will not. The ‘random’ problem just fixed itself for some indeterminate period. Your fix was a red herring. A REAL fix is like a switch. Turn it on and its fixed, turn it off and its broken. Verify this.

Stage 7: Post Mortem: This is where you work out HOW this could ever have happened. This is actually by far the most important stage of the whole process. If you just fix some bad code, then you have just fixed one instance in one program. The coder who made that mistake will make it again, and again and again. The REAL fix is to make it IMPOSSIBLE to ever have that error again. This takes time, and analysis. The solution may be better training, or it may mean changing an API to make it impossible to process bad data. It might mean firing someone incompetent. It might mean adding a QA layer. Whatever the mistake was, if you do not go through this stage, you failed at the task of fixing the problem.

Coders and organizations that work like this have fewer bugs, fewer mistakes. They need smaller QA teams, and less time devoted to fixing mistakes and implementing patches. Their complaints department is tiny, and yet still provides great communication, because there are hardly any complaints. In short, companies that run like this are awesome, popular, profitable, and great places to work. Why is everywhere not like this? Because it requires some things:

  1. A culture of giving people fixing problems free reign to follow the problem everywhere. If only the department that sends the emails is allowed to get involved in complaints about email, database errors or coding errors will never get fixed because they CAN never be fixed. The phrase ‘not my department’ needs to be banned.
  2. A culture of accepting that someone is STILL working on a proper fix, even after the complaint has been handled and the customer is happy. When there is a bug, there are TWO problems to fix: the customers bad experience AND the company process failure that allowed this. Managers who pull people away from bug-fix post-mortems to fix the next thing right now are a curse.

Of course your mileage may vary. Be aware I am a hypomanic workaholic who works for himself so my ‘advice’ may not be applicable to everybody, but I hope this was interesting and thought provoking anyway. Too many coders are just copy-pasting from stack overflow or asking chatgpt to quickly patch their bad code. Working out how to fix things properly is a worthwhile pursuit.

Do not use liquidweb web hosting. Ever.

I recently bought a new domain, to point to a folder on my server. Sounds simple right? But SIX PEOPLE over the course of four days at my host (Liquidweb) clearly had absolutely no clue how domains worked (despite selling me one), and totally failed to achieve this trivial, laughably simple task for which I pay them monthly. I got about a dozen emails to suggest various ways in which they didn’t understand, or had no idea, or couldn’t do it. They wasted hours of my time.

I fixed it myself in 40 minutes, giving up all hope that anybody at liquidweb had a clue on how to do their job.

And today I discover that 9 months ago they just put my price up 50% without bothering to email me. What utter assholes. I do not understand how people running businesses think that this is the way to treat your customers.

I am actually considering shutting down this blog, my forums and website and just only being on X.

Do not, under any circumstances, ever, ever consider using liquidweb. They are a complete trainwreck.

Democracy 4 comes to consoles!

Hello party members!

It is with great pleasure that we announce that Democracy 4 will be coming to Nintendo Switch, PlayStation, and Xbox consoles on 5th June 2024. With the help of our partners at Auroch Digital, Democracy 4: Console Edition has been built the from the ground-up with controller play in-mind to bring that feeling of Democracy 4 that we all know and love to home consoles.

Democracy 4: Console Edition is available to pre-order and wishlist via the following links:

Nintendo Switch – Coming Soon

PlayStation – https://store.playstation.com/en-us/product/UP5595-CUSA44561_00-0098238017880105

Xbox – https://www.xbox.com/en-US/games/store/democracy-4-console-edition/9N84BGD6VZ8K/0017

In Democracy 4: Console Edition, you will:

Choose to lead one of the following countries: USA, UK, Japan, France, Canada, Australia, Spain, Germany, Italy, or South Korea

Select cabinet ministers that align with your vision for the future of the country

Introduce new laws or tweak existing ones to carry out your plans for change

Deal with random events that can either increase or decrease your favourability with the public

Lay out your manifesto as election time approaches and aim to deliver a campaign that will take you to victory!

Auroch Digital are no strangers to porting PC titles over to home consoles, as they have done with titles such as The Colonists, Megaquarium, and Ogre, as well as developing their own titles such as Warhammer 40,000: Boltgun, Mars Horizon, and Brewmaster: Beer Brewing Simulator.

Having the chance to bring Democracy 4 to home consoles was something which intrigued the series’ creator, Cliff Harris. Cliff says: “As the developer behind Democracy 4, I’m genuinely thrilled about its upcoming release on consoles through the work of Auroch Digital. It’s been a long journey focusing on the game’s development for PC, and seeing it expand to a wider audience on consoles feels incredibly rewarding. The prospect of reaching more players and allowing them to experience the intricacies of political simulation on different platforms is both exciting and gratifying.”

Porting Democracy 4 over to home consoles is something which excites Auroch Digital’s Studio Director, Tom Rawlings. Tom says: “Bringing the game Democracy 4 to console has been a personal mission of mine – not only it is a great strategy game that deserves to have more opportunity to be played, but it is on a topic of central importance to people too. So, I was really pleased when

Positech Games were open to working together to make this happen. The team have worked hard to make it possible, so do check the game out, run a country, and try not to get assassinated!”

Democracy 4: Console Edition is available to pre-order and wishlist on PlayStation and Xbox consoles now, with the Nintendo Switch version available to pre-order and wishlist in the near future. The game will be released on 5th June 2024.

For more information visit: https://www.aurochdigital.com/democracy-4-console-edition

Is it harder to sell games on steam in 2023?

I had a chat today with a very knowledgeable fellow indie game dev. He asserts that it is way harder for a game dev to sell a game on steam in 2023 than it was in the past. My gut feeling was that he was wrong, but who needs guts when you have data and analysis? lets find out.

I dug around to find out what I could. There are various sites listing the number of games on steam, but the most interesting data I found was listing the games released on steam, but also breaking down the more recent years into games that have certain community features enabled, and games that did not. Steam requires a certain amount of sales and interest in a game before you can do things like have trading cards. I suspect this is a good proxy for what games are serious commercial releases as compared to student games, hobby games, and the sort of games that are made part-time on a low budget. The question I am interested in was whether or not there is more ‘genuine competition’ for full time indie game devs now. With this is mind, I think its far to ignore games that don’t meet the trading card threshold.

This required some stats mangling by me, because it took a while for steam to realize it needed to introduce this measure, so unless you fade-in the effect of the threshold sensibly, there would be a sudden peak and then dip. I did my best, and ended up with a chart that looks like this, for games released:

This goes from 2006 to 2023. I’m too useless on a laptop with office365 to get the horizontal axis right :D. This definitely shows a huge jump in the number of games, but this is clearly not the whole story. Steam launched just in English, with just valves own games. It took a while to add ANY new games, and in that time the number of users shot up. People might not remember but I recall how much everyone HATED steam initially. People really resented having to install it.

Over time, obviously steam has become huge, and more global. I dug out some stats that gave me the peak concurrent users for each year. Not perfect, but an interesting proxy for steam usage, and must be vaguely related to how many active users the platform had… Anyway, adding that to my chart allows me to then calculate the ratio of peak concurrent users to games released, which gave me a new chart:

I think this is more interesting. That peak is around 2012, and the low point to the right is 2017-2019. This data is far from perfect, because obviously people can continue to play games from previous years, and the accumulation of games is definitely a factor. However, I would argue that the tendency for people to buy games released a few years ago is also good news for developers, as it means your game will have a long tail and continue to generate revenue.

So a very rough hacky analysis suggests that peak-time to release a game on steam may have been 2012. It got a fair bit harder since then, but has been getting easier for the last few years. Obviously this is only a tiny bit of the picture though, as there is so much more to consider.

Steam sales changed a few years ago, due to laws regarding refunds. Because steam was forced to offer a refund in the event that a recently purchased game was suddenly cheaper, the whole concept of flash-sales and one-day spikes during steam sales became history. Gone are the days where you would have your game 90% off just for one day. That may have influenced how gamers value and buy games. I do wonder if the average price of ‘professional’ games has gone up since those days? Gamers like the refund policy, but it also made steam sales more muted, and more predictable, with less crazy discounting.

I do think its VASTLY easier to make games now. There is Unity and Unreal. There is also Twitch, Twitter and YouTube. Streaming is a huge promotional opportunity for game devs, Steam now has reviews, and video uploads, and trading cards and achievements. These have not been around for ever! Plus steam supports a ton of languages, payment providers and currencies. The available market for your PC indie game is now colossal. Big hits are now HUGE hits, because there are just so many more people available to see your game if it is good. I do not have concrete data for just how much money the first 100 indie games on steam made, but I’d wager its not much by modern standards.

I’m guessing Factorio made a LOT more than Rag Doll Kung Fu. Ditto Dyson Sphere Program, Prison Architect and RimWorld. It may seem insane that there was a time when just releasing a game on steam got you front page coverage for DAYS, but there actually were not that many people seeing that page! For one thing, not everyone had broadband, and certainly not uncapped broadband.

On balance, I think making a game in 2024 is hilariously easier than making a game in 2008, because of the tech, the price of tools, the ubiquity of tutorials and communities. When I started, I had to buy physical books about C++ and game engines. I followed the blogs of every indie game dev online, because there were really not that many of us.

The flip-side is that it is much harder to get noticed as a developer in 2024. I accept that. But this is just a change, not a deterioration. All that time you save not having to work out how to code a particle system in 2024 needs to be put into promoting your game to people. Its the same amount of hours for the same reward, you just have to work differently. Maybe. YMMV.

Some food for thought: 14.43% of Steam users are from the United States. There are more than 30 million Steam users in China. If you are making a puzzle-platform game or visual novel, and its only in English, then yes, you might struggle a bit. I find that ‘indie dev twitter’ (which I mostly ignore because its all identity politics), is overwhelmingly made up of US or UK game devs making a small unity game in English. They generalize massively from that experience, but I don’t think its the whole story.

Your corporate communication policy is bollocks

I’ve had the misfortune recently of having to deal with two gargantuan and completely terribly run clusterfucks of inefficiency recently here in moving my mothers TV network from one company to the other. I will not bore you with the details, but the process of quitting company A and enabling company B was, at a conservative estimation, 100x as difficult, and costly (to them) as it should be assuming a simple baseline of a competently run company.

At the same time, I am also running my little one man games business, AND overseeing the construction of a solar farm, which involves at least 5 different companies including mine. Having all this happen at once makes for an interesting comparison, and its even more interesting to do this while I’m also reading the Elon Musk biography, with lots of discussion of Twitter/SpaceX/Tesla etc.

Its no great revelation that big companies are often run badly. I think the situation has got worse, especially in the UK (or is that just the western world in general?) in recent years. We seem to have completely forgotten about free markets and competition, and the role of governments in ensuring that oligopolies and monopolies do not exploit their market position, and this has made things much much worse.

Having dealt directly with both google and facebook, I can tell you both companies are incredibly obtuse, bureaucratic disasters with absolutely no idea how to do anything any more. Its impossible to communicate with them, or get anything fixed. From the point of view of a customer (in this case for ads), both companies seem 100% computer-run, with no humans at all. At any level.

Running a company is about efficient communication. Companies that cannot communicate with their employees, or customers degenerate into inefficiency. The most obvious example is when something is fundamentally broken, but you, as the CEO of a company do not know about it. With my mothers TV, there was a simple mistake on their part. They had set a limit of phone call costs at which point the TV and phone would be disconnected. You could pay the costs to re-enable the account, but their website failed if you tried to pay in the first month, before the first bill. So there was an infinite loop on non payment, and non-connection.

In any sane organization, there would be actual humans who would respond, understand the problem, and fix it immediately. Instead it took 3 days and about 6 hours of my time, numerous furious phone calls, dozens of emails, a complaint to the government regulator, you name it. I was not a happy customer… But me being an extremely angry customer, and therefore the complete destruction of any potential goodwill is only 1% of the cost to the company. They now have to respond to, and deal with an official complaint with a government regulator. They have tried to call me to apologize 6 times, and left messages and sent emails. This has taken them time, effort, money. In theory the regulator could fine them, costing even more time, effort, money.

The fix is obvious, but unfashionable. You simply hire staff to deal with complaints. The obvious rebuttal is that this would cost money, but the cost of NOT dealing with a complaint will always be higher than the cost of dealing with one.

The compounding error for large organizations is that even when their staff do communicate with customers, they are not empowered to do anything. Nobody you ever speak to on a phone call to a large company has any discretion, authority or power to do anything. They have to fob you off with excuses or use tools like long wait times, annoying hold music and no ringback, and infuriating AI chatbots pretending to be typing… all to hide the fact that even if you get to talk to a human, they cant fix the problem.

My email address is cliff at positech dot co dot uk. I make no secret of it, and give it freely to people who ask. I don’t put ANY barriers between me and people who want to talk to me. Its my decision whether I reply, and some emails I do decide not to respond to, but the idea of making it hard for customers and potential customers to contact you, when you SELL things, is just insane. Amazingly, I am not overwhelmed by email, nor annoyed by it. Many, many times, I have got emails that have been VERY helpful, or profitable, that I may never have got if I tried to screen my contact with the general gaming public.

One of the best sizes for a company is one person. This doesn’t just mean ‘smaller than 2’, its an actual qualitative difference. There is something special about a company where every role is handled by the same person. My game designer and game programmer and engine programmer and QA lead are all me. That means we can have a 4 way meeting to evaluate the potential of a idea while I’m making coffee. We communicate between us at the speed of thought, and there are no egos. Sometimes the game designer gets their way, sometimes the QA dude. Its all me.

This is absolutely fundamental, and something very few people seem to really understand. Going from a one person team to a two-person team not only doesn’t make things much faster, it may actually make everything slower. Maybe much slower. Even if there are no egos and both people get along, and they never interrupt each other and never disagree, communication moved from the speed of thought to the speed of speech, or typing. Incredibly slow.

Communication between everyone working towards a common goal is absolutely vital. The idea that people in dept A cannot talk to people in dept B is lunacy. Strict unskippable hierarchies and org-charts are nuts. In so many companies, barriers to internal and external communication are put up by managers who want to be left alone. The impact on the company’s success is colossal, but individual managers in huge megacorps are not invested in the success of the business so rarely care.

It should, in theory be absolutely impossible for a single individual like me to commercially survive making and selling video games when huge companies like blizzard and epic exist. And yet here I am. I think a huge part of this is due to the huge huge gains in efficiency when a company is basically a single individual. It MIGHT be possible to replicate it with an extremely driven, loyal team of super-like-minded people led by someone who is super-inspiring, but thats amazingly rare. Maybe space/tesla are one example.

So whats the conclusion? Corporate communication is critical. Its almost impossible for it to work in large companies, unless you fight hard to ensure information flows freely. If you are thinking of growing your company think very hard if thats the right decision. And communication with customers is vital. You want to hear when there is a problem immediately, so its fixed immediately. Putting barriers between you and your customers is insane.