Unity and the Art of Self-Evisceration

Let’s Talk “Integrity”

Last month, Unity Technologies announced that they were changing the licensing terms for their Unity game engine, which they claim is used in the development of more than half of the top games for mobile, PC, and consoles. They boast that they have 1.5 million creators and two billion monthly end users. Well, maybe they had that many.

The Problems

Under the new terms, Unity were going to charge publishers up to $0.20 per installation of their games; note that this is not per sale, but per installation, which means that creators pay regardless of whether or not their game is bought or even played. The term “install bomb” came into broad usage immediately as shorthand for a method where nefarious actors could damage a developer financially by repeatedly or widely (via bots or networks) installing a trial version (and, not coincidentally, profit Unity).

This first problem was that it potentially turns game marketing on its head, where the free-to-play model (currently the only way to make money on mobile) is damaged, free trial versions are now costly, giving away software for charitable purposes is no longer viable, and the economics of other marketing models, such as bundles or console subscriptions, are disturbed. Ironically, this was introduced under (now former) CEO John Riccitiello, who infamously called game developers “some of the biggest f***ing idiots” for not focusing on monetization early, and then his company screws any early monetization plans.

The second problem is that professional developers (i.e., those making money or disinclined to advertise for Unity) are already paying at least $170 per month per seat (according to the website; it had been somewhat less when I considered licensing Unity a few years ago), with the calculation being that this was the cost of development to avoid backend expenses. Now, the backend costs are added and even if they replaced the monthly cost (which they have not), those companies have already paid that licensing fee; it is a sunk cost, so they are paying twice.

The third problem, related to the above, is that the installation charges are retroactive; even though they are started accruing in January, 2024, they applied to games that have already been completed and published. Companies could have moved on, no longer be using Unity at all, just selling a game they built in the past, and suddenly be on the hook to pay a company that they no longer have a business relationship with, or in the case of acquisitions, perhaps a company that they never had any kind of agreement with.

The biggest problem, however, is that Unity promised game developers that the game engine would remain royalty-free, built the Unity ecosystem based on that promise, and then reneged in a very big way. To be clear, this was not merely implicit: John Riccitiello made it very clear in his quote to GamesIndustry.biz:

If you’re a seven-figure developer, you can afford $75 a month, but if you’re not, if you’re just getting started or just choose for artistic reasons to give your games away for free, or if you’re a hobbyist screwing around or a student, this is free. You get the full power of Unity 5 for free. There’s no royalties, no f***ing around. It’s simple. That’s really what we’re announcing.

Well, they are definitely introducing a form of royalties (but worse) and are definitely “f***ing around”. To be clear, the costs would only apply after a game makes $100K, but the simple fact is that no professional game developer targets making less than that. Students benefit Unity greatly (and probably still don’t plan to make no money), and amateurs who are just making games as a hobby would simply move to a different engine that is truly free.

The Fallout

I don’t dispute that Unity Technologies had the legal right to increase costs and impose additional charges, especially after surreptitiously changing the licensing agreement (although I think the claim that they can charge retroactively for previously built games is tenuous, at best). I think that the manner in which they went about it was critically flawed. I am certainly not alone.

The backlash from the announcement was immediate, strong, and (appropriately) unified. Developers of indie games, who were arguably the most affected, were quick to condemn the pricing change, and many threatened to leave Unity, some stated they had already decided to move their games to a different engine, and the developer of one popular game even posted that they would remove it from sale when the policy took affect (although they later recanted, saying that it was a joke, but I remain unconvinced). Terraria developers Re-Logic donated $100,000 to Godot and FNA, two open-source engines, alternatives to Unity. Meanwhile, nobody outside Unity leadership tried to justify the new fees.

Unity tried, likely in vain, to quell the potential revolt against their game engine and, definitely in vain, to repair their damaged reputation by backing down on some of the changes. The revenue cap for not getting charged is being doubled to $200K, games which make less than $1M in “trailing 12-month revenue” will be excluded, and the fee will only apply starting with the next version of Unity, which will not ship until 2024 (at the earliest). They also gave an alternative option of a straight 2.5% revenue share (pure royalties) based on self-reported data. (To be honest, I find the concept of explicitly reporting revenue data to a tool manufacturer to be perverse.)

John Riccitiello was also “retired”, which step, to be frank, was way overdue. That should have been done well before this little debacle took place, but once it did happen, he should have received his marching orders within days or hours, not a month later. To be fair, it is not clear that he was behind this mess; it may have been forced by the soulless profiteers on the board of directors. As CEO, though, his ouster was an absolute minimum.

My Relationship with Unity

I personally have no skin in the game, nor does SophSoft, except insofaras Unity decided to eviscerate themselves before the SophPlay System™ was ready for external developers; we really could have had a boost from 1.5 million creators looking for a new home.

The company does not use Unity for its own projects, only for client work (and even then, not for a while now), and I do not particularly care for it. I know Unity fairly intimately, now, because the team I lead at DAQRI, the Advanced Concepts Group, was responsible for the development and maintenance of the Vos Extension for Unity, essentially the Unity SDK for the Smart Helmet and Smart Glasses. More particularly, I personally ported most of that SDK (with the assistance of a very talented colleague for the 3D mathematics) to run on hardware using an entirely different operating system, so any existing project would work with a simple setting change and rebuild.

Despite this knowledge of Unity, I find that I much prefer the “old school” approach of writing code and, importantly, being able to identify and enumerate all of the processes. I certainly appreciate the democratization of game development that a more visual engine provides, especially as I have watched designers and artists produce some wonderful prototypes without requiring a programmer, but I find that it doesn’t work as well for me.

About Integrity

Integrity is, literally, central to our company motto: “Quality. Integrity. Fun.

When we decided on this motto, we actively discussed the meanings and intent of each word, and in particular, the dual meanings of “integrity” and how we intended both. The first definition that usually comes to mind involves adherence to principles and values, honesty, ethics, and forthrightness. We want the company to be the business equivalent of a “person of character.”

The second definition, that is less common, is related to being complete and solid. We intended this meaning to apply to the company’s self-reliance, specifically in its production approach, being able to perform any (and all) aspects of game development, from concept and design, to programming, artwork, audio, and writing, through quality assurance, packaging, and publishing. (To be honest, marketing was the only development skill we have never really mastered.)

Our interpretation of this second definition was why we never tied ourselves to an external game engine (Unity, in this case, but there were several earlier options as well). To maintain corporate integrity, we would never commit to an arrangement where an external entity, particularly a money-grubbing conglomerate, could directly harm our interests. Developing in Unity binds a company to external actions and decisions, since there is no quick alternative should things go wrong (which we always articulated as “disappears tomorrow”); this is why the Unity policy change was so impactful to many developers. There is no way to quickly move a game developed in Unity to an alternative, so you can become a victim. On the other hand, if any major tool we use, say Visual Studio or Photoshop, were to disappear tomorrow, it would be an inconvenience but the code and artwork would still be usable; we would only lose the time it takes to switch tools.

Of course, Unity also badly violated the first definition of integrity. Making a promise of a royalty-free engine and then, deliberately, making unannounced changes in the licensing agreement to allow royalties and installation fees, and then enacting (or trying to enact) such additional costs is a high stakes “bait and switch”. The fact that it can be argued as legal does not make it ethical, and it definitely is not. The fact that this whole story arc unfolded under one CEO makes it that much worse, since the hypocrisy and unfair treatment cannot be explained by a signaled change of direction. Had Unity been acquired by another company with vastly different goals, one should prepare for such a turn of events, but for the most part, most people don’t consider an IPO a form of corporate takeover, though they probably should.

I contend that no company was ever purchased (including via IPO) to benefit the customers. Game developers are the customer here, and Unity’s actions signal their obvious intention to take as much profit from them as they can get away with. In this case, I think that they reached too far into their pockets and got caught, red-handed.

Conclusion

If Unity truly just wanted to get funding to improve the game engine, it could have signaled that policy change, consulted with its customers, rolled out a workable new policy and license agreement starting with the next version (not forcing anybody to upgrade), and then made tangible improvements to the new version. Game developers could make the choice between shiny new version with bells and whistles (and royalties) or the status quo (with the inevitable slow technical decay). I would even have planned to cut the older version loose, totally free or (better yet) open source, at some point a couple years down the road. They did none of that.

Instead, they blindsided customers with new, unworkable, and retroactive fees, against explicit promises, as an obvious consequence of attempted profit-taking for investors, not any concerns for their customers nor the end users that they claim (but do not service). I have no doubt that some hobbyists will keep using Unity because it is “free”, but those who harbor hopes of eventual success, or care about integrity, will likely look to other engines. Students will still learn Unity and other engines, but professors who currently focus primarily on Unity should be reducing this emphasis (and increasing emphasis on Unreal).

Professional game developers, however, will turn from Unity in droves. Some have already begun porting their projects in development to alternative engines. Some will hold their noses and continue with Unity for current projects, due to the cost of switching engines, but then use another engine when starting future projects. A few will determine that their processes are too dependent (unfortunately) on Unity and will continue with them rather than bear the expense of porting everything to a new engine.

The fact is that Unity no longer has any significant advantage over Unreal Engine, which has a reputation for better technology and a more stable platform, while Unity is known as the engine of low quality games and, now, a major lack of trustworthiness. As many professionals switch to Unreal, and Godot and others improve through additional support and users, the Unity community which has been building for years will deteriorate. Unity Technologies will be repaid for their greed by a substantial loss of value in their core asset.

Although it is not always (read: rarely) the easy path, is sometimes nice to see that our decision to commit to integrity can prove the correct choice. 😉

Drawing a Bar

Mourning the “new normal”.

Back in the days when I bowled in a league and, frankly, back when people actually scored on paper with pencils, players on our team used to occasionally draw a black bar after a frame on their row of the scorecard; this would indicate where some significant change was taking place. It could be switching balls or adjusting technique but seemed to most often just denote that this was the point where they determined that they would increase focus and concentration. (The unwritten rules seemed to be that nobody said exactly what the bar meant to them, and that one did not use more than one per game, preferably no more than one per series/night.)

I was thinking back to this because the idea remains affixed in my mind, and I sometimes would conceptually draw a bar after an event or a period that was less than satisfactory for me, for whatever reason. Well, the last nearly five years have been far less than satisfactory to me, and I have come to realize that this is going to be the default situation going forward, so I am mentally, and publicly, drawing a bar under this period of my life. This is less disruptive than yielding to the impulse to burn my old life to the ground, and less painful (but also less immediate) than having Cher slap me twice in the face and scream, “Snap out of it!” 🙂 (Moonstruck, 1987)

Clearly, my mourning for my wife is not going to end anytime soon. It is not that I have not been getting development done during this tough period; I have been fairly productive. In fact, despite a difficult start to the year, I have already completed all my client goals for 2023, made significant inroads into our company product goals, and have a clear vision moving forward. Apparently, I have also been putting on a brave face, such that a friend recently described me as “a happy person”, which is definitely not how I actually feel.

What is going to change is my attitude. I will continue to push forward, but no longer with the false expectation that I will ever recover from the trauma. In the original spirit of the black bar, I am going to try to increase my focus and concentration, pursuing my game development goals without apology or justification. I will endeavor to entertain and educate those who are interested in what I do, but I intend to be, ultimately, only accountable to myself. I will use my intimate knowledge of mortality as a motivation to get things done.

I went to a small industry event in Chicago last week, the first such event I had attended since the pandemic, and it was refreshing and revitalizing. I did a little bit of networking, and I met a number of indie game developers, and they helped put things into perspective. Not only were they facing similar issues to me (sans the death of a soulmate), but many, if not most, were desperate to complete a game, whereas I have dozens under my belt. When I showed somebody one of my released games on my phone, they (earnestly) responded, “Cool!” Nobody there looked down on casual games nor the fact that is (in part) what I enjoy making.

Thus, be it resolved, I am going full steam ahead to make games that I want to make, to support and educate others who want to pursue their game development dreams, to disdain the naysayers, and to thrive in my chosen field so that I can live the kind of life that I want to live for as long as I am privileged to live it. 👍

Apple Doesn’t Care About Games

Tell us something that we didn’t already know.

In his (not so) recent article in The Guardian, I was an App Store games editor – that’s how I know Apple doesn’t care about games, a former App Store editor, Neil Long, confirms facts that we knew to be true, even obvious, through our experiences with game submissions.

The fundamental conclusion, that Apple doesn’t particularly care about games, is self-evident. Apple is not a game company, and they don’t value games as a way to sell hardware, or increase prestige, or whatever the hell Apple’s mission is these days. Oh, right… their primary mission is increasing shareholder value, so they have no immediate incentive (and very little foresight) to invest in nor properly support the mobile game ecosystem they created “by accident“.

The article confirms what we already surmised, from a “woefully understaffed team of app reviewers”, to comical submission failures, to generally making whatever changes seem to bring in the most profits, regardless of the effects on their customers, game publishers, or the long-term health of the entire system. They don’t see a reason to address the fact that the median income of an iOS game on the App Store is, literally, $0; as long as a few games make them loads of cash, they do not care.

This is, of course, why Apple did the calculus and determined that it was considerably less expensive to reduce commissions to 15% for most game publishers (which costs them absolutely nothing for the majority of games) than to lose their monopoly on iOS sales. (Honestly, I don’t actually know how many “publishers” have signed up for the App Store Small Business Program to get the commission reduction, since a seemingly large, and growing, number are non-professionals.)

I could speculate on the theoretical issues that will be an increasing problem for the App Store in the future, but instead I will mention the very real issues that are happening right now. First, the economics of mobile games (for both Apple and Android) are no longer generally viable without manipulation techniques. A handful of games are making millions of dollars per month (or even per day), but the vast majority do not earn enough in their lifetimes to cover the cost of development. There used to be developers advocating a “mobile first” design strategy, and now I hear nothing about this approach; I do hear about companies deciding that it is not worth the effort, and I know that is a very active discussion point for our future games.

On the other hand, despite the ostensibly strict submission and approval process, Apple is allowing the App Store to be inundated with multiple copies of essentially the same game, submitted by “different” publishers. In some categories I have explored, it is easy to download just a few games and find at least two that are obviously based on the same source code, with only minor graphical revisions (or else cloned so closely as to be counterproductive). I don’t know the actual business model (whether it is a larger company flooding the market, or somebody selling source code packages, or amateurs just submitting sample game applications from some tool or another), but the result is that the App Store experience is getting steadily worse. I love the fact that a 12-year-old with talent (as I was when I got started programming games long before any of this was possible) can gain valuable experience by publishing their own game on this platform, but when every game is either a first project, a clone, or a product with a 6-figure marketing budget, there is little value to be found.

Here are the questions that have to be asked by professional developers:

  • Why should we commit resources to developing a game for iOS (or Android) when the chances of profiting are very slim?
  • What incentives do we have to update and improve released products that have not recouped costs on this mobile platform?
  • Why should we develop for a platform where discoverability is such a problem, and getting worse all the time?
  • What incentives do we have to bother to remove a “zombie” product (i.e., one that earns nothing) from the App Store once published?
  • Why should we bother to support a platform whose owner so clearly does not care about us nor our support of their platform?

I do not have any tangible solutions to suggest (publicly) at this time, primarily because changes are up to Apple and they are unlikely to listen to me (based on every previous interaction). In general, though, as the article says, “Apple could have reinvested a greater fraction of the billions it has earned from mobile games“, and further, it could be seen to actually care about those of us who work hard to make a living developing games and, in the process, supporting their platform (and bottom line). You know, any reasonable change that does not make our lives more difficult or potentially cost us more money to compete would be a start.

2023: Year in Preview

Given that 2022 was challenging, and then the first part of 2023 has been a disaster, there is no choice for SophSoft, Incorporated and Digital Gamecraft® but to make (the remainder of) 2023 a much better year. We are working to be somewhat more focused, and I am willing to push enticing projects to next year or later to keep a clearer direction now. This should be a year of resilience, recovery, and great progress.

Digital Gamecraft logo

Product Development Goals

The priorities for our major internal development projects have changed slightly from last year, but these same six projects top the list.

  1. Unannounced Gamecraft Classics™ product – this project is on the brink of being revealed (and I have dropped hints 😉 ), but we are waiting until a specific milestone is reached, so we can confirm certain features. This is a traditional game title that has been under planning and development, intermittently, for decades, but it was moved to the top priority late last year as a point of focus for production on multiple platforms. We hope to have an announcement soon, and initial releases before the end of this year.
  2. SophPlay System™ – this product combines libraries, tools, standards, and procedures into a complete development system for creating robust games on multiple platforms, and it has been in use here for more than 25 years. The primary work on this project at the moment is in support of the above project, with the fundamental new features being improvements to 3D rendering and cross-platform support.
  3. Unannounced productivity tool – this product has been under development for, now, 33 years, though obviously not continuously. Because progress on this ground to a halt last year, yet we managed to muddle through with existing processes and workflow, this whole project has been dropped slightly in priority this year. It is still massively important for the long run, but the decision was made to use more resources on the above projects in the short term.
  4. Unannounced console title – this is a game title that (perhaps unusually) focuses on accessibility and inclusion. The initial phase of product development is for PlayStation 5, and the product directly benefits from SophPlay improvements made to support the higher priority project, while also serving as a test platform, helping to confirm that these improvements are generally beneficial.
  5. Unannounced reference website – this is yet another project that has been in the conceptual and prototype design and development phases for ages. It is given this high a priority now as it helps support the highest priority project, and it also gives me a great deal of excitement and purpose, but as noted last year, it is still in search of a viable business model.
  6. Demolish! Pairs – this product has been available in its initial form since 2013 (on iOS, 2018 on Android). We refreshed the iOS versions in late 2021 and the Android version in early 2022. We still have an extensive roadmap that includes a free-to-play version for Android and a massive (2.0) redesign with additional platforms, which plans we have not abandoned, but have somewhat deprioritized. Currently, this title doesn’t quite earn enough to justify the time it takes to bring up the sales reports; its primary benefits are the exercising of SophPlay and demonstration of our various development capabilities.

There is a certain amount of interaction among these items, especially between the top two projects, which are being developed/improved more or less in parallel. However, for this year, if we can ship initial versions of one new product, on some platforms, which requires associated improvements to SophPlay, I will be pleased. If we can get much of that done in the first half of the year, allowing us to make significant progress on the other listed projects, that would be awesome; that is the target.

Client Development Goals

Right now, we have two active clients for whom we are doing product development work. However, unlike last year, when I posted that we were not seeking more clients, the financial hit we took means that we are now, in fact, seeking additional opportunities to increase our funding and replenish the coffers to enable more time to be spent on our own projects. If you or someone you know needs game development assistance, especially programming and production, please check our SophSoft site and contact me.

For Goodsol Development, we pretty much decimated the roadmap, in a good way 😉 , leaving few projects from last year to roll over into 2023; however, we also have not yet determined a solid plan for the new year, so I can only say with confidence that a new update for Pretty Good Solitaire Mac Edition, with 900 games plus 100 bonus games, will be released fairly soon, since that is what we are currently developing. One could extrapolate previous patterns to guess what else might be updated and/or released this year, but it would not be a surprise that some products and platforms perform better than others, so there may (or may not) be a narrowing of focus there, too. Hence, beyond the product currently in production, I cannot officially say what else to expect.

For Scooter Software, we are just finishing an internal update that completes all of the core development for a feature that could potentially be added to Beyond Compare. (Like the previous update, there are enough “moving pieces” that finalizing the deliverable is taking longer than anticipated.) After that, our plan calls for an official alpha version that expands to a full implementation, and then a beta version that is feature complete. That said, the process for actual integration (if/when that happens) is very deliberate and outside our influence, so it will likely be quite a while before the public sees it.

General Development Goals

There are several dozen general development tasks on the list, including categories such as marketing, education, and research, in addition to many small projects that advance the business. This year, though we will perform as many of these tasks as possible, I am narrowing the focus to three priorities in particular:

  1. Blogging – this is reasserting a commitment to greater openness and transparency via blog posts in 2023. I want to get back to posting more about development topics and not solely business plans and exercises in marketing (time permitting).
  2. Continuing research into 3D graphics – this is the effort to support SophPlay improvements, which feed into all of our games going forward, and includes API design for cross-platform functionality. With OpenGL, Direct3D, PlayStation 4 and 5, Vulkan, and other APIs to support (eventually), this is a monumental task.
  3. Pitch deck and company bible – these documents give information about the structure and purpose of the company and its various divisions. Like this blog post, writing and editing these documents provides clarity of vision, which is a foundation of growth and, simultaneously, provides continuity should the remaining company principal (i.e., yours truly) become unavailable.

Business Goals

Our financial runway has been shortened significantly, so proper execution of the plan in place is more critical, thus the business priorities are (still):

  1. Substantially increase business income – clearly, the primary way to do this is to release new products, so that is the main focus, but increasing client work may also be necessary.
  2. Resolve outstanding business paperwork – organization and review of all business paperwork, and probably some consultation with our attorneys, should go a long way toward peace of mind.
  3. Advance home/office renovations – this will provide benefits such as additional safe and secure storage for equipment and documents, as well as a larger space for testing console and AR/VR products (not to mention a nicer place for breaks when nature calls).

Taking over the world is still in the cards. 🙂

Personal Goals

My personal goal is to make small, but consistent, steps toward an even better life. I will continue to be a strong presence in my grandchild’s life (as they get old enough that the number of enriching activities available greatly increases), and I will continue to exercise, enjoy nature, read more, play games, and write for myself.

I expect to find more ways to improve my outlook and mood, and after trying loads of different things recently, with varying degrees of success, I can confirm that developing games does as much as almost anything else for that improvement.

Conclusion

As always, the company has loads of work to do, on our own products, on client projects, and on support functions. Everything is in place to increase income significantly and then the foundations are sound to begin to grow again.

Most importantly, we have to acknowledge where we currently are and not spend a lot of time looking back, instead drawing a bar under the past and only moving forward.

Onward, Ho!

2023: Prologue

Due to the struggles of 2022, and the particular effort to get back to “normal” operations, I ended up working right through most of our annual shutdown period, when I should have been relaxing and unwinding in preparation for a strong start in the new year.

I emerged from this burnout risk directly into the anniversary of my wife’s tragic death (4 years ago), which has a way of negatively affecting mood and productivity long before one consciously realizes that the date is approaching.

Having already cleared my schedule, rather than pushing on an internal project, I chose to use the next couple of weeks to regroup, which was only partially successful. This “break” segued into necessary preparations for a quasi-vacation, previously scheduled.

I was then out of office, and even mostly out of the country, for the rest of January, returning with a case of “cruise crud”. Once that was shaken I was ready to get back to development, but I did not have a suitable period of time to catch up with my backlog (which I also underestimated).

February 6th was the first day officially back in the office, and I immediately set to work clearing the backlog of messages and responsibilities that had accrued in my absence. It took me the rest of the work week to get everything caught up, so I decided to return to proper routine and take time to reset over the weekend.

On February 13th, I started the day enthusiastically programming (finally!) and made great progress. I reached a good “stopping point” in the afternoon and switched over to some operational matters. I was wrapping up customer support (and had gotten to the part where I was just interacting with my friends/customers online) when I heard loads of emergency sirens, and then some police vehicles sped by (~25 yards/meters from my office window) with full lights and sirens blaring.

It was shortly after that point that I got a message that there was an active shooter on the Michigan State University campus. While I was looking for more information, a “shelter in place” order was issued (definitely including my location), and I learned that multiple people had been shot just a half mile South from here.

I spent the rest of that night taking cover, trying to get information about what was happening, and worrying about family. When it was confirmed that there had been a lone gunman and that he had killed himself (like the coward he was), the “shelter in place” order was lifted, and while we all collectively tried to catch our breath, I learned that the gunman was a nearby neighbor of my grandchild and child-in-law.

When all was said and done, 3 people had been killed, and 5 more were in critical condition with gunshot wounds. While, in retrospect, I was never actually in danger, there were numerous alternative scenarios in which family, friends, and even I, could have been in the firing line. Frankly, I have been far more shaken by this event than I would have imagined.

So… 2019 was the year I had to deal with the sudden and unexpected death of my wife (and business partner), 2020 was the year of the global pandemic, 2021 was the year where a friend and client very nearly died, and 2022 was the year where my personal life was in upheaval (and my stepfather died); I will be damned if 2023 is going to be defined by this mass shooting.

I ended up taking the rest of the week off from development, not entirely by choice, so at this point we are in the second half of February with little development progress to show. Therefore, I declare that the first seven weeks of 2023 are a mulligan. I will spend the next 10 days on planning, organization, and regaining development momentum, and then, like the Ancient Romans, I will start 2023 in earnest on March 1st.

My race number is 23, so this is going to be my year!

2022: Year in Review

Overall Performance Grade: Pass

Digital Gamecraft logo

The last year was particularly challenging for reasons mostly unrelated to business or development, so rather than give a letter grade, I merely graded our performance on a pass/fail basis. Since we made it through the chaos, that earns a passing grade. Now Digital Gamecraft® and SophSoft, Incorporated, are in a similar position to where we were last year, albeit with fewer resources and a different calendar year. It could have been much worse.

Accomplishments of 2022

We managed to continue development throughout the year, so here is a countdown of our top 10 achievements:

  1. We shipped a beta version of Action Solitaire in April. The fact that a release version has not yet been published accounts for this being at the bottom (well, top) of the list. However, this is a maintenance release only, so I can still recommend the current version, Action Solitaire 1.6; the next update will be free to all registered users.
  2. We shipped beta and release versions of FreeCell Plus (for Windows), FreeCell Plus Mac Edition, and FreeCell Plus Touch Edition in December, working right up to the end of the year. FreeCell Plus 4.40 (for Windows), FreeCell Plus Mac Edition 4.40, and FreeCell Plus Touch Edition 1.60 were all published in January 2023.
  3. We shipped a release version of Pretty Good Solitaire Mini (for iPhone) and Pretty Good Solitaire Mini 1.10 was published in January (2022).
  4. We shipped beta versions of Most Popular Solitaire and Most Popular Solitaire Mac Edition in March, a beta version of Most Popular Solitaire Touch Edition in April, and release versions of all three in August, when Most Popular Solitaire 2.40 (for Windows), Most Popular Solitaire Mac Edition 3.20, and Most Popular Solitaire Touch Edition 1.60 were published.
  5. We shipped a beta version of Pretty Good MahJongg in January, a beta version of Pretty Good MahJongg Mac Edition in February, as well as release versions for both; Pretty Good MahJongg 2.80 (for Windows) and Pretty Good MahJongg Mac Edition 2.80 were published in March.
  6. We completed a fully playable PlayStation 4 prototype of Demolish! Pairs in May. This marked a console development milestone set when we got our PS4 and PS5 kits; from this point we are performing a quasi-port of this proof of concept to PlayStation 5 by means of enhancing our SophPlay System™ for both platforms and converting any remaining code that directly accesses any PlayStation SDK.
  7. We shipped a beta version of a (deliberately undisclosed) feature for Beyond Compare (Scooter Software) in May. This deliverable demonstrated the feature functioning in an environment programmed in Delphi and represented a concrete milestone of moving from the research phase toward a complete implementation, though potential integration would not happen until 2023 at the earliest.
  8. We shipped two beta update versions of the Goodsol Solitaire Engine, in July and November, adding 50 more Solitaire games, along with supporting engine changes, each time. This brought the total number of implemented games to 1000, which count includes (100) bonus games. These new games should propagate into Pretty Good Solitaire Mac Edition, and probably Pretty Good Solitaire Touch Edition (for iPad) and Pretty Good Solitaire Mini (for iPhone) as well, in 2023.
  9. We published Demolish! Pairs 1.10 for Android in January. This represented a significant amount of refresh work, as discussed in an earlier blog post, being the first Android project in more than 3 years. The end result was professionally satisfying, placing this accomplishment near the top of the list, despite earning, literally, nothing. 🙁
  10. We survived the year, again, with the business still intact, and I personally made it through a myriad of challenges as well. For the third year in a row, existential concerns have been paramount, with a global pandemic and other matters of life and death, literally, factoring into how the company operates. Here’s hoping that 2023 is a relatively uneventful year of outstanding productivity and no existential crises. [Voiceover: … but that hope would only last until Monday, February 13.]

What Went Right / Wrong

Looking back to 2022: Year in Preview, here is how I assess the ultimate results:

In general, despite the challenges, we continued to develop and make good progress. We completed 23 projects, including 10 published release versions, 2 active beta versions, one completed beta version pending release, 9 other completed betas, and 1 major prototype. We shipped products in 9 different calendar months (only missing June, as 50 Solitaire games were added to Goodsol Solitaire Engine, and September/October, as another 50 games were added.) Frankly, I was surprised looking back at how much was accomplished.

Our product development goals were not met, although progress was made. None of the (4) unannounced projects made enough progress to actually be publicly announced, although the Gamecraft Classics™ product made major strides and should be revealed soon. SophPlay System™ progress was good on multiple platforms, but significant work remains to be done. Demolish! Pairs got its Android refresh in January (after iOS refreshes in late 2021), as well as completion of the PlayStation 4 playable prototype, but the multi-platform redesign has not taken place yet, much less implementation and release.

Development for client projects, on the other hand, was quite successful. Although it was not explicitly mentioned, I enumerated 13 client projects for completion in 2022 and we completed every one of them. We also got clearance to publicly name Scooter Software as a client (only mentioned here because it was listed as a goal). The only drawbacks were that one beta product got stuck in the doldrums, and that there are fewer client projects for the new year.

General development goals were not met, though primarily because these are the kinds of projects that get deprioritized when resources (especially time) are constrained. We made limited progress on each item, but significant progress on only one, while the focus of the console goals shifted, and I made few blog posts, despite better intentions.

Business goals, alas, were a failure. Simply put, not only did we fail to increase income, but the extra challenges meant repurposing some of the funding for renovations into operations, so there was no time for reviewing paperwork and neither time nor enough money to begin renovations. On the other hand, that leaves these goals unchanged, and despite the larger challenges, I am more motivated than ever to fulfill these goals.

I did not publicly enumerate personal goals, but I did mention spending more time with my grandchild which definitely happened, albeit not as I had imagined, and we have a closer relationship now that I could have ever hoped for, which is the best outcome of the year. All of the other personal goals were totally shaken up by events, but I did my best.

Conclusion

Honestly, much of 2022 was fairly dark for me, so I am relieved to look back and see that the company continued to deliver for clients, and scaling back the goals ever so slightly allowed us to complete all planned client projects. When one is faced with concerns about the immediate welfare of family members or oneself, it becomes difficult to plan for the future, and very hard to dream of much beyond an end to the current crisis (or crises).

Now that most of these concerns have passed, I am beginning to plan and dream for the future again, while adjusting to those things that will never be the same (as I also had to do just four short years ago). I can’t say that I am quite back to 100% yet, but I am close enough that I have been able to get “in the zone” once more, and dismissing humility for a moment, I feel that my 90-95% is still much better than most developers at full strength. 😉

I can even say that I am truly excited for (the rest of) 2023 and the positive progress it will bring, and I am looking forward to much better things. Onward!

… Gang aft agley

This year started off very strongly for us, with loads of goals, plenty of energy and enthusiasm, and sufficient resources available to bring the plans to fruition. Of course, in life one cannot control everything, so we quickly found our plans going sideways due to issues unrelated.

I have spent the last 8 months struggling mightily to get back to that status quo, which I have almost accomplished, save for a significant hit to resources that is not unexpected (with 8 more months of business expenses, among other issues) and which we can/must plan around.

At this point, we are more than 90% of the way through 2022, coming off the short Thanksgiving holiday break, with the traditional end of year holiday shutdown scheduled for December. Nevertheless, I am twisting the old development adage and hoping that the last 10% of the year will be responsible for 90% of the productivity. 😉

Seriously, I figured that this was a good point to assert that I am still alive and the company is still quite viable, and to briefly take stock of what has been accomplished (nevertheless) since the optimism of the early part of this year.

Sidetracked

First, I will just acknowledge that productivity was severely sidetracked by issues that affected me personally, not by anything directly related to the business. However, when the principal developer of a microISV is hindered, it can’t help but seriously impact the company.

The month after SophSoft, Incorporated celebrated our 40th anniversary, I got an emergency phone call in the middle of the night which precipitated a number of events that turned my personal life upside-down. Normally, I try to be very open about what is happening, but in this case, these are not my stories to share.

Suffice it to say that my story went from having a very controlled life by myself, working at home doing a job I love, and having time and peace to contemplate game designs and business plans, to having (first) one of my children move in, followed (later) by my infant grandchild, to whom I was primary caregiver for a time, and having the overriding focus of my life become attending to the needs of others. This was in no way conducive to product development (and even when I made progress it did not feel like I was).

However, everybody involved survived (literally), I gradually got more time for development, and recently got my home back, so now it is just me and Remington Taile, the feral cat who lives here (especially since the snow has started to fall). It has taken a bit to restore the household to what it was and, frankly, rediscover old productive habits, but I am almost there.

Progress toward Goals

At the beginning of the year, I laid out a number of goals in different categories, so I went back to generally assess my progress toward these goals (which I plan to, of course, do in more detail at the end of the year). Although it felt that all progress just stopped for 8 months, I was actually pleasantly surprised to see how much still was accomplished.

Of my (6) product development goals, I completed one, made good (to very good) progress on two others, made some progress on two more, leaving one that was essentially untouched. The SophPlay System™ made significant steps forward, and we hope to announce the Gamecraft Classics™ product in the near future.

My client development goals were, of course, prioritized, since these are the few goals for which we are externally responsible, and despite personal turmoil, I try to maintain professional (if perhaps familiar) behavior. For Goodsol Development, we completed (on our end) all of the product updates listed, except for FreeCell Plus, which is scheduled for completion in December, although the Action Solitaire update has not been released yet. We have added 100 more Solitaire games to the Goodsol Solitaire Engine with a beta starting any day now, and the new games will soon be added to Pretty Good Solitaire Mac Edition, Pretty Good Solitaire Touch Edition (iPad), and Pretty Good Solitaire Mini (iPhone).

For my other long-term client, I will accomplish one of the goals by revealing (here) that they are Scooter Software, and I have been doing research and development for potential features for Beyond Compare, a product that I was (and am) using essentially every day as part of my development and backup processes, and which I have extolled on this blog, well before they were a client. Although there is nothing tangible that I have contributed to the current release, we hit a major milestone with the work I am doing, which led into an unintentional hiatus for a while, but I am currently working to complete the next phase of development. Whether and when the feature gets included in the main product is well beyond my influence, but I observe that they have very deliberate release cycles, so it may be a while.

Of my (5) general development goals, I have made progress on three, and have done essentially nothing on the other two. In particular, my understanding of 3D graphics, both on the implementation and content creation sides, is much improved, and SophPlay is expanding to have additional functionality (across multiple platforms) in this area. On the other hand, my blogging obviously fell to naught, but this post is an attempt to get back on track.

The business goals mentioned staying healthy, safe, and productive, and I am not sure whether I fully accomplished the latter, but I essentially failed on the (3) numbered goals. Specifically, I certainly did not increase business income and, in fact, had to postpone the planned renovations and repurpose some of that funding to staying afloat. That failure really hurts, but was completely in line with my personal priorities and “you gotta do what you gotta do.”

I didn’t specifically enumerate personal goals, but I did make the best of the opportunity to spend lots of time with my grandchild during a formative period of his life. Also, though I was more closely tethered to the house, I did nevertheless find some time over the summer to get out into nature and exercise quite a bit (albeit less than the previous summer).

Conclusion

After these last few days, which I took as a mini-vacation (completely at home), I feel like I now am back to where I was last January when the company turned 40 years old, and there appears to be no mortal damage caused by the loss of time and money. I am older and wiser (yet poorer 😉 ), and I feel as motivated as ever.

I am looking forward to what comes next!

Demolish! Pairs 1.1 for Android

An update of this fun puzzle/arcade game is available for Android users.

Demolish! icon

Last week, Digital Gamecraft® released a game update, Demolish! Pairs 1.1 for Android, which refreshes the product to support the latest technology, including Android 12, and brings Demolish! Pairs 1.1 for Android current with Google Play requirements.

This update parallels the release (last November) of Demolish! Pairs 1.3 for iOS, which likewise did not add any new gameplay features and required no bug fixes, but makes sure the software supports all the latest mobile phones and tablets.

Development

As noted, there had been zero bug reports for the product (on either platform), but Google Play has been steadily advancing the SDK requirements for products in the app store, so this update was a proactive step to prevent the game from being dropped from the store.

Clearly, this update was not an exercise in direct ROI (return on investment), as the Android version has had, literally, ones of sales. 🙁 Instead, this was an exercise (in frustration) intended to keep our tools and skills up-to-date, despite never having had a client request Android work, for reasons that seem fairly obvious (i.e., nobody pays for Android software).

Because the product had not been updated since its release in September 2018, it had last been built entirely with Android Studio 3.1, and while we had been updating Android Studio quasi-regularly, we had not been making the associated script changes (unnecessary on any other platform) to keep all the tools in sync. This fact alone makes Android development the least appealing of any platform; it takes so much non-programming effort to maintain.

We upgraded to the (then) latest Android Studio which, to my chagrin, has been named, “Android Studio Arctic Fox | 2020.3.1 Patch 4” (because “Android Studio 4.3” was too cryptic and, you know, left out the confidence-building “2020” from a 2022 download 😉 ). Then the real fun commenced, because (of course) the Gradle version was out of date, not to mention the fact that there are two different Gradle versions, and various helpers offered to upgrade these once, and then again, and yet again, to newer versions each time. Of course (because it could never actually just work, you know, like Visual Studio or Xcode), this upgrade chain ended before actually getting the correct versions installed, though it did install three (or is it six?) separate obsolete versions of Gradle, thus leaving me with loads of (all) incorrect options and the necessity to spend a significant amount of time searching the web for a solution. This should not be necessary for development (hello, Gradle) nor using an OS (that’s you, Linux).

Ultimately, I did find the solution and get the Demolish! Pairs code to build correctly, and no actual code (i.e., Java) changes were necessary. However, I did choose to migrate (per recommendation) to AndroidX, for which the conversion tool was essentially flawless. I also am a strong advocate of strict code linting, so I made a few code changes due to new lint messages, although only one that could have made any difference in program operation (and only then if it ran on a theoretical Android device that reports neither ‘portrait’ nor ‘landscape’ orientation, which should not exist in reality).

I should note that, despite its absurd naming, Android Studio is fairly nice to use (once Gradle has been subdued). The static code analysis (i.e., linting) system for Android/Java projects is comprehensive, albeit often self-contradictory, but once one determines which items are pointless and disables them, it is useful. Also, Google provides excellent online documentation of its SDK, the way Microsoft did. On the negative side, I shutter to think how many millions (or billions) of dollars worth of development time are wasted on Gradle configuration, and I weep that some managers think code metrics are a good way to judge source code.

The final hurdle for me was at bundling time. Now, to submit a product, one must supply an App Bundle instead of a prebuilt APK, but that was not the problem. The problem was that to build a final App Bundle (or APK), one must provide the certificate and type in its password. In the intervening 3+ years, which notably included my world being turned upside-down, I had forgotten and misplaced this password. The certificate had been diligently preserved, but without a password it would be rendered useless. After hours of trying different methods to retrieve the password (all failing, as they should), I finally took the tried and true approach: count the asterisks and guess. It worked! 🙂

So… Act NOW and you can be the first person to buy Demolish! Pairs for Android in the current decade!

Also: second January release: check.

Wow! 40 Years in Business!

Today, the oldest independent game developer in the world celebrates the 40th anniversary of its official founding.

On Wednesday, January 13, 1982, forty years ago today, I took my completed “Certificate of Persons Conducting Business Under Assumed Name” form into the Ingham County Clerk’s office in downtown Lansing, Michigan, signed where I needed to sign, paid my $10 fee, and thereby officially established Sophisticated Software Systems.

Over the years, the structure of the business changed. After many years as a sole proprietorship, I brought in two partners and we incorporated as SophSoft, Incorporated in early 1996. A couple years later, we launched Digital Gamecraft, a division specifically for developing our own game projects, and last year we were awarded a registered trademark for Digital Gamecraft®.

In the early years, I developed products for a number of platforms and experimented with different business models. Our first legitimate success was a self-published title for MS-DOS, using the “shareware” method, in 1990. That game led to additional contacts in the retail game industry. We went full-time in 1994, and soon we had as much contracting work as we could handle; in fact, we had products in 3 different booths at the very first E3 in May 1995.

Since that time, we have done a great deal of work, especially in game development. The relative priorities of types of work have shifted over time; we still do contracting, but the focus recently has been on self-funded projects, while the retail game work, both contracting and pitches for funding, has necessarily waned.

Yesterday, I went back a did a cursory review of the work we have done over the years (and especially prior to this blog starting), and here are some fun facts:

  • We have pitched 8 different ‘AAA’ retail products (and teams) to publishers.
  • We have developed more than three dozen retail/commercial titles.
  • We have created 40 significant internal projects, plus 120 minor projects.
  • We have done work for 19 different clients, 8 of those for multiple projects.
  • We have worked on approximately 60 distinct projects for these clients.
  • We have been stiffed on multiple projects, and ghosted at least twice.
  • We have 32 projects planned and prioritized, plus 4 more added recently.

I am very proud of the work that the company I founded has done for the last 4 decades, and I am proud that I played a principal role in most of it. However, the anniversary is somewhat bittersweet because the two people who most helped me, my partners, Sherry Seelhoff (Director of Operations, and my wife) and Rick Tumanis (Art Director, and friend), did not live to see this day and to celebrate it with me.

Still here, still working, and still young enough to hope for another 40 years. 😉

Pretty Good Solitaire Mini 1.10

The best iPhone Solitaire game on the market just got even better.

Pretty Good Solitaire Mini icon

Pretty Good Solitaire Mini (for iPhone) has been updated to version 1.10, which is now available on the App Store for the unbelievably affordable price of only $1.99 US. This is the best Solitaire software value to be found anywhere!

Pretty Good Solitaire Mini 1.10 now contains 800 games, adding 50 new games (and still has 100 bonus games).

In addition to the new games, the entire program has been reworked to support iOS 15, including dark and light modes, and to (continue to) work on the latest iPhone models; all known bugs (most introduced by iOS updates) have been resolved.

Pretty Good Solitaire Mini launch screen

Development

This is the first update of Pretty Good Solitaire Mini ever, since the first version was released almost three years ago, becoming Goodsol Development‘s first (and, thus far, only) iPhone title. That version has a perfect 5.0 rating on the App Store (out of only 12 reviews 🙁 ), and as I write this, the new version is climbing up the charts (according to Apple).

Best Solitaire Game

I have played the Mac, iPad and now iPhone games and this is the best solitaire game out there.

Labtech89 (app store review)

The only real issue with this game is that it is a rip-off… for the publisher and developer. We work hard to make an excellent game, and there is almost no chance that it will ever recoup the cost and effort put into developing and maintaining it. It costs the customer less than a quarter cent per game, and still not enough people are buying it to justify maintenance.

Nevertheless, we continue to do so. Of course, after this amount of time, it is no surprise that Apple has completely rejiggered the internals of the iOS operating system, including the eliminating of the concept of screen orientation entirely, so there was plenty to update to resolve problems created by their aggressive (and unnecessary) deprecation.

You can read about most of these issues in my post from about a year ago, Pretty Good Solitaire Touch Edition 1.60, where I detailed how I first dealt with these (same) issues. For the iPhone version of the Goodsol Solitaire Engine, when compared to that iPad version of GSE, the engine (i.e., model) code is identical (as it also is on Windows and Mac); that is its whole point. The controller code is very similar, but requires a review of all changes, rather than a wholesale code replacement, but that was much less effort than it could have been.

The view code, however, is very dissimilar. On the iPad version (i.e., Touch Edition), the interface consists of key screens and several popover views. On the iPhone version (internally, Phone Edition), a smaller screen and no popover support requires that the interface is constructed in a different manner, with only two main views, supported by 3 tab bars and 10 various tab views. While the low level code to display images, fill tables, and whatnot, is nearly identical, all of the surrounding view code is incompatible, and it was much of this code that was affected by the deprecation. The best we could do was establish certain templates for the types of changes that had been necessary in PGSTE and use those to both identify places where changes were likely necessary and guide us in making the necessary alterations.

I say “we” and “us” but, of course, I am the only programmer working on either of these products, which fact, frankly, probably makes it a little easier to coordinate, though all of the programming work (and a lot of testing) falls to me.

There were a couple of minor positives to this development process. First, the bugs I accidentally introduced in PGSTE 1.60 had been fixed in PGSTE 1.61, so they never entered the code base for this update in the first place. Second, the fact that the iPhone version necessarily has no popover support means that we completely avoided the double deprecation problem that we experienced with the iPad version development.

The most amusing item was that just prior to development on this update commencing (and after its originally planned start date), hence about 2.5 years after the last release, Apkmonk Blog did a very nice review of Pretty Good Solitaire Mini. Right up front, the very first screenshot is (embarrassingly) a background missing the intended game preview. The writer actually (unknowingly) makes lemonade out of this bug: “Don’t worry about the plain look of the app when you first open it“. They go on to give a very nice review (with the odd factual mistake here or there) and rate the game 5 stars (out of 5).

Now what really happened is that the game worked perfectly when released, showing a game preview image on that first (“plain”) page, or a splash image if no game is currently selected. Then, as so often happens, Apple makes unnecessary changes to iOS and breaks things. In this case, it changed the process for initializing a view and its subviews in a way that broke the code we were using to show these preview images (and a few minor images elsewhere).

Specifically, what happened was that Apple made changes to the layer objects of general views after the viewDidLoad method was called. Our previews were not image views (deliberately), and in that method we initialized the contents of the layer object associated with the subview, resulting, as expected, in the preview images displaying properly. When a later version of iOS changed the way that (and when) Apple did this initialization, the preview images stopped displaying. In the end, we had to convert to image views and implement our other behavior on those. It looks like Apple introduced a bug into their system, and though they could argue (illegitimately) that we were not using a sanctioned method, the fact remains that they should not have been messing with view initialization in this way in the first place!

January release: check. 🙂