Burning Down Your Backend

Evolving your product isn't easy. Best case, nothing breaks, users love it, and you high-five until your hand hurts. Worst case, Digg v4.

But it doesn't have to be hard. There are ways to make the transition smoother. For instance, Adzerk recently migrated from Reporting Backend 1.0 to 2.0 without any major incidents or late nights. How'd we do it? Read on!

Read More

Scripting with C

C rocks, and is super fun to program in, but it's hard to use for scripting because (among other reasons!) programs need to be compiled before they can be run. Let's automate that part!

First you need a little script I wrote called mkgo. It compiles, caches, and runs C files in a manner similar to Python.

Read More

Expedient Set Operations in Unix Shell

Set theory rocks. It especially rocks for programmers, because set theory and computers have a special relationship. You see, if you can describe an answer you want in set-theoretic terms, using a programming language with support for sets, the computer can execute your description and give you an answer.

Compare this with what we normally need to do to get an answer from the computer: describe, with conditionals and jumps and counters, exactly the steps the computer must perform in order to answer our question.

Read More

Kanban and the Stages of Grief: A Semi-Agile Model for Software Development

Over the past few weeks, Adzerk has been testing out a variation of our Kanban process that was inspired by Elisabeth Kübler-Ross' five stages of grief. We've found this model to particularly well-adapted for our organization— a Clojure shop with eight developers and a highly technical support and account management team.

It may seem morbid to base a system for product development on reactions to death, but software is a world of constant change, and with change comes loss. It's better to maintain the view that all our code will eventually break or become obsolete than to assume that the code we write will last forever. (Not to mention features launched that are abandoned by customers or fail to solve their problems.) Ultimately, grieving and software development are not unrelated.

Read More

Boot 2.5: Slow is smooth, smooth is fast

If you like Clojure, you'll like Boot. It's a functional build tool, written in Clojure, and 2.5 is our finest release yet. Learn more and get started

Boot logo

There is an old adage: slow is smooth, smooth is fast. The idea is, if you want to be really fast at anything, don't be reckless. Instead, be careful and deliberate. Reckless gains are quickly lost. Real speed comes from mastery, and mastery is a slow process.

Since we released Boot 2.0 back in May we've proceeded carefully and deliberately. As a community, we've been helping eachother use it every day to build, deploy, and operate Clojure and ClojureScript applications.

Read More

Getting Your First Programming Job: Not as Hard as You Think

Happy Cake Day to Me

At Adzerk, when someone has been working here for exactly N years (i.e. every year on the person's "work anniversary"), we take a cue from Redditor culture and refer to that day as their "cake day." Today is my first cake day. This marks not only my first year working at Adzerk, but my first year working anywhere professionally as a software developer.

Read More

How Adzerk Teaches Non-Engineers to Code With a Programming Club

From the very earliest days of Adzerk, CEO James Avery has wanted everyone in the company to be a coder— not to push code to the product itself, but to be able to program as a skill. But why would a sales rep or HR manager need to understand how to write software? Well, why not? We actually have several good reasons:

Read More

Learn from AWS outages with After-Action Reviews (AAR)

This morning at Adzerk we experienced a host of operations problems because of AWS outages. We became aware of the problem early and pulled together to restore all Adzerk systems. After we recovered, I began to think about how we'll improve our response to outages like this. One way we'll improve is by understanding what happened and thinking about how we should respond in the future. We'll do this during a kind of meeting known as an an After-Action Review (AAR).

Read More

Splint.js: Functional first-aid for legacy jQuery applications

We're working on the next version of our web-based management User Interface (UI) in Hoplon, a ClojureScript framework, and we're really excited about how much faster, more robust, and easier to use it will be.

In the meantime, we will continue to support and improve our existing UI, much of which is written in JavaScript. Unfortunately, like any successful JavaScript code that's a little heavy on jQuery selectors and callbacks, and a little light on architecture, parts of it are pretty gnarly.

Read More

Using Docker to Run Boot From Anywhere

If you've been on the Internet sometime in the last 2 years, you may have noticed that Docker is becoming extremely popular. If you've ever tried Docker*, then you probably know that it's for good reason. Docker is great. The core concept is really pretty simple: Docker uses Linux Containers (LXC) to allow you to run and deploy applications in a controlled environment. You can start from one of the 13,000+ available base images, install packages or otherwise set things up however you'd like in order to run your application, save your configuration as a Docker image, and then spin it up anytime you want, on any machine, anywhere.

Read More

GitHub Streaking for Fun and Profit

At the time of writing, I'm on day 68 of my longest GitHub streak yet. It's been the most productive 2 months ever, and I intend to keep the streak going for as long as possible. My secret weapon? The concept of the GitHub streak itself.

Many people have blogged about this before, and for good reason. I'm convinced that the "Seinfeld Streak" is one of the most powerful techniques you can utilize to increase your productivity and develop good habits. The premise is simple: do the thing you want to do on a daily basis, and keep track of your streak. Whatever you do, do not break the chain. It may seem like kind of a silly idea on the surface, but in practice, I've found it to be incredibly motivating. GitHub is already keeping track of my streak, so my goal is just to keep that number increasing every day. If I miss a day, my streak will go back down to 0 and I'll lose all of my progress. That knowledge is all the motivation I need to push code every day and maintain my streak.

Read More

Adzerk's Core Values

Adzerk crushes it

Much has changed at Adzerk over the last 6 months. We had great leaders and employees move on to new challenges, but in turn we've hired awesome new people to join the team. We are now 12 people with plans to grow to 15 people in Q1. One of the challenges of hiring new people is ensuring that the things you love about the company stay the same, but hiring new people also creates an opportunity to fix some of the things that weren’t so great.

Read More

Boot 2.0 RC1: Stable API, Immutable Filesets, Growing Community

Boot Logo

Yesterday we released Boot 2.0 RC1 (Release Candidate 1), the newest version of Clojure's most exciting build tool. With this release, the Boot API is now stable, and task authors can be confident tasks written against RC1 will work through future 2.0.x series releases. We also think Boot now meets or exceeds the requirements of most Clojure and ClojureScript projects, and we encourage you to try it out. We've been using Boot here at Adzerk for a variety of projects with great success.

Read More

ClojureScript Builds, Rebooted

Build tools are great. They're the part of the process of software development that only developers see–The Aristocrats of computing, a secret handshake we don't generally trot out for clients or bosses. Here at Adzerk we've been polishing our Clojure workflow and I'd like to show you some of the tools we've built.

See, the thing is... well... the thing is we're not using Leiningen. If this blows your mind too much you may want to get your earmuffs ready, because it's going to get weirder. We're using boot, a new Clojure build tool, to manage our build and deployment, and so far it's been great.

Read More

A Dashboard With Hoplon

Last month our own Alex Carl and Ron Nelson attended CED Tech Venture Conference, a regional networking event for North Carolina startups and investors.

Ron, our Director of Sales and resident Mario Kart prodigy, also gave a short presentation about Adzerk's rapid growth over the past year.

While I didn't personally attend the conference, some software I wrote did. That software, the "Impressions Dashboard", is a single-page application (or SPA) showcasing our technology and some of our customers. Alex and Ron set it up to run on a Macbook connected to a TV at our booth.

Read More

Creating A Company Constitution

There is always a big focus on a company mission statement or mantra – the goal with a mission statement is that you will outline the core values that drive your company and that this statement can be used to help the company stay on course through the great times and the challenging times.

The mission statement is analogous to the declaration of independence – it didn’t define how our government would work but it outlined the core values that would govern the new nation.

Read More