Don't bet the farm (on platforms)

Stuff fails …

99.9% of species that have ever lived are extinct; 95% of new products fail within a year; 90% of tech startups fail; 80% of new nightclubs fail within a year; 60% of new restaurants fail within three years.

How can all that be true? Mother earth is teaming with life, the tech industry is integrated into our lives more than ever, and our food & entertainment options present a daunting paradox of choice.

DNA itself is relatively immutable, but its arrangements are not. Raw materials, simple machines, Newtonian mechanics, trade – all things that someone 100 years ago could relate to, but you might have a hard time explaining what's inside a copy of SkyMall. Technologists are not taken out back and shot when their startup shuts down, likewise for cooks and bartenders.

These relationships are not unlike a medium to [an artists] work. Arguably not unlike the dynamics of software. More generally put: the means of manifestation to the idea.

Today may not survive tomorrow, but yesterday probably will …

How does the likes of the horseshoe crab, IBM, KFC; or RJ-45, C & Unix survive in such volatile landscapes?

Nobody really knows, but there is a theory that posits that the longevity of an idea is related to its endurance. If this doesn't seem like the easiest thing to grok, consider the effort of removing or displacing (or disrupting) something very established vs something very new.

… the price of beans

What does this have to do with my humble software? Allow me to pick on Docker.

Docker is so hot right now

Docker offers a lot of value separating a runtime environment and the underlying target environments.

Docker is relatively new for a platform tool: about 1 year since 1.0 (at time of writing), production use was officially discouraged prior. It is also very active (read: volatile). Does that make docker bad? Not at all, but it does make it immature.

Am I saying that docker will fail? No, I'm saying there is a greater chance of it failing than Unix's file system, virtual memory and processes model. Apologies if this seems silly and obvious.

"But Docker has some really big wins!", one might opine. Maybe it's not your choice. Likely your enterprise application will outlast Docker, at the very least its current form. So how can this type of bet be hedged? Be prepared to move out.

Have a move out plan

How much effort does it take to run your app on some other distro? or other unix?

Do you use Python? Assume this other distro doesn't ship with a compatible python. If you can build your python you can ship it. Same goes for libcurl & openssl.

Will your app code need to change? or just the runtime configuration? The latter is cheaper to manipulate.

How does the app get started? what are we using this week? systemd? upstart? init? Own your process supervision – daemontools & friends (runit, perp, s6, …) These work fine inside containers, and under the stock init system. They are simple and can be built everywhere.

You get the picture – own the things you depend on. This seems like a lot of hassle, but most of this is a one time up-front tax. Options are rarely free, but the are cheaper than losing the bet.

What do you get for all this? Assume Docker went away, you'd only have to retool your configuration. The app code … the most expensive & risky stuff remains robust to this event. Now try to imagine the alternative.

You can confidently configure a deploy via Docker, directly onto almost any Linux distro, some other Unix, or the next thing that is so hot right now.

popping the stack

Restaurants buy used equipment; business rent space previously occupied; experienced people find new jobs; DNA mutates. Take advantage of the well-established works available.

Neophilia is widespread in the tech world. Not without good reason, there is much upside to change. Keep in mind that many of the risks can be hedged. Make the bet, don't be the farm.