Avoid Interface Pollution

Introduction Interfaces should only be used when their added value is clear. I see too many packages that declare interfaces unnecessarily, sometimes just for the sake of using interfaces. The use of interfaces when they are not necessary is called interface pollution. This is a...

The Myth of the Root Cause: How Complex Web Systems Fail (Scalyr)

The Power of Less Code

Debugging code generation in Go

Last week, I was at dotGo. I gave a very short lightning talk about inspection of code generation with the tools already available in the toolchain. This post goes through the talk for those who didn’t have the privilege to be at the conference. Slides are also available at...

Keeping Go a human-first language

Disclaimer: I forked my opinions on this one from a barely readable Twitter thread and wanted to write it down how I feel about keeping the language internals away from the users, especially from the newcomers. This is not a skill-level concern, it is a core goal of Go to provide...

A Random Blog Post

How to generate random numbers, and the difference between math/rand and crypto/rand.

Reducing Type Hierarchies

Introduction I see a lot of developers coming to Go from object oriented programing languages such as C# and Java. Because these developers have been trained to use type hierarchies, it makes sense for them to use this same pattern in Go. However, there are aspects of Go that don...

Hugo goes global

Hugo is going Global! Hugo 0.17, released today, is our best and fastest release ever! Hugo 0.17 is nearly twice as fast as Hugo 0.16 and adds full support for multilingual websites with i18n support throughout all of Hugo.

Watchub

Watchub is a service that notifies you of people who followed/unfollowed you and starred/unstarred your repositories. Watchub home page. It runs every day and sends you an email if something changed. The first commit was about 1 month ago, and I first deployed it to production ex...

On Finding Root Causes