The world of software is shifting fast. Much for the good, but with good comes the bad. I have been using the Unity game engine for over 6 years and it is incredible at what speed you can create prototypes and games.

I've been a part of Unity's journey going from a traditional 1,2,3,4,5-version release cycle to the modern, somewhat over-hyped, year-quarter cycle of 2018.1, 2018.2, 2018.3 model that many companies are adopting these days. Not only is it a shift from a numbering convention, but it is the shift to bring you into a subscription model rather than a traditional licensing model.

On top of this, the next hype is introducing new features in preview before they transition to general availability. There are many upsides to previews too as I am sure it provides a great opportunity to get testing and feedback from developers so that the feature can be improved prior to release. But here is when it starts becoming risky from a developer's perspective if you want to remain productive.

The title of this post, Early Adopters - Your Productivity Will Suffer, derives from my personal experience as a Unity user and the suffering refers to suffering reduced productivity when you get involved in the preview features. Let me explain what I mean with an example.

Unity and Shader Graph

I have been developing shaders for my Procedural Planets asset for Unity over the past couple of years. I'm not really a shader developer so the shader language does not come natural to me. After a lot of shader research, Internet searching, and trial and error I eventually managed to create the shader I needed to get my procedural planets to work.

Then, I stumbled upon an asset named Amplify which is a visual node-based shader editor. I bought it and started to replicate what I had done with shader code and my workflow improved greatly. And by greatly I mean orders of magnitude faster.

Then, with the Unity 2018.1 release about a year ago, Unity mentioned a coming Shader Graph feature which was in preview. My initial instinct was to switch to the Shader Graph since I tend to favor native features compared to third party addons. It turned out that the Shader Graph, which was in preview, is relying on another feature called Scriptable Render Pipeline, which was also in preview, again relying on a preview of the Package Manager.

Already at this point, my productivity was becoming hindered. I spent more time trying to figure out if I was doing things wrong, finding documentation, wondering why it didn't look like it should compared to screenshots and going down rabbit holes of forum threads trying to get past the obstacles I encountered. Meanwhile, I did not do anything productive.

I decided to pause my effort and stick to what I knew worked and revisit the topic at a later time. Months went by and I attended Unity Europe 2018 in Berlin. There was a Shader Graph talk that got me a bit excited so I attended it. Ok, this time, it looked a bit better. But still in preview. Still lacked features. After some testing, I decided once again to pause my effort and go back to what I knew worked.

Another 6 months passes by. I figure, now it's time to shift to Shader Graph. Surely it is out of preview and it has the nodes I need. So, I update to the latest version of Unity. I open the Package Manager. No sign of Shader Graph. Ok, it is still in preview, and so is the render pipeline. The nodes are still missing. However tempting it is to start going down rabbit holes again - I will stop myself. There is no roadmap or published information of when the features will come out of preview. My time is too limited and if I want to produce and publish things, it won't come from troubleshooting or working around issues with preview packages.

Don't get me wrong. I know it is in preview and that there will be missing features and there will be bugs. It's great that we can contribute to the development of features and provide feedback and bug reports. My point, however, is just that know that your productivity and output will suffer. If you want to spend more time creating I propose that, however tempting it is to use the latest stuff, you stick to everything that is stable and battle proven.

Machine Learning

I won't go into detailed rants for each example. But as with Shader Graph, I figured that the Machine Learning (ML) feature would be a great way to train AI NPCs for my game. The initial announcement of ML in Unity looked very promising and I attended the ML workshop at Unite Berlin. I spent 30 minutes trying to install the prerequisites, connecting it to Unity and Python. And after the workshop I still couldn't get the demos and sample projects to run. I have learned my lessons in the past. I will do basic NPC AI for now and wait for ML to mature before I'll have a look at it again for any serious consideration.

Blender 2.8

My most recent example is Blender. With version 2.8 now being in public Beta, and with it looking so promising with much improved UI, I have to try to contain my excitement. For productivity, my choice has to be 2.79. If I do a Ludum Dare event, for example, where you have 48 hours to make a complete game, there is absolutely no time to troubleshoot why something may or may not be working.

Last month, I created my game Blót in Unity from scratch in 48 hours. That includes core concept, 3D art, animations, code, music, sound effects, level design, menu design, game state management, and play testing.

You can also watch a Timelapse of me making the game.

If I were to use Blender 2.8, or Unity preview packages for that matter, in this process, I would have failed. In Blender 2.8, the vertex editing was broken (I submitted a bug report and that has since been fixed which is nice), and the weight painting for bones is broken (I've sent a bug report on that too) - so I know I would have failed.

Conclusion

Keep a watchful eye on preview features. Engage and test them out. Use the opportunity to provide feedback and direction to contribute to their development. But do it with two very important things in mind:

  1. Only spend time that you have to spare on preview features.
  2. Do not rely on preview features - unless you totally depend upon something that is only available in preview (but be prepared for the resulting delays).

This is nothing new. Unity has never recommended to use any Preview features for production projects. But I know it's tempting to use the latest and greatest, but know that as an early adopter your productivity will suffer.