Certain things are wonderful because they are unique. Artwork, musical performances, memories, the important people in our lives. In these cases, we treasure differences.
That is not true, however, for software development. While a service or a feature may perform a very specialized task, the background infrastructure isn’t helped by inconsistencies. Every time you add a different piece of hardware, operating system, software platform or process, you multiply the number of ways you’ll need to maintain your code, impacting quality and driving costs up.
In the technology realm, these inconsistencies are referred to as “snowflakes.” I like to refer to the process of eliminating these inconsistencies as melting snowflakes. Because, just like in real life, snowflakes may be interesting, but they’re not great for software development—they often make you slow down or slip up when you want to move quickly.
What once was a feature now is a challenge
Different tools for different jobs. That makes sense in a lot of contexts. Trying to drive a nail with a screwdriver is unpleasant at best and probably dangerous—and takes a lot longer. In the early days of computer programming, we had lots of tools (hardware platforms), lots of blueprints (programming languages) and lots of different kinds of supplies (data formats). We used them in whatever combination made sense to solve a specific problem for a specific set of users, often within a very specific set of circumstances.
Think of it this way: the tools, blueprints and supplies used to build a small beach cottage for a family of three are very different than those used to build a skyscraper with thousands of apartments. Even though the task—build a place for people to live—seems very similar.
That was, in the “old days” of computing, a feature. This tool, this program, this platform has been optimized for a specific use in a specific environment.Today we have a situation where almost everyone’s computing environment has been tremendously homogenized because of the internet Click To Tweet
Fast forward to today, though, and we have a situation where almost everyone’s computing environment has been tremendously homogenized because of the internet. It’s as if we all moved from that little cottage to the big city, but many of us are trying to build skyscrapers using toolsets we brought with us from the beach. Imagine how much longer that would take, how much more expensive, and how frustrating.
Too many specialized tools, too many variances in development, too many snowflakes.
Vertical and horizontal snowflakes
When I discuss this subject with nontechnical folks, they almost always get the problem with “horizontal snowflakes.” That is, using different tools to build different applications and services. They can see the benefit of using the same systems and processes across all of a company’s software. That’s because as software consumers, we’re accustomed to thinking about how we use software.
Equally important for those who make software, though, are the environments in which it is created and maintained:
So to complete “Program 1,” you may have to move through a variety of environments in which snowflakes can multiply. For example, if you’re running test code on a slightly different system than that used to do development, you increase the chance for errors that will then need to be ferreted out in multiple places. By making all our environments as similar as possible—by hunting down and removing snowflakes—we can dramatically eliminate downstream errors and improve the velocity with which we write, test and produce quality software.
Which, in turn, means faster response to customer needs, faster quality improvements and faster implementation of improved standards and benchmarks.
The forecast calls for sun
OCLC has a very rich history of software innovation and development. In many cases, that meant we were able to develop specific solutions for specific types and sizes of libraries, different library departments and even very exact job requirements.
You can see where I’m going with this, can’t you?
That’s right. With 40+ years’ worth of development experience, we’ve collected a lot of tools. As I said earlier, the ability to develop highly differentiated applications was, until recently, a positive thing. A feature of good development practices.
It’s sometimes easier to focus on the equipment and technology portions of your IT plans. We’ve implemented a new data center strategy and have been doing major equipment and infrastructure upgrades over the past year. Those efforts seem substantial and easy to quantify. But improving our overall software development processes is, in fact, even more important. Because whatever and wherever the equipment is, fewer snowflakes means more speed and better turnaround times for our members.
We want to get you where you’re going faster. And that’s easier on a sunny day and a nice, dry road.