The Power of a Guarantee

choosing software development tools

As a software developer, I constantly rely on the work of other people. I rely on the work of my coworker across the room, the work of nameless contributors to open source projects, and especially the work of technological pioneers from decades past. Far from being starved for choice, developers today are overwhelmed when it comes time to choose the right tools, libraries, services, and paradigms to get their jobs done. Today I took stock of what I rely on and noticed that the important tools were the ones that made the most audacious guarantees.

The kind of guarantee I'm referring to is the sort that deals in absolutes; words like "always" and "never". A good guarantee doesn't promise to take you halfway to a destination most of the time. Here are some examples taken from the promotional material for tools that offer the right sort of guarantee (emphasis mine):

Eliminate the "it works on my machine" problem once and for all. — Docker

All you need to do is supply the code. — AWS Lambda

Yarn is able to guarantee that an install that worked on one system will work exactly the same way on any other system. — Yarn

A number of more general programming concepts or standards make guarantees:

An API (Application Programming Interface) is best thought of as a contract provided by one piece of computer software to another. — Chris Beach, Quora

...using GET or HEAD on a resource URL, should NEVER change the resource. — Joshua Thijssen, REST CookBook

If a program passes a static type checker, then the program is guaranteed to satisfy some set of type safety properties for all possible inputs. — Static type checking, Wikipedia

There are many ways to evaluate software development tools, and even more tools to choose from. Longevity, documentation quality, reliability, and popularity are all things I consider when choosing tools to rely on. The extent and strength of the guarantees that a tool makes is another useful measure.