Since releasing k8s-ecr-login-renew about a year ago, I’ve been pleasantly surprised in two ways:
- The tool is on track to being downloaded 10 million times (around 9.5 million last time I checked)
- I’ve had about 3 feature requests on the GitHub repository (and 3 contributions)
To me this is a great victory: I released a tool that a large number of people are finding useful, and the tool has had almost bugs and very few features requests. I seem to have done something right with this piece of software. I wouldn’t call it accidental, but many of the things I did were subconcious.
In this post I’d like to consider what factors helped get me to this desirable result.
Test Privately Initially
This tool existed for over a year before I released it. I needed this tool for my own Kubernetes cluster, and that’s where I used for a long time. During that time, I refactored and played with the code in many ways. There was a lot of churn, but since I was the only user it was totally acceptable.
I believe this strategy allowed me to easily refine the tool and achieve a high level of stability. Oftentimes, if you release your software too early, you are stuck with bad design decisions that are hard to change. If you write your code to use MySQL and release it, it would be very difficult to switch all your users over to PostGres.
On the other hand, staying stealth mode for too long has several disadvantages:
- You miss out early user feedback to improve your software
- You lose out the joy of sharing your work with others
Keep the Scope Narrow
k8s-ecr-login-renew does one thing: It renews your AWS Registry credentials.
- Does it support Azure? No.
- Does it support other types of registries? No.
- Can it fetch its secrets from HashiCop Vault
Leverage Existing Building Blocks
The tool is meant to be run periodically to refresh Docker credentials. While I could have built a timer and loop into my code, I decided to offload that responsibility to Kubernetes itself.
Minimize your Dependencies
The tool has only two dependencies: The official AWS and Kubernetes packages. Keeping the number of dependencies low reduces the amount of time I have to spend testing new versions of libraries and worrying about breaking changes.
Final Toughts
As of today, the tool has been downloaded nearly 10 million times. To be clear, this doesn’t mean I have 10 million unique users.
One concern I had about writing open source software has been the maintenance burden that it could create.
Happily, this has not been the case with k8s-ecr-login-renew.