DevOps inspiration from Toyota Production System and Lean considered harmful
Paul Boddie
paul at boddie.org.uk
Tue May 17 21:36:58 UTC 2022
On Sunday, 15 May 2022 19:22:43 CEST Carsten Agger wrote:
> I wrote a rant against the idolization of Lean and Toyota among certain
> DevOps people.
> Originally it was the synopsis for a more thorough article which I don't
> have the time to write, so instead I present only the conclusions. Maybe
> of interest to people here involved in programming (or union work and
> working conditions, for that matter) since DevOps is everywhere these
> days and has its good sides too.
>
> https://blogs.fsfe.org/agger/2022/05/12/devops-inspiration-from-toyota-production-system-and-lean-considered-harmful/
I saw this and, being partial to a good rant myself, considered commenting on
it. I think the adoption of Lean techniques and related methodologies and
practices, already controversial in organisational settings where people might
find their jobs incorporating elements of those techniques on the insistence
of management, has been undertaken rather uncritically (or cynically) not just
in DevOps but in software development and maintenance generally.
Naturally, there will always be good reasons for evaluating the way people
work and deliver results in other industries, particularly when those
industries appear to be better at managing projects and producing products
within time and budget constraints. And when people introduce elements of
practices from outside the software industry, skepticism is usually countered
with an insistence that lessons need to be learned (which I generally agree
with) combined with suggestions that skeptics don't want to change their ways
(which I obviously do not agree with).
Often, people have to accept such changes as a complete package, having their
reservations downplayed or mischaracterised, and this is how you can easily
end up with situations where good and useful techniques become packaged up
with less good and potentially harmful practices, perhaps even escorting some
other kind of agenda through the door. If you find yourself identifying and
resisting that broader agenda, it is entirely possible that you might risk
being categorised as "unprofessional" precisely because of a deliberate
conflation of practices, incentives and organisational politics.
It is interesting to consider how things have changed over the years, what
improvements have taken place, and what kinds of problems or problematic
trends have emerged. I think back to my consulting days a couple of decades
ago and it is fair to say that some things have moved on. Some of those things
are technology and tooling improvements, whereas others are social or
behavioural.
To take an example of a clear improvement in a technological form, people were
using tools like CVS to manage their source code back in my consulting era,
but few people were using things like branches, partly because tools like CVS
offered a rather incoherent experience with a lot of potential for mistakes
and confusion. When distributed version control systems became more prominent,
the industry gradually adopted them and started to leverage the benefits they
brought with them, thus changing development habits, mostly for the better.
Meanwhile, to consider practices that were deficient back in that era, I
remember the project I worked on having to deliver documentation on how the
software deliverables were to be installed, with a Word document being
painstakingly crafted, handed over to a bunch of other consultants (from the
same company), who then copy-pasted or retyped commands from the document,
handing it all back for revision if something didn't work. At that time, it
was obvious (but not to the rather backward project management) that the
proper way of delivering the system was through automation, with documentation
supporting that automation.
One can argue that the whole consolidation of development and operations into
DevOps builds on the realisation that developers cannot merely do their thing
and then hand it over to other people to roll out. Developers should not be
tempted into thinking that they operate in an ideal environment, although they
are usually disabused of such thoughts at university. However, one can also
argue that the two domains may require different skills and abilities and that
combining them dilutes an individual's necessary focus on two potentially
different activities, and it also excludes other necessary activities.
One prevalent trend that remains a source of conflict within the Free Software
realm (and elsewhere) is that of emphasising container-based deployment
(Docker, Flatpak, Snap, and so on) and seeking to bypass traditional software
distributions. We have all surely heard it said that distributions provide
packages that are "too old" whose maintainers "get in the way" and that other
ways are needed of getting the absolutely latest stuff. This narrative plays
into the whole DevOps culture: the developer has to get their stuff out there,
has been given or has taken on this task, and nothing should get in the way.
The problem with this empowerment of the "ops-conscious" developer is that it
eliminates any kind of role that seeks to preserve a coherent deployment
environment: the job a distribution package maintainer might do where someone
might consider whether the software is deployed correctly, has the appropriate
level of privileges, interacts with other software harmoniously, and so on.
Somehow, DevOps must absorb these concerns, but instead they are increasingly
neglected or denigrated, as noted above.
Consequently, the industry has evolved in the absurd direction of giving every
application its own container or virtual environment despite running in a
multiuser system that already has plenty of facilities for isolating
applications and restricting privileges (although I would accept that those
facilities might need some adaptation). In effect, it almost seems that
developers now expect to get their own virtual mainframe for their so very
important applications.
Even though there are benefits in having the ability to "spin up" virtual
machines on demand, and having been exposed to things like OpenStack I don't
deny that it can be fairly convenient, tools need to be developed and provided
to manage all these machines if everything gets its own "private mainframe".
Coordination or orchestration of these new-style units of computing also
becomes necessary. I remember tedious meetings with the customer in a
consultancy era project about which network ports were required by our
software, presumably to be scribbled into a Word document. There are certainly
arguments to be made for capturing all of this and integrating it using
technology, but I have reservations about the stack of complexity being built.
Perversely, as all this complexity spills out, presumably to be managed by big
companies with big datacentres, the measures to manage complexity are arguably
being neglected at the developer level. As developers clamour for the latest
latest, and to be able to roll it out at any time, all those university-taught
software engineering practices like compartmentalisation, defining stable
interfaces, and so on, have been abandoned in favour of continual system-wide
changes and pervasive refactoring, mitigated by the magic merge in people's
version control systems.
And where traditional software distributions have been rejected, developers
tend to seek similar levels of convenience elsewhere. It appears that this is
sometimes just a matter of pulling container images from Docker Hub or some
equivalent, or it is a matter of pulling down packages from the likes of
CondaForge, or even pulling down images containing packages from these non-
traditional distributions. Frequently, these alternative sources leverage
traditional distributions, but don't expect anyone advocating these
alternatives to acknowledge their hypocrisy. And as people rush to package for
maximum instant convenience, don't expect distribution-level quality control,
either.
People could potentially mitigate development chaos by laying down stable
components in their systems that do not need instant access to the latest
updates from upstream development repositories, and this would then lessen the
need for highly customised software stacks and deployment environments. But
this would need a mindset change, not only among developers but also in the
industry at large. After all, developers are not acting as they do purely
because they want to: it is because the nature of the work has changed, and it
is because something has to give when they need to get the work done.
This is where I belatedly return to the social aspects of introducing
potentially inappropriate methodologies to the software industry. We have all
seen waves of "rationalisation" wash into the industry over the years. When
developer salaries were seen as too generous, outsourcing and offshoring
pushed many of the supposedly interchangeable developer jobs to low-cost
venues with the idea that the grunt work could be done on the cheap, albeit
managed by high-salary consultants. Such trends neglected well-established
observations that good communication is essential in software projects, and so
quality and productivity suffered as a result.
What we arguably see now is a form of redefinition of the roles within the
industry, consolidating them into a kind of singular role where the occupant
is required to be "responsive" to whatever the demands of the job are, where
such demands are deliberately diverse so as to save the costs and the bother
of having specialists, and also to permit those occupants to be
interchangeable. Not that the motivation for this latter concern is
necessarily benevolent, either: while it is good for knowledge to be shared in
an organisation, the motivation for having redundancy in an organisation is
often the potential for making people redundant entirely (that is, letting
them go).
When I pursued a computer science education, I had hoped to find meaningful
and rewarding work in the industry, but the kind of "responsive" roles we see
now are effectively shallowing out the nature of the work. People are
increasingly expected to deliver direct-to-user improvements on a continuous
basis and to immediately respond to problems on an "everything has top
priority" basis. Wiping out distinctions between "development" and
"production" or "pre-release" and "release" might have ridden the industry of
tortuous "beta" phases and software that has not been given enough user
exposure, but it risks eliminating stability for both users and those who have
written the software.
A significant risk for the industry is the effect this has on endeavours that
require a sustained development focus without constantly being obliged to
tweak something or other for the supposed benefit of users. Some will respond
to such concerns by claiming that there are plenty of good-enough solutions
out there already and that people should take the consumerist approach of
picking and choosing, mixing and matching, and just give up on any significant
new (or humanely pursued) development effort. All this does, however, is see
people pile more and more stuff on top of the existing stuff - a heap of
dubious complexity - to try and do what they need to get done.
Another risk for the industry is a kind of concentration of power and
influence in organisations that are able to dedicate people to making
solutions that the rest of the industry, in its constantly hassled state, end
up having to adopt. Where does that leave individuals, developers or normal
end-users, having to effectively "take it or leave it" with regard to the
software they may obtain, whether it is Free Software or not?
I get the feeling that an upper echelon of the industry would quite like to
see the rest of the industry as nothing more than virtual warehouse workers,
scurrying around with their genius-designed products, bundling them up on a
just-in-time basis and grateful for the privilege of doing so. This vision has
not been delivered on previous occasions, but the one thing you can guarantee
is that the last time somebody tried, it wasn't the final time.
Paul
More information about the Discussion
mailing list