Rails 3.0.5 broke my routes and kicked my dog

We just upgraded AdGrok from Rails 3.0.4 to 3.0.5, which was released a couple days ago. This is a “patch release,” which according to the rules, has only backwards compatible bug fixes.

A bunch of our integration tests failed before we pushed to production, and we found out that a pretty big change was introduced: namespaced urls are now prefixed by the namespace, and before 3.0.5 (like, 3.0.4), they weren’t.

Here’s the simplest example of what’s going on:

Continue reading

Deliberate Change Management

Software engineering can be described as the orchestration of a quasi-denumerable set of moving parts.

With so many moving parts, breakages occur. One main goal as a “software craftsperson” is to never expose customers to the affects of these breakages. Test-driven development rose from this desire. Accepting that systems break, even in production, motivated loosely coupled and shared-nothing system architectures.

Continue reading

Defensibility as an touchstone for development decisions

The topic for this “Software Development Mantras” post is “defensibility.”

First, let me introduce the concept of “TIMTOWDI” (pronounced “tim-toady”). It’s an acronym for “there is more than one way to do it,” and software development may be unique in that for any given task, this holds true.

Continue reading

Completely Correct DRY Simplicity

This is the first in (what may be a series) of posts where I’ll share some concepts, or mantras, that I’ve found helpful in my experiences with software development.
The following are some of the lowest hanging fruit. These should be (but aren’t necessarily) common sense for all software developers:

Continue reading