Posts in Engineering

Script what you don't automate (so you can automate it later)

How we use continuous improvement to minimize maintenance and maximize repeatability.

Rockin' With Dokken

How and why we converted our Chef Cookbook testing to the kitchen-dokken plugin.

Controlling DNSimple with DNSControl

A dive in to how to use command line tooling to manage records alone or in teams.

Two years of squash merge

A retrospective of the last two years where we adopted --squash as our default merge strategy for git branches.

Using GenStage with low volume data source

In our new Elixir project we needed to orchestrate various sequential processing steps. But does GenStage work for low-volume processing too?

Put down that ENV; what you should know about ENV configuration

An exploration of the usage and limitations of ENV (environment variables) in configurations.

DNSimple API v2 OpenAPI definition in depth

Let's dive deep into the OpenAPI v3 definition of the DNSimple API and see what lies within.

Phoenix performance metrics within the browser developer tools

In this post we discuss how to measure basic performance metrics with Elixir Phoenix and display them in the browsers developer tools using the Server-Timing API.

Adopting OpenAPI to describe DNSimple API v2

We're adopting OpenAPI as a way to define and document the DNSimple API. Read on to find out how and why.

Why we are starting with Vue.js now

We ran a little experiment and we are excited to improve your user experience with Vue.js

Paying Back Technical Debt

Systems grow and evolve over time, accruing technical debt at varying speeds. Here's what we are doing about our technical debt at DNSimple.

Automated green/blue deploys with Hubot

Shipping code is the most crucial moment in building things. That post outlines how we imporved the engineering experience in shipping code tough Hubot.

Bug Tales: An L that matters

L is nothing more than a letter but it can also be the source of bugs.

How to test Go HTTPS Services

An overview about how to write unit, and integration tests for Go HTTPS Services.

Slack App Usage Tracking

How we did the simplest thing that could possibly work to track usage in the DNSimple Slack app.

Writing composable community Chef cookbooks: learning the new cookbook DSL

This is what we learned when we rewrote our open source PowerDNS cookbook using the latest techniques.

Create the tools that you need

We scratch our own itch by scripting a small thing that let's us know if our freshly created DNS records are ready for us to access.

API v2 Architecture and Hanami

One of the goals of the API v2 was to develop a maintainable solution without sacrificing performance; this is how we use Hanami at DNSimple to achieve that goal.

Pushing Performance with Tuning

So you have troubleshooting theory down, but how do you fix what isn't actually broken?

Using shared examples and shared context in infrastructure testing

How to use shared_examples and shared_context in ChefSpec.

Package all the things!

Make your software deployments with Chef a lot simpler by packaging all the things!

Migrating scheduled tasks from Clockwork to Sidekiq Enterprise

In this post I explain our decision to migrate from Clockwork to Sidekiq Enterprise, and how we used our application metrics to determine the success of the project.

Bug Tales: Trust nothing but the real thing

A story of a bug, what we did to fix it and how we prevent it from happening again.

Writing Ruby gems with Rust and Helix

Learn how to write faster Ruby gems with Rust and Helix.

Tales of a Chef Workflow: Data Bags

Data bags are a useful, but sometimes dangerous feature of Chef.

Registering a domain from Elixir

A step by step guide to successfully register a domain name using the Elixir language.

Tales of a Chef Workflow: Attribute Layering

Lessons learned about attributes from years of working with Chef.

Tales of a Chef Workflow: Cookbook Organization and Maintenance

Lessons we've learned by organizing our cookbooks including proper naming and maintenance tasks.

Checking domain availability in Elixir with the DNSimple API

How to check if a domain name is available to be registered using Elixir and the DNSimple API.

Why we ended up not using Rails for our new JSON API

After a few years of running our previous API in production, it no longer fit our domain management automation vision. This is the story of how we evolved the API to support our product vision.

Using the Go language to guide development design decisions

In this talk transcript you'll discover why Go was so important to us and why it was used to guide the development design decisions.

The mystery of Stunnel, ulimits, and maximum open clients

We use Stunnel to provide secure encryption to our redis instances. Recently we embarked on a voyage deep down the rabbit hole in order to fix an elusive error. This is the story of how fixed it.

Getting started with the DNSimple API in Elixir

A step by step guide to successfully make your first DNSimple API call from Elixir.

Tales of a Chef Workflow: Packaging

How to escape the anti-pattern of building packages from source in Chef Cookbooks.

Ruby Coercion Protocols Part 2

What's the difference between `#to_i` and `#to_int`? How to sum two value objects? Let's learn Ruby Coercion Protocols in depth.

The journey of simplifying our CSS

The steps that we are taking to simplify and ship faster projects with less CSS.

API Client Testing with HTTP Fixtures

As part of the development of the DNSimple API v2 we introduced HTTP fixtures as a way of testing behavior across multiple clients. Here is how it works.

Ruby Coercion Protocols Part 1

Ruby has powerful protocols to coerce a type into another one. We'll learn how to take advantage of this mechanism to make our code open for extension.

Building the DNSimple Slack app

A few months ago we released the DNSimple Slack app. This is how we built it and the challenges we faced.

Improve your Dev and Ops skills with Troubleshooting Theory

How to use basic troubleshooting theory to debug your code, your infrastructure, or your malfunctioning computer or router at home.

Purposes & Properties of Value Objects

What is and what makes a good Value Object? Learn how to implement their fundamental purposes and properties.

Overcoming Primitive Obsession

Ruby primitives are so powerful that we use them everywhere in our code, even when we shouldn't. Learn how to overcome this kind of maintenance problems.

Alerting at DNSimple

Effective monitoring and alerting can be difficult; here is how we handle it at DNSimple.

Learn the DNSimple API by Bulding a CLI in Golang

Ready to automate your domain management? This post will walk you through connecting to the DNSimple API and performing basic domain operations with the official DNSimple Go API Client.

Nil is a value

Lessons learned from a recent bug in our code, caused by nil not being handled as proper value.

How I use the DNSimple Chef Cookbook

David shows off some examples of the newly updated DNSimple cookbook.

Auto-publishing a static site to CloudFront using Travis

Instructions to deploy a static-generated site (Jekyll, Nanoc, ...) to Amazon CloudFront or S3 using Travis.

Operating Distributed Systems at DNSimple

We operate DNSimple across 5 data centers, this post covers some of the challenges we face, how we handle them today, and what the future may hold.

Technical reasons behind the ALIAS record

In this article I will try to explain the technical reason behind the ALIAS record and important limitations of the CNAME record you need to know.

A Go Redirection Service

An overview of how we switched the implementation of our redirector from Ruby to Go.

Domain Management Automation

Start your 30 day free trial today!

We won't charge you until the trial ends.

DNSimple is domain management automation