johno

Stability

Stability is hard to achieve. It can take weeks/months/years to find it, whether in life, love, work, or anything else. When you find it, you don't have to change everything on a whim. You don't want to. In fact, sometimes you want to foster the characteristics you like, the ones that got you there. You now have something predictable, you have something you understand.

This is good.

What is stability?

  • Predictable - obligations are met
  • Optimized - problems are addressed
  • Reliable - testing is involved

Let's talk about software

I'm a minimalist. That characteristic can be easily found in the libraries I build and share. Minimalism doesn't mean single line modules (of which I've built many), minimalism means focusing on the forest and the trees. In certain cases something all encompassing is more minimal than something built with 100s of modules. Other cases are the exact opposite. Doing one thing and doing it right is extremely important. Navigating that can be difficult, but always a worthwhile endeavor.

What does stability mean in software?

  • Input X results in Output Y without side effects
  • Upgrading version 1.0.1 to 1.0.2 won't break your app even if 2.0.0 might
  • Breaking changes aren't catastrophic

Stability sometimes means being radical

A feature that enters a project will never leave. As a project and its exposure grows you're often left with an ever growing burden of complexity. So, for stability, you have to say no. A lot.

Is it dead?

When you achieve stability you'll be ridiculed by many avatar patterns on GitHub.

Is this project deprecated? It hasn't been updated this month.

I've built my fair share of libraries and have seen many "Is this project dead" issues in my notifications. I don't think it's malicious. We've developed this norm that successful projects are updated daily. Many of the large projects in open source software are updated hourly.

Those are the exception.

Many folks might be surprised if they audited their dependencies. Many companies might be surprised that a core library they depend on is written by someone as a hobby.

Achieving stability

Stability sounds great, but it's difficult to find. I've had projects that take 20 minutes to achieve stability, like a one line module which took my 19 minutes to test.

I've also had projects that take years to achieve stability. There can be a large amount of experimentation and churn. Breaking changes are everywhere. At some point a lot of it stops.

Maybe it's stable now?