what the fuck is devops anyway and why should i give a shit?
W..T..F.. is this new thing they call devops?
its even more of this absolute insanity of working endlessly
just to stay in the same place you were. keeping abreast of
the endless churn of meaningless 'updates' and replacing
all the components that keep getting deprecated (the easy
alternative to actually fixing bugs) nevermind that theyre
full of bugs while theyre still in use.. all to
accomplish a goal that one already had accomplished
last month, three months ago, a year ago, over and over,
but also a goal that we had solved decades ago with
simpler tools.. but hey, all the blogs say this is how we
have to do things!
At the core of this 'devops' craze there are a handful of
dogmatic rules, compliance with which in a sense comprises
the meaning of 'devops' as a word. The main items of dogma
are, each building on the others,
first, this idea of 'continuous integration and deployment', meaning
that there is no stable software environment, rather an
endlessly re-deployed binary soup constantly being updated by
whoever and whatever modifies it.
second, this idea that everything must run in a 'container'
on a 'cluster' in some manner 'managed' by a 'system'... which
concepts are poorly understood by these people, and which
in practice ends up being some mishmash of half-assed software
offferings that are trendy at the moment to provide more and more
layers of separation between running code and anything 'specific'
anywhere in the world. The definition of the value of the number 4
is too 'specific' and thus must be referenced from somewhere
should we want to change it - where we reference it from is
of courseone more of these pieces of critical 'infrastructure', which
as a rule must originate from some san francisco startup
made up entirely of 25 year old hipsters who spend all their time
drinking expensive coffees in absurdly decorated 'offices' which look
more like an ikea showroom. It of course , as a piece of software, itself
must also conform to this dogma of statelessness and dependence on
external 'infrastructure' which adds more links to the chain, and they
all get extra points if they dont run anything on any computers of their
own, but instead at the very least run them 'in the cloud' or perhaps
even dont run them at all but rather invoke them 'as a service' from
someone else's management. Moreover, as 'infrastructure' , it must
also conform to the dogma of 'continuous deployment' , so there is no
stability in these elements of 'infrastructure' either- things you depend
on are supposed to be changed out from under you with no warning
(wait you don't read all of our commit logs? youre not agile enough!)
and you're supposed to scramble to reconfigure or rewrite other things
(which if you're following dogma, means waving some magic wands far
far from an actual program or computer and letting subtle side-effects
percolate back) which of course also means other things you depend on
will have to do the same before anything works again.
but this is what they call being a 'ninja' or a 'rockstar' or some shit
like that, where you run around like an asshole trying to figure
out what the fuck just got broken and how to get your shit somehow
working again. over and over and over again.
third, the idea that everything is temporary, and therefore must be
stateless and therefore any state (alas that there must still be some
actual state somewhere, as much as these new age nihilists would
hate to admit it!) must be hidden 'somewhere else' as much as
possible. This idea gets repeated over and over up and down the
stack, so in the end you get this horrendous chain of reference, where
half a dozen different mechanisms for _transferring_ state in a
temporary manner, get used to keep pushing the origin of any information
further and further away, and at each stage there is some opaque
synthesis going on, where it is difficult or almost impossible to
reconstruct an accurate picture of just what the hell is going on
at any point in time, or to trace a change back to which _combination_
of fragmentary snippets of information in the various scattered stores
will yield which changes in behaviour. At many stages along this chain,
one might think one has found the spot wherefrom some item of data
might be originating, that it appears in the running instance,
only to find that changing it there does nothing, it's being synthsized
from somewhere even further up the chain.
What do you actually want? a more rigorous and robust
way of developing software?
there is no magical infrastructure which will do this for
you. The answer there really is in the category of
best practices and the simple tools we had decades ago were
fine for it - the real meat was always in discipline and
organization of your team. You should have been using
revision control, tests, backups, code reviews before
committing changes, and some kind of release engineering
already.. if you needed some magical tool calling itself
'technology' to get your act in order then you were
already screwing up.
There has never been and never will be a substitute for
actually knowing what you're doing and doing it well. No
matter how many software packages and how many management
fads come and go none of them will change this basic reality.
Though, by trying to enable people who don't
know what they're doing, to write some code, or to get
some results they don't understand, these tools might
simply make knowing what youre doing a whole lot more
of a pain in the ass by forcing arbitrary and pointless
complexity on the people who ultimately must make this
heap of junk work. Add to that the consequence of the
rest of the industry following the same fads, and you get
this neverending churn of half-finished software always
in flux, always needing attention, and a handful of smug
and dishnoest 'gurus', actually charlatans, who will sell
you the fantasy of everything ready and running at the
push of a button.
really, get over it. Institute some basic discipline
in your team, get a grip on understanding what the hell
you're doing and why you're doing it, and go back to
writing actual programs, maybe say some makefiles etc,
producing actual binaries, with minimal dependencies
and minimum sensitivity to other peoples' shit changing
on you unannounced, and try to regain some stability,
reliability, predictability, and reproducibility in
your software development.
*** BONUS RANT ***
this popular piece of shit called jenkins fails one
more of the golden design principles for good software,
which is 'use human readable data formats wherever possible'..
their brilliantly bloated binary log formats make it near
impossible to quickly just look at a log file without using
their horrifically shitty web interface (which by the way doesnt
even work with large logs, as these modern browsers seem
to choke the hardest on plain text files! ten tabs playing video
simultaneously, no problem. a half-meg text file? browser response
lag stretches out to close to a _minute_) , and also makes
any simple machine analysis very difficult (say i want
to run a simple awk script on the log to try to analyze something)
of course there's sure to be some 'plugin' for some other heavyweight
'tool' like elasticsearch or some shit, but for fucks sake,
i wanted to just do some stats myself on this fucking log file!
thanks again assholes!
followup: it turns out this is some dipshit programmer
on the jenkins crew deciding to output fucking HTML color and formatting
tags for EVERY GODDAMNED LINE of the log, and this HTML then gets compressed(!)
and encoded and takes up the first 300-plus bytes of every line (where your
typical line might be 50-80 bytes long on average! only a 10x blowup in logfile
for fucks sake people!
This file copyright 2018 by G. Economou