Dear Reader,

Our family has a tradition of spending a week every May living on a houseboat on Lake Powell in southern Utah. A week before we left I asked my sister to help me come up with a game that I could build in about a week that we could all play down on the lake.

The requirements were pretty simple. I wanted a game that:

  1. I could build in about a week.
  2. Used mostly tech I already knew.
  3. Allowed a large group of people to play.
  4. Could work without an internet connection.

I also knew that I wanted it to be a game similar to jackbox games where everyone connects on their phones to play.

With these in mind, we came up with a game similar to Say Anything. The basic idea is that you read a question about one of the players. Everyone else answers. The person chooses their favorite answer, and everyone tries to guess which one was chosen.

I set to work building the foundation of the game using Vue.js and Vuetify for the front end and Node.js for the backend. The new bit for me was that I finally got to use WebSockets!

Friday rolled around and it was time to head out to the lake. I was only about 25% done. Thankfully I had the majority of the WebSockets figured out and was confident I could continue without referencing any documentation.

It is said when the tide goes out you can tell who’s skinny dipping. As I continued working on the lake without an internet connection I started realizing how often I actually referenced documentation. I ended up having to get really creative in figuring out problems. Here is a list of my offline problem-solving tools:

  • Guess and check - I guess we all do this most of the time, but I ended up doing this a lot more than I usually would.
  • Chrome/Firefox console debugger - Did you know you can write javascript right in the console of Chrome and Firefox? I’ve used this for years, but when I had a doubt about some javascript functionality it’s super nice to just play around here and figure it out.
  • node_modules - I had several times when I would forget some little syntax or styling class for a Vuetify component. I ended up literally digging through the node_modules folder for the package I was referencing then sorting through files there until I would find the actual components being used.
  • Look at other projects - If you’re like me you probably have 5+ other projects using similar technology on your computer, go look at those if you can’t remember something.
  • Work Around Your Problem - I ran into a problem copying objects (like this). I had faced this before, but for the life of me I couldn’t figure out how to solve this the “right way.” So I ended up refactoring a bit of the program so I wouldn’t have to copy objects.

I guess these are all tools that I use daily. I was just forced to be far more creative in my solutions because I couldn’t just search and instantly know how to solve my problem. It surprised me how much I was unsure about, even on technologies that I use every day. Now that I’m home I’m noticing some of my habits that have gotten me here. For example, my morning setup workflow: start my computer, launch dev environment (dbs, docker, etc), check ticket board, open code, launch project, and within 5 minutes I have some documentation open.

Is it a bad thing to reference documentation? No. Is it a bad thing to rely on documentation? Probably not. I think it’s fair to rely heavily on documentation. How often will you not have an internet connection, especially when working with web technologies? Probably never. How long does it take you to reference documentation? This one depends, but once you’re familiar with a package I find that my reference time gets pretty quick.

As a full-stack developer, there is so much to know, and you may spend weeks on one part of the application before returning to another. My philosophy is to deep dive into what I deem “critical” to the application. For example, I may not commit to memory CSS classes when I know I can reference them in seconds. But I do want to know exactly how the authentication package I have chosen is working, and be sure I have implemented it correctly.

By Wednesday of the next week I had a working prototype, and using my captive audience on the houseboat we started playing it. There were still a couple of bugs, and overall the UI needs some love, but aside from that, it was a super fun game!

Thanks for getting this far, any feedback? Drop me a line!

Cheers,

Jacob Strong

P.S. It is surprisingly hard to get non-technical folks to connect to an IP address with a port from a phone.