Chronicles of Team Pixel — Part One

Nathan Mackenzie
Mar 19, 2019 · 5 min read

Nathan Mackenzie is a father, hobbyist, passionate full-stack developer, and Battlesnake enthusiast. This is part one of his two-part guest post about his experiences as a Battlesnake participant.

Let’s get some of the background and details out of the way before I discuss Team Pixel’s strategy and why it failed us in the final.

What is Battlesnake?

“What started as a small group of colleagues honing their skills has become a community of developers who compete for fun and for glory. Battlesnake grew from a single, yearly event into a global, open-source community that’s active year-round. The game is a multiplayer version of the classic arcade game Snake, where teams program a snake AI to compete against others. The winner is the last snake slithering.”

Who am I?

At the time of this post, I am a recent grad (June 2018) from the Information and Computer Systems Diploma Program from Camosun College and a Junior Web Developer for a local start-up Lauder Media Inc. I’m a family man with three great children and a wonderful wife. I love to work on my development skills in my off time and play with different languages and frameworks. Check out my portfolio here.

Battlesnake 2017

I was in my first year at Camosun College when I first heard about Battlesnake. A group of Battlesnake event coordinators came into our class to speak about the event. I was hooked when they said “Battlesnake AI”.

Not knowing how to get started or really much about programming at all (I had zero programming knowledge prior to my enrollment at Camosun), I attended their tutorial.

This lead me to their event documentation where there was a link to the code from the winner of Battlesnake 2016. I forked the GitHub repository and altered it to fit the data coming in from the requests on game day. I managed to get it working but not good enough, which leads us to the moral of 2017:

Having no experience and trying to alter an existing snake is NOT the way to do things.

A couple of notes on why this was not an optimal choice for me would be:

  • Little to no comprehension of what the logic was actually doing
  • Very hard to implement new logic based on the existing code

The day of Battlesnake 2017

Although the experience and atmosphere were out of this world, I did not do well in the competition and started regretting my choice after I was knocked out of the running. I started planning how to get better by the 2018 competition.

Main event room!

Battlesnake 2018

Into the second year of my program at Camosun College, Battlesnake 2018 was approaching and I was feeling pretty good. I decided not to start from scratch and continue with the snake I had used in the previous year (yeah, I know— don’t worry, we will get to that poor choice in a minute)

Throughout the previous summer, I had taken the time to understand what the existing code was doing to some degree. It felt like enough that I could add some extra actions and “make it work”. (Doh! I know you’re thinking it too!)

The day of Battlesnake 2018

Walking in head held high because I got a few extra things happening with the current snake. I was so high on my horse I entered the intermediate bracket fully believing even with the lack of understanding of what my snake was actually doing I was going to dominate.

Yep, you guessed it— I actually did worse than the first year and the developers in that bracket far outweighed my knowledge of development. Another loss right away, I was officially put in my place.

Despite my second failure, the event was outstanding yet again. More developers, more sponsors, more networking, and great times. Yet I still had that looming feeling of failure. Fool me once shame on you, fool me twice shame on me!

Team Pixel- left Nathan Mackenzie, right Brandon Mackenzie

The Plan for Battlesnake 2019

Get involved

I aspired to help out at the event and be involved for two reasons:

Bring my son this year

My son really wanted to tag along and help out— he’s got an increasing interest in what I find so fascinating about programming.

Start from scratch

This was the only feasible option to fully grasp what I was doing.

Make it to the finals

If I made it to the finals then I would know that I fully understand the concepts and logic used in my snake.

Achieving These Goals

Get involved

The growing BattleSnake Community actually made this part very easy to do.

Bring my son

I needed a teammate and he wanted to learn and experience the atmosphere— easy peasy!

Start from scratch

This was the hardest thing to stomach. I had worked so hard to try and understand what I was working with only to throw it all away.

With sweaty trembling hands …. Delete was clicked.

Make it to the finals

This was another hard thing to stomach. I decided based on my experience it would be best to start back at the basics, Beginner bracket it was. From there my goal was to make it to the finals and that would confirm that I understood what I was doing and working with.

Spoiler alert =>we placed 2nd!!!
We would have gotten first but I’ll cover that in Part 2.

Beginner bracket final.


What if programming was fun and accessible for everyone?

Nathan Mackenzie

Written by

Diploma in Information and Computer Systems Technology. Full Stack developer with a diverse foundation in various languages and frameworks.


What if programming was fun and accessible for everyone?

More From Medium

More on Battlesnake from Battlesnake

More on Battlesnake from Battlesnake

Battlesnake Developer Update — February 2020


More on Battlesnake from Battlesnake

More on Battlesnake from Battlesnake

Battlesnake Developer Update — January 2020

More on Battlesnake from Battlesnake

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade