It's Not Me, It's You—or Screwing up With Unreal Engine

Upon being told I was no longer needed at my job of 19 years, I did what any reasonable adult and parent of small children would do.  I installed an Unreal development environment and wrote a blog post about it.

A seriously failed Marlin firmware update showing broken emojis on a blue LCD screen
So, about that firmware update...


Prologue

I could have done something more productive, but it wouldn’t have been as funny.

After a couple of decades of engineering stuff, drawing boxes and lines, building strategies, and leading teams, I want to acknowledge that a lot of what I do in my spare time I’m terrible at. I tend not to talk about my side projects because I am terrible at them. What would happen if I wound up in a conversation with someone who was good at said task or hobby and they wanted to talk to me about it?

That said, these failures and aborted runs down many a rabbit hole have helped me in my career as well as in life. Michael Rhulman articulating how ratios work in cooking changed how I understand cuisine and feed myself. I'm not a chef. Building my own drones helped me understand how PID loops work, and that they're everywhere. My work is far removed from UAVs.

Often this tinkering ends in profanity, a small pile of broken parts, and a marginal success. In the case of drones these events happen simultaneously.

Anyways, this post's folly is developing with Unreal Engine and starting "the wrong way". After a couple of days of tinkering, a few hours a day, here are some notes from the journey of attempting to set up a development environment.

VS Code

VS Code is Open Source. I used it in my old role, it worked great with Python etc. what’s not to like?  Unreal seems to prefer Visual Studio but why bring in all that extra tooling if I can do it in VS Code?  Being brand new to this I assumed the first thing I should do is get my development environment set up. I brought up the docs on Epic’s site and got things rolling.

THIS ONE SENTENCE IS REALLY DAMN IMPORTANT AND I ROLLED RIGHT PAST IT: 

"This guide assumes that you have installed Unreal Engine and created a C++ project with it."

That’s 100% on me.  If you’re in this field at all and you haven’t done the same thing once or twice, you are blessed my friend.  I had installed the engine... but I hadn't created the project. That said, maybe they could add a link to how to do that in the document?

I scrolled through the tutorial many times looking for where to set things up before I realized several of my initial mistakes.  Oh - and sometimes the launcher would send me back to my Epic games library for no apparent reason as if the universe was telling me, “This might not be for you, why not try one of these 50 games you haven’t touched instead”.  Again, this is 100% my miss but I'd say not unusual for a developer or a tinkerer.

I eventually got that sorted and moved on to my next task.  This is where I think it's less on me.  I had the project created, compiler bits and bobs installed, the right plugins, and can see the actual project source code.  Seems very promising. Now to just handle this section about configuring IntelliSense:

Documentation from Epic's site on how to include path for intellisense
From Epic's documentation

And... What the hell?

VS Code showing errors with the syntax from Epic's documentation when pasted in
The red squiggles usually aren't good...

That was enough for me that day, the documentation seems incorrect and untested or outdated. The strings don't appear to be escaped properly in the code snippets and some of the directories don’t exist in my project even if I fixed the syntax.  I have no idea if these directories are important because again - I've never done this before.  I also have no idea if there was another build step I should have run because, you guessed it, I haven't done this before.

I figured I'd try another approach and just do a basic tutorial the next day.  Maybe I was too cocky, too ignorant, or all of the above.  I’ll also use Visual Studio since that appears to be the default IDE and again, I haven't done this before.

What's in a Version?

The next day I decide to proceed with said tutorial.  As a side note, this is what you’re greeted with when going to install Unreal.  It has some blurbs about procedural content generation and I thought it would be neat to make a procedural forest hiking simulator as a project.  Should be a perfect fit.

Unreal's download graphic for the 5.3 engine release
This is what you see when you go to download Unreal

So I find said tutorial, it’s the first resource in the gaming section of Epic’s documentation.

This little dude looks like they'd go for a hike

Perfect!  I’m not going to get hung up on how this is already my fourth or fifth hour with Unreal Engine 5.  It’s probably just me coming at the problem sideways because I haven't approached things the "right" way.  So I grab the project and fire it up.

Unreal not allowing installation of the tutorial because it's for the 5.2 version with an error message
Because of course. Why would it?

So the very first tutorial in the Gaming education section will not install on the engine that is the default for everyone to download.  It also looks like most, if not all, of the documentation is for 5.2 or even earlier versions.  I could be wrong but I assume the differences must be somewhat significant considering the examples will not open on the newer version.

That's where I'm going to stop this narrative for now and reflect on what it reminded me of from my day job.  For example I know I have a bad habit of skimming documentation, assuming I'll catch the important bits, and jumping straight to the fun stuff.

Well so what?

TL;DR - Incorrect, patchy, and dated documentation is super common.  It can make developers feel incompetent, make developers think you're ignorant, and can make users give up before even starting.

This situation is very common, I'd say ubiquitous.  I’m not just randomly throwing shade at Epic, they make great products and let Neanderthals like me hit said products with sticks to see what noises they make.  And free of charge to!  That said, in the endless run of side projects I’ve had, poor, outdated, and incorrect documentation is very common. 

  It’s so common in a professional setting that one of the tasks I always have a new engineer do when on-boarding is update the on-boarding documentation.  It’s always wrong.  Always.  Not necessarily in huge ways but versions change, people shift roles, policies are updated and we don’t go back and clean up.

If you're documenting how to use your tools for a consumer or customer the stakes are higher.  You have competition and if that competition does it better you're going to lose said customers.

Last, when you’re new to a job or to a community you’re probably wanting to make a good impression, not waste peoples time, and not appear uninformed.  You might have never worked in a field before and the idea of hoping on a Discord server and bothering developers to proclaim your ignorance doesn't feel good either.

I've skirted the topic of Imposter Syndrome in this post a few times and it really deserves it's own treatment. I suspect it's simply a part of human existence. Doing a complex task for the first time is daunting and what defines complex really depends on your prior experiences. Misleading or incorrect documentation is a fantastic trigger.

Just to emphasize a key piece of the above, your prior experiences will not grow if you stick to stuff you know. One of the reasons I've always loved weight lifting is that it never gets easier, you just put more weight on the bar. I don't think a single failed project of mine is a wasted because I can put that experience and gained understanding to use somewhere else.

I'm not advocating for mediocrity but I think the effort required to truly excel in an area is such that, for me at least, you can only have a few of them. Having a bunch of things that I'm OK at, and a stack of things that I'm not good at but understand the concepts of, is core to tinkering for me. Plus its fun!

I still have a development environment to configure.