Code As An Infrastructure, Java, Python & Cloud Machine Learning
Code As An Infrastructure, Java, Python & Cloud Machine Learning Many years ago, back at Google, the junior me suggested a crazy idea: every line of code has a half-life.
In other words, the company commits to keeping no legacy code, by constantly updating its codebase.
Say, your team shipped 20K lines of code in late 2008. At most half of them are allowed to still be part of the codebase by the end of 2010, at most half of the half can remain by the end of 2012, etc. If your code is business-critical, then make sure you re-implement at least half of its logic every two years.
Back then we concluded that it’s not too bad of an idea, especially if we can keep the tests. Which we, of course, can.
Obviously, companies (and, especially, managers!) would not endorse such an approach. They are mostly in the “move fast, break things” mode, regardless, with tech debt piling up year after year being the rule, not an exception.
I still think it’s a good idea. If your friends are building a company this way, let me know — I’d love to talk to them, at least.
~ ~ ~
These days I am having a déjà vu when it comes to infrastructure as code.
How about introducing the term half-life for infra? At least half of the servers configured for production use today will need to be re-configured again. Just a month from now.
If you are cloud-first, you are, in a way, already half-way there. Servers die, or get decommissioned, in addition, you have to have the process by which your code can be re-staged on fresh machines, being fully connected to the rest of the fleet.
Admittedly, in most companies there will be a few servers with fine-tuned manual configuration, for which this job is more manual than just a few actions. Those are exactly the points of impact that are not getting the attention they deserve most these days, and those are exactly the ones, IMHO, which a new solution, once it emerges, would improve the most.
A big reason I like the cloud is that it’s easier to be disciplined. Especially if your deployment has to follow certain rules and constraints.
For on-prem deployment, this “luxury” is not there. In a way, it is making the DevOps job much harder in the long run.
~ ~ ~
Curiously, this is where the crypto community might be ahead of the curve.
The crypto folks don’t have the luxury of relying on some cloud infra. At the same time, crypto solutions can not afford manual configuration, mostly because they are, well, decentralized by design.
But designing software to run in a 100% decentralized fashion doesn’t necessarily solve the problems right away. Sure, decentralized solutions are a lot harder when it comes to reliability, low latency, and safety from bad actors. Still, a lot more down to earth problems, such as fault tolerance and node discoverability, have to be taken care of.
~ ~ ~
I am going to make a strong claim — and a falsifiable prediction! — that if a new and effective configuration / server management solution for one’s own cloud, or for a hybrid cloud, would emerge, it would come not from the people who are thinking 24/7 of how to improve Chef or Ansible or Kuberbetes or CloudFormation.