From Graphite To Prometheus – Things I’ve Learned

For a long time, the StatsD + Graphite stack was the go-to solution when considering backend stacks for time-series collection and storage. In recent years, with the increased adoption of Kubernetes, Prometheus has been gaining more and more attention as an alternative solution for the classic Graphite + StatsD stack. As a matter of fact, […]

8 Tips For Productive Testing

In the previous post we discussed the “why” — we went over some of the benefits of integrating automatic testing into your development flow. In this post, we’ll go over the “how” — some guidelines for forming a healthy, safe and rapid development process around your test suite. Continuous Integration (CI) The first and most […]

3 Reasons You Should Start Testing Today

Preface This series has been heavily influenced by Robert Martin’s clean code series which I extremely recommend for every developer. Software testing has always been a controversial topic. Some say it is a waste of time while others say that it is the only sane way to develop and extend large software systems. Personally, I […]

Our Journey to EKS

<TLDR> Check out eks_cli — a one stop shop for bootstrapping and managing your EKS cluster </TLDR> Preface We’ve been running Kubernetes over AWS since the very early days. Configuration options were minimal and were passed with a mix of confusing environment variables. Concepts like high availability, Multi-AZ awareness and cluster management almost didn’t exist […]

RabbitMQ Retries – The Full Story

RabbitMQ is one of the most widely used message brokers today. A large portion of nanit’s inter-service communication goes through RabbitMQ, which led us on a journey of finding the best way to retry processing a message upon failure. Surprisingly, RabbitMQ itself does not implement any retry mechanism natively. In this blog post I explore 4 different […]

Writing an Elixir Plug Library

Plug is an Elixir specification for composable modules between web application. That’s a very nice way to describe middlewares. For those of you that come from the Ruby world it pretty much takes the role of Rack middlewares. A few weeks ago I searched Google for a Plug library to validate path and query parameters […]

Building a Robust Elixir Dispatcher

  I’m pretty new to Elixir. This language fascinates me as it is based on a paradigm I never experienced before. The ideas of functional programming, processes, message passing and fault tolerance are bundled together into a language and eco system which is fun and productive to work with. Recently during a feature I was […]