Bipedal software engineering
I have been working in the industry for 15 years, and for all those years I witnessed the same trend over and over: technologies are changing faster and faster. Changes happen in all areas, and have one thing in common: replacement of a simple and rigid one with complex and agile.
Those changes often appears not as ‘shiny new toys’, but more of ‘all the running you can do, to keep in the same place’; that means: learn or become obsolete.
If you have too much to learn in a short time, you shift yourself from ‘in-depth study’ to ‘grasp something’. It’s uncomfortable. It become uncanny when you realize that this happens to every other engineer around the globe. Someone right now implements emergency nuclear reactor shutdown code in node.js microservice inside Docker swarm with reactor autodiscovery through Consul, which is continuously delivered from git with automatic merge of all changes passed CI tests and have been peer reviewed by PTL in Gerrit (got +2 — ready for production).
I really hope it was a joke.
Before explaining ‘bipedal’ part of title, I’d like to give you some Hesse’s The Glass Bead Game-style dream about perfection:
You spend five or six years on a generic education for your profession. Then you spend two or three years digging into details of a specific area of your future expertise. You start work as a apprentice of an excellent professional, slowly gaining extensive knowledge. You start doing own work under supervision of more experienced colleagues. Few years later you become fully qualified to do your job. You know everything you need to know, you are confident, you aim for perfection and have no limits on time and efforts to make things right. You create things, and they are good, you are proud of them. Later, next generation of well-educated engineers start using your products as a base for their work with full assurance of it been well-designed, well-implemented and well-maintained.
If you look at this as a whole, do you know what it looks like? A turtle. It slowly moves a leg, finds a proper spot to land it, establishes foundation, and only then shifts its weight. At every moment everything is stable, pose is always well balanced, each move is calculated ahead and is perfectly executed. It will never fall.
But wait. Is turtle style of changes a proper way for software engineering? If we compare turtle to a human, we’ll find that human is much less stable. It couldn’t even stand upright without constant corrections. Its movements are a constant falling with endless fixes.
The same idea is applicable for the modern software engineering. We run at high speed, without a single moment of stability. If we want to stand still we need constantly fix the way we stand. If corrections stop, we’ll fall. Dynamic equilibrium with constant efforts just to keep it.
Still bipedalism gives us dynamics, agility, speed, and freedom of motion. Our walk is done before turtle’s starts. ‘Turtle’ software engineering will lose to ‘bipedal’ one in most areas.
(At the same time we need to be aware of that ‘constant falling’ problem. If we send software inside hardware to Mars, it shall not be ‘constantly falling’, it should be at least as robust as turtle walk, even if it would take us eternity to develop it.)
I find myself as part of that ever accelerating motion, and I feel pressure to change a way how I deal with those changes. I need to look further ahead. I should try to use previous dynamics to keep motion without forceful stop (no more “This is good, we’ll use this forever.”), I should start to value fluidity of changes.
This is hard. This is painful. With dynamics and bipedalism come falls and broken knees. But I see no other option. I ought to drag myself to a brave new world, to new technologies even if previous one hasn’t completely studied. Constant ‘learning debt’ is a new norm. I need to adopt technologies before they are comfortably well-known… I hate this. But I don’t want to become a Cobol-turtle which is happy with stable things studied 40 years ago.
… and I should accept new technologies as ‘shiny new toys’ even if those toys force me to run as fast as I could.