Avoid all or nothing situations when releasing new code to production using a pattern to release updates to a shifting percentage of the total user base.

Canary Bird Vectors by Vecteezy

Deploying in modern days can be challenging, given the complexity of systems built in microservices structure. But thanks to some deployment strategies, you can do that with much more confidence.

In this article, I’ll show you how to use the canary deployment pattern. Despite the heartbreaking stories that made this little bird notorious for being a type of "informant", in software engineering, canary symbolizes substantial risk reduction. Let's find out why!

What are canary deployments?

They are a…

Go is a modern programming language and as such was designed with incredible testing support out of the gate. Project and file organization combined with official tooling and a lean but powerful (and also official) testing library: that's all you need to know to get started.

Let's start from the top: the go test command

Go’s standard library already has everything you need and there’s a go test command included in its binary that, by default, picks up all test files in a given path and executes all test cases.


Test files are expected to be located within the same package of the code they are testing. It doesn’t…

One of the most ubiquitous things in Go are functions with two, or more, return values, where most often than not, the last one is an error. There is a limited set of courses of action for these errors, and I’ll cover them in this article.

Handling errors

When an error occurs, a developer can:

  • Return the error to the previous caller in the call chain
  • Log the error
  • Panic and crash the application

The above alternatives are meant to be mutually exclusive, meaning that one should only handle an error once. …

I haven’t met a developer that purposefully builds non-performant software. On the contrary, premature optimization is one of the most common pitfalls we have to be aware of at all times.

If I’d have to pick just two of the possible undesired consequences of premature optimization I’d choose:

  • Acquired complexity that is hard to change later on
  • Time wasted with non-problems

Acquired complexity that is hard to change later on

You’re building a brand new system and want it to behave incredibly well for your users when it hits production. Time to pick the database. …

At Wildlife, we have an incredible variety of backend systems with all sorts of complexities. We are also heavy users of Golang, and over time I had the chance to be exposed to brilliant ideas from several of my coworkers. What you’ll read in the following lines is a subset of the ones I like the most regarding project organization and code style.

The title of this post has the word “Go” inside parenthesis because most of these ideas are language agnostic.

Blank slate

When creating something new, the best thing to do is not get too concerned about almost all the…

Yuri Brito

Software Engineer at Wildlife Studios

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store