Hire us. Hire me.

Straight scoop: I need to find more (paying) work, and soon. I am raring to go on new development, bringing my extensive experience and expertise to bear on another interesting project (or several). If you need software development done, I can help you, whether that is via consulting and/or contract development through my company or as an employee at yours. I am also very open to funding opportunities for the next game product we are creating internally.

SophSoft, Incorporated has developed and/or consulted on dozens of commercial games over the years, including the complete production of more than 20 SKUs, and our clients have included companies such as Microsoft, Zombie, Legend Entertainment, MVP Software, Goodsol Development, and Scooter Software, as well as numerous other small companies. We have the skills and contacts to create any small to mid-size game from scratch, to assist the development of any size project, and to provide technical research and industry knowledge to help resolve issues and remove roadblocks.

I am Gregg Seelhoff, a lifelong game developer, a uniquely experienced programmer, and the founder and principal of SophSoft and Digital Gamecraft®, its game publishing division. Games and computer programming are two of my passions. In pursuit of those passions, I have worked on scores of published titles, as well as countless unpublished projects. Here are a few notable facts to illustrate the breadth and depth of my expertise:

  • I have worked on blockbuster titles, smaller retail products, shareware and self-published games, as well as multimedia software, tools, and hardware drivers.
  • I have led small development teams, programming groups within larger companies, and solo projects from conception to release.
  • I have worked on cutting-edge AR products within a hardware manufacturer and written VR drivers for first generation hardware.
  • I have personally developed custom AI engines for playing traditional games at world-class strength.
  • I led programming on a major Star Trek title, a cancelled Dungeons and Dragons project, and drivers for a Star Wars product.
  • I founded, and still run, the oldest indie game development company in the world.
  • I have worked on adventure games, RPGs, board and card games, FPSes, and arcade games, as well as in other genres.
  • I won an international programming competition while still in high school and have continued to steadily improve my abilities since that time.
  • I contributed to a Game of the Year winner, and had a solo project featured in books and magazines.
  • I have developed more solitaire games than anybody else on the planet.
  • I was twice elected as Chairman of the Board for an international industry marketing organization.
  • I won a Shareware Industry Award for a game that I developed as the sole programmer and primary designer.

In addition to my programming expertise, ability to quickly learn and adapt, and general resilience, my industry experience provides the skills to build cohesive teams, mentor developers, and improve standards and processes, as well as to provide useful feedback beyond my core competencies. Imagine how I can improve your team.

For (perhaps too many) details, you can get my full unabridged resume/CV here:
https://sophsoft.com/samples/GKSresume.pdf

Whether you have a game project you want my company to develop (or port), want to give some additional direction to an existing team, or simply need to get some programming done, please contact me to see how we can reach your goals together.

“So don’t delay! Act now! Supplies are running out!” 😉

2023: Year in Review

Overall Performance Grade: Incomplete

Digital Gamecraft logo

It has taken a long time to write this retrospective of last year, mostly because continuing practical demands prevented me from actually taking the time to assess what happened in 2023, from a slow start segue into a local mass shooting, a heavy investment in our internal products paired with a disappointing reduction in client work due to external factors, culminating in a troubling end of the year, paralleling the rough period for individuals and small companies within the game industry at large. I decided that our performance deserves an “incomplete“, which matches the overall mood; we did lots of high caliber work during the year, but did not bring enough to completion to really justify a grade. As with such a grade back in high school, we now have a limited time to complete the work or lose credit.

Last year, Digital Gamecraft® and SophSoft, Incorporated earned a passing grade by virtue of surviving the year. I noted then that we “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.” Well, this year things are definitely worse, with very few resources remaining and another calendar year already more then a quarter gone.

Accomplishments of 2023

Given the circumstances, I must scale back to the top 5 achievements from last year:

  1. For Scooter Software, we shipped the internal feature update intended for future integration into Beyond Compare that we previewed early in the year.
  2. For Goodsol Development, we shipped Pretty Good Solitaire Mac Edition 3.7, which contains 900 different Solitaire games seen in the Windows flagship product, plus an additional 100 bonus games.
  3. We made substantial improvements to our 3D graphics capabilities and active knowledge, knocking off the rust and updating abilities, including technical functionality on multiple platforms, image rendering, file parsing, graphics shaders, and adding (for the first time since 2011) modeling skills.
  4. We made excellent progress on our unannounced Gamecraft Classics™ product previewed last year, showing outstanding enhancements in four (of five) key areas of development on the project. (I anticipate a public announcement soon and an initial release later this year.)
  5. We made fantastic updates and additions to our SophPlay System™, incorporating new capabilities into the library, revising and expanding existing classes, deprecating a few ancient (in computer terms) features [8-bit color palettes, anybody?], and improving external documentation. Most of this work was in service of the above product, but the internal impact extends far beyond that.

What Went Right / Wrong

Looking back to the 2023: Year in Preview, this is how I assess our ultimate results:

The top two product development goals were advanced significantly (reflected as #1 and #2 accomplishments above), although we did not actually ship the product during the year. The other 4 listed goals were essentially unaddressed, although I note that this does indicate an appropriate focus on the (related) top goals, rather than bouncing around among projects.

The client development goals were fully met, as expressed, having shipped one significant deliverable for each client. Alas, factors over which we have no control left the overall results less satisfactory than I had expected, and our income (and, thus, financial well-being) has taken a substantial hit.

The general development goals were partially fulfilled, with limited improvement on blogging (and outreach in general), very good progress on 3D graphics research, but very little movement at all on the pitch deck and company bible (which, to be fair, are important overall but provide no tangible benefit in the current circumstances).

The business goals, unfortunately, were a failure, like last year. Business income decreased significantly, dropping below current expenses, outstanding business paperwork remained outstanding (and now a year older), and the lack of increased income caused the renovation plans to remain on hold. 🙁

Personal goals continue to evolve, and I make progress towards them, tempered only by a challenging financial situation and the corresponding burdensome stress.

Conclusion

Last year was a struggle, and while I could see positive signs and room for some optimism, it seemed that a number of things broke against the company. Taking a lull in client work as an opportunity to advance internal projects did not work out at all as expected. Investing (early) to attend GDC 2024 was followed by an industry downturn (read: crash) that made it potentially the worst year for seeking contracts in the history of the conference.

The most positive aspect of this is that the company continues to function as a full-time game development company, the oldest independent game developer in the world, and it improves its assets and abilities constantly. Likewise, I get to spend my full time (and then some) enhancing my knowledge and skills. Our capabilities remain formidable, not to mention available for hire.

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!

… 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.

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. 🙂

2022: Year in Preview

Happy New Year!

I am generally satisfied that 2021 was decent, and somewhat better than 2020, for SophSoft, Incorporated and Digital Gamecraft®, but I am expecting us to perform significantly better this year, particularly in expanding our offerings and improving our finances. However, the development schedule will not be quite as aggressive as last year, which should allow for greater and deeper focus, and generally be slightly more realistic; it will still be challenging, though.

Digital Gamecraft logo

Product Development Goals

This year, I decided to break the goals into appropriate sections, so I start here with the priorities for (only) our internal development projects:

  1. Unannounced productivity tool – this product has been under development for, literally, 32 years, though obviously not continuously. We are fairly close to an early release version, at which point we will (probably) announce the product and unveil the web site for a soft launch. This is the highest priority because it helps manage the development and prioritization of all the other projects. While I see almost unlimited potential of this project, it is the means to an end, and should the internal ends be satisfied by an unpolished alpha version, the effort to polish the product for public consumption could be de-prioritized. (We have to get there first.)
  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. Although a public release has always been envisioned for the future, the development work this year is particularly in support of (all) internal game products, which is why it is given this high priority.
  3. Unannounced Gamecraft Classics™ product – this traditional game title has been under planning and development, intermittently, for decades. It was buoyed (back) up the list of priorities in the middle of last year when we were reassessing our product lineup. It was promoted due to the vast amount of research and code that was already complete and available, combined with its ready support of simultaneous improvements to SophPlay.
  4. Unannounced console title – this is a game title that (perhaps unusually) focuses on accessibility and inclusion. It started as the highest priority last year, but it became clear that 3 months of development was too optimistic an estimate, and combined with the economic realities of the situation, it had to be slightly de-prioritized this year, but by no means am I any less excited by the prospects, and the above two projects will help pave the way. (We need to hear back from Sony and Microsoft whether we can reveal which consoles are supported. 😉 )
  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 also gives me a great deal of excitement and purpose, and because it helps support one of the projects above, but it is given a lower priority than that project because we currently have no viable business model for it, and while we are more than willing to make it free in theory, that concept makes it much harder to justify devoting development effort (given the other projects).
  6. Demolish! Pairs – this product has been available in its initial form since 2013 (on iOS, 2018 on Android). We have early plans to refresh the Android version, and later plans to both redesign the mobile versions and expand to other platforms (such as Windows, where there has been a working prototype since 1999). 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 development and exercising of SophPlay and the demonstration of our capabilities on various platforms.

Although the above projects are given numbered priorities, which are generally correct, the fact is that there is some interplay among them, so we will not (and cannot) be just focusing on a single project until it is finished and then moving onto the next. For that reason, this year I will not be assigning or predicting target release dates; everything will just be “as soon as reasonably possible”, with the above priorities in mind.

Of course, we have a backlog of dozens of products in various stages of design and prototyping, and we know exactly what the next few games will be, but even touching #7 before 2023 is something of a pipe dream.

Client Development Goals

To be completely honest, I really like my two primary clients and the projects I get to work on for them, but I see the inherent limitations in trading my time (and skills) for money. I really should be charging them between more and very much more than I currently am, but that doesn’t really resolve the bigger issue. If I could quadruple what I charge and work more hours, I could go from struggling to comfortable, maybe even well off, but that does not scratch the itch. This is the reason that I have not really been actively seeking any more long-term clients, and also why I have (deliberately) not been filling all my development time with client work.

Instead, I have been relishing the actual work and the challenges it provides, as well as the experience and knowledge I gain (and, sure, the funding). At the same time, I want to make sure that, for each client, neither of us is overly reliant on the other, especially given how close we came to this being an issue last year. (Plan for the proverbial ‘hit by a bus’ scenario.)

For one client, I am working on a feature for an established (non-game) product that has involved a lot of research to this point. This has given me the opportunity to program in Pascal for the first time since the 1980s (and Object Pascal for the first time ever) and to improve my knowledge of JSON, while I exercise my intellect and my technical design, programming, and debugging abilities. In (the early part of) the new year, I expect to have the fundamentals of the feature ready to be integrated into the main product, and I hope it can be in a new release of that product (of which my feature is but a small part) ready before the end of the year. Also, I expect that I will be able to announce the name of the client and product.

For the other client, Goodsol Development, with whom I have been working for more than 20 years (!), the products are much closer to those that Digital Gamecraft develops. (In fact, our PC solitaire game prototypes date to 1989, predating Goodsol by 6 years, but they were put on hold permanently in 2001 when Goodsol became a client.) These titles provide the challenge and fulfillment that I would be seeking even were they not a client, while general knowledge cross-pollinates with our internal products; some features have been implemented more quickly (on both sides) because I already did the research and had the requisite knowledge, so products from both companies benefit.

Last year, we had an aggressive release schedule planned, but that was necessarily interrupted in April and, in truth, was a bit optimistic anyway. However, that means that the early part of the year is fairly well-defined as the carryover from last year’s schedule. You can expect to see releases for Pretty Good Solitaire Mini (not a stretch, given it was essentially already done in December), Pretty Good MahJongg (Windows and Mac), Most Popular Solitaire (Windows, Mac, and iPad), Action Solitaire (Windows only), and FreeCell Plus (Windows, Mac, and iPad). After that (or sooner), it would be a good bet that we would add new games to Goodsol Solitaire Engine and then have subsequent releases of Pretty Good Solitaire Mac Edition and Pretty Good Solitaire Touch Edition.

General Development Goals

There are always general development projects ongoing to support commercial releases, or just business operations. These can be tools or, probably more often, non-programming tasks such as documentation, research, and marketing. SophPlay used to be the perennial top entry on this list, but it has now been (appropriately) elevated to ‘product’ status. Here are the (5) main general development tasks to be completed this year:

  1. Pitch deck and company bible – these documents give information about the structure and purpose of the company and its various divisions. We have always bootstrapped the company, and we have never received third-party loans nor investment, but writing these documents gives a bigger picture view of the company and is very helpful. It is like writing a business plan without having to include nonsense numbers and projections to impress investors.
  2. 3D graphics research – this research is essential to our products going forward. It is no secret that most of our games to this point have been 2D or isometric, but that is definitely not the case going forward, especially with our expansion into consoles. We have been very rapidly expanding our knowledge and capabilities, but there is still much to be learned about the differences among the 4 or 5 different systems on the platforms we currently support. Additionally, I am personally learning to create 3D artwork, a skill I have never had before.
  3. Xbox project approval – this is required to release and market our upcoming console game(s) on the Xbox One. This development task consists of adjusting our design documentation to fit their desired format, plus the development of some mockups and other explanatory imagery. This is not (necessarily) a difficult task, just one that has not gotten completed yet.
  4. Blog writing – this is simply a greater commitment to openness and transparency via blog posts in 2022. The only blog post I wrote in 2019 was announcing the death of my wife, Sherry, who was also my only surviving business partner, and it has been difficult to get back into the swing of posting regularly since then. However, the facts that I enjoy writing, and that I do not enjoy the idea of providing free content on social media, combined with a huge upcoming anniversary, give me the impetus to really try this year.
  5. Nintendo Switch developer reapplication – this is needed to complete our portfolio of major console support. Nintendo was the first application we completed, and it was also the first that was rejected, although no reason (nor obvious means of appeal) was given, so I have no idea why we were turned down. Sony took seemingly forever to approve us, and it required a change in our registered business address; Microsoft took almost no time with only one casual clarification (via email with a real human being). With our newfound experience, it is only fair to give Nintendo another chance to get in on this opportunity. 😉

Business Goals

At this point, staying healthy, safe, and productive is a given, and continuing to make payroll should be considered a necessity though, to be fair, I personally have enough runway via available credit that I could continue to pursue these goals until 2023 even if company funding disappeared tomorrow. Given that, these are the 3 main business priorities:

  1. Substantially increase business income – clearly, the primary way to do this is to release new products, so that is the main focus. Half of the products listed as development goals should increase income, and each of those has the potential to be huge.
  2. Resolve outstanding business paperwork – Sherry was the officer in charge of keeping up the necessary business paperwork, and since she died, it has become my responsibility. While I think I have all the legal requirements fulfilled, I need to organize everything and make sure.
  3. Complete home/office renovations – while this is not actually a business function (and is not funded by the company), it 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).

We definitely take over the world in 2023. 🙂

Conclusion

We have a lot of development work to do to release more of our own products, plenty of development to perform for our clients, loads of support projects to complete, and a few major business goals, so we are going to be very busy… a good thing.

There are other activities that I will, personally, be participating in less this year, including social media, television, and newsgroups. I will, however, continue (or even increase) those activities that bring me joy, including spending time with my grandchild and the rest of my family, finding solitude in nature, playing games, and exercising (as well as programming and writing).

It may look overwhelming, but the counterpoint is that this company turns 40 this month! We have been doing this for a very long time, and we are still here, so we have the experience and (global crisis or not) 2022 is going to be a breakout year for us.

Let’s Go!

2021: Year in Preview

Happy New Year!

Although 2020 was fairly average for SophSoft, Incorporated and Digital Gamecraft™, I am not terribly satisfied with that outcome, given the huge number of internal (and external) projects we have and all of the unrealized potential. Therefore, with more than a little optimism, I have set a very aggressive development schedule for the coming year.

Digital Gamecraft logo

Development Goals

Our primary goal for 2021 is shipping our first, internally designed and developed, console title. This project is well underway, but still has a lot more to be done. We are hoping to be completed with the development within about 3 (more) months, but how long the approval and publishing process takes is beyond our control (or experience).

Depending on the success of that title, we may (or may not) adjust the rest of the schedule to take advantage of other related opportunities (in particular, adding another console platform or two to our repertoire). However, at the moment, the development schedule calls for brand new game releases in July and November, as well as the initial version of a productivity tool and the first look at another project, a reference site, as well as maintenance updates for Demolish! Pairs, during the year.

Combined with work for our current clients, we expect (amazingly) to have new products or product updates releasing every month in 2021.

For much of 2020, I have been working with a client who publishes a major utility to add a significant feature that will make an already indispensable tool (that I used and advocated prior to this gig) even more useful for programmers like myself. Although I have absolutely no control over feature integration or release scheduling, I am hopeful that the result of this work will become publicly available this year. (At some point, I will have to get permission to reveal the product name and promote it, instead of just teasing.)

Our work with Goodsol Development continues, too, and although I cannot give the planned schedule, you should expect to see many more games added to Pretty Good Solitaire Mac Edition, Pretty Good Solitaire for iPad, and Pretty Good Solitaire Mini for iPhone, probably some new layouts for Pretty Good MahJongg, and perhaps even some updates for Goodsol Solitaire 101, Most Popular Solitaire, FreeCell Plus, and Action Solitaire. Of course, these games are pretty great already, and Goodsol has not charged for updates for any of the above titles, so I recommend buying them all now. 😉

Business Goals

For the moment, the company has almost everything it needs to accomplish the above goals, although it will take a huge effort on my part. The one thing we still need is serious funding, such that we can afford more help, but for the moment we are still bootstrapping.

From the business standpoint, our basic goals are:

  1. Stay healthy, safe, and productive.
  2. Continue to reliably make payroll while growing income.
  3. Connect with a great artist (or two) for our games, and maybe a marketing expert.

Note that we are not looking to take over the world until 2022 at the earliest.

Evaluation

This post lays out the goals for the year, obviously, so we can look forward, but part of the purpose of the post is also so we can look back on them at the end of the year and assess how the year has gone relative to what we hoped and expected. (More often than not, something external, like a new client, an emergency project, or an unexpected international hit game [knocking wood], causes priorities to shift.)

This is, truly, an incredibly aggressive development schedule, and if we can even get close, without disappointing ourselves or any of our clients, then that will be worth an A+.

If we can complete at least three of the (five) planned major releases this year, that will still be a great performance, but bittersweet for not getting everything done. Anything less would be disappointing, although just making it to our 40th anniversary early next year would be an accomplishment itself.

Of course, we give client projects priority over our internal projects, which is why (in the past) we have not made the desired progress with Digital Gamecraft products, but I believe (without going into detail here) that we have the organizational processes and development foundations in place to accomplish all of the above (without “crunch”).

Now, there is nothing left to do but DO.

The Beauty of Code

Programming itself provides opportunities for self-expression.

In the midst of chaos and strife, when I need to take a break from the “real world”, I most often find my escape in source code, programming anything really. Of course, having more projects than I could hope to finish, and clients providing additional work to boot, means that I always have a ready avenue for directing my focus. However, it is not solely about the product, nor the money; it is also about the pleasure and enjoyment of coding itself.

There are a number of fairly passive experiences that I (and I imagine most of us) use to pass the time: playing games, reading books, watching television or movies. There are also more productive activities such as exercise (I quite enjoy hiking, bicycling, and swimming), house cleaning and organization, home improvement, and “gardening” (of a sort). None of these activities, however, provides the same creative outlet as programming.

When it comes to creative expression, appropriately, there are lots of different ways that people find to fulfill that need, which is important to our being. I know lots of people who like to sketch or doodle, or to write (for which I have gained some appreciation over the years), and others participate in higher commitment activities such as making stuffed animals, woodworking, or designing jewelry. When I was younger, I turned to more “design” oriented expression, such as creating original mazes, designing pinball machines, and architecting dream houses; at one time I designed a complete go-kart business, including the tracks and buildings.

The beauty of code is that it allows for self-expression within a systematic framework. I have always enjoyed numbers, logic, and the rational, and these all factor into programming. Within the rules, though, there are essentially infinite ways to express an idea, both in terms of method and of presentation. Of course, there are demonstrably “wrong” ways to do things, such as code that does not compile, fails to work, or crashes, but there are many levels of “right” ways to accomplish things, including how to efficiently increase functionality, how to handle errors and unexpected situations, and (importantly) how to make the source code understandable.

When I was required to attend an “advanced” BASIC course in high school, having already programmed for years (but with no formal education to show it took vociferous insistence just to avoid the “beginner” class), one of the first problems we were presented was to take a three-digit number as input and reverse the digits. I was the very first person to complete the task, twice. My second version was the anticipated method of accepting numerical input, with constraints placed on the operator (not the program) to limit the input to 3 digits, separating the number into ones, tens, and hundreds places, and printing them in reverse order, just to prove that I knew how to do it that way. My first version accepted the input as a string and printed the characters in reverse order, which worked on the specified input type, but also on numbers of arbitrary size, or any characters that could be input.

Around that time, I also set myself a challenge to create an “unbreakable” game, which I was able to accomplish with a high degree of confidence. To be unbreakable, the program had to be bulletproof, once executed, such that nobody could deliberately nor accidentally get to the prompt (and, hence, have access to the source code). This meant that the program needed to have no syntax errors (BASIC was interpreted code, rather than compiled, so such errors would only be found when executed), no logic or constraint errors that would allow a crash (such as selecting an unexpected/illogical action or overloading an input buffer), and also disallow breaking (via ^C), which was accomplished via system-specific methods. The only ways to end the program were turning off the power or hitting the reset button.

Programming has a lot in common with the scientific method. Although you use known logic to devise provably correct solutions, rather than testing hypotheses, you still test to confirm your approach and resolve errors, whether they be in your understanding of the problem, your design of a potential solution, or your execution of the plan. In fact, I constantly use this approach when building a program to regularly test my assumptions. I will make an interim change and state (to myself) the expected failure outcome, whether that be a compiler error (or specific number of compilation errors) or some weird behavior, just to confirm my understanding. If some code compiles unexpectedly, or the behavior is not as anticipated, I revisit the problem and make sure than I can explain why things went differently.

This shows yet another beautiful aspect of programming: its digital nature makes it precise and enables, at least ostensibly, the pursuit of perfection. You can experiment with something new with confidence that, if it does not work out, you can return to exactly the original situation. It does not matter how far out in the weeds I get with an idea; I can always get back to where I started. (Try that with oil painting.😉) Also, as my first computer book helpfully pointed out at the start of my career, nothing that you do with source code, short of typing it with a hammer, can break your computer (and while that is not strictly true, exceptions are exceptionally rare and not worth concern).

The fact that I value the actual source code as well as the outcome, which tends to be better for such appreciation, explains why I am not a fan of “visual programming”. With traditional source code, everything is enumerated and readily viewable, having been written by you or another programmer. While visual programming is ostensibly the same, it hides aspects of the code and logic behind objects, making development more like hide-and-seek. My first experiences were in the very early ’90s with Asymetrix ToolBook and Borland ObjectVision, where one would have to check every page and object to find all of the scripts to have a complete understanding of the logic, which unnecessarily fragmented the code. Today, such tools as Unity, Unreal Engine, and Interface Builder certainly make visual layout easier, but with the inherent risk that the complexity hides some of the logic, removing it from the source code and fragmenting it. It can be quicker to develop visually (especially if one is inclined toward fast results over quality), but it is inarguably harder to debug.

Outstanding programming is more craft than art, by which I mean that it can be learned and refined over the course of years, and one does not necessarily require an inherent creative ability. I can explain the rationale behind decisions in my source code, and I can teach you techniques, and if you have the requisite logical intelligence (which many people do not), then you can become at least a very good programmer. (I doubt one can read a book about fine art and learn what it takes to be a master.) One of the best compliments I can get is when I am told that I taught somebody the value of maintainable source code, or defensive programming, or quality assurance techniques.

With that in mind, I intend to document more of my approaches to development in general, to provide insights that interested parties can take or leave, along the lines of my Quality [index] series from many years ago. One current focus is refining my programming standards, so look for that in the near future.