Needlessly complex software
May. 12th, 2020 05:52 amI have been curious to notice a software trend this millennium toward complex software frameworks. I am happy to include package managers, build systems, etc. among that together with software libraries. Especially, ones that are fussy about how one sets things up (cabal, cgdconfig, …) and throw a tantrum when things are not as they like (apt-get, systemd, …). Once one mixes configuration management, continuous integration, etc., into the mix then there is typically a lot of supporting infrastructure to learn before one can get anything done. For me a corollary is that it is getting difficult to expect software developers to be experts in everything. For example, in my last job, sure, I learned and worked on our in-house Maven plugins, in the previous I understood the Perl scripts that satisfied some system needs, but there was no reason to train the whole team in them as those aspects were largely peripheral to the real deliverables.
A couple of trends intrigue me. One is the degree to which some tools seem to be much keener on making me do things a certain way rather than just letting me perform some simple action I know is possible. We are no longer in the days of make and sh. The other is the degree to which popular tools help me with problems I didn't have while being fussy about things I don't care about: they don't get me much further toward my goal, they just wrap my solutions and workflows in distracting clutter. Are my pain points so different from others'? It is plausible that, for some reason, they are. It is not as if I am a casual anarchist, for example I am very willing to use programming languages that require explicit static type declarations, but for me those clearly bring more value than they impede progress. With my current Java work I am similarly happy to add code comments, unit tests, whatever. And, some larger frameworks are useful: for instance, I thought Robot Framework worth the effort for user interface testing.
While each new project dependency may come with a glossy website enumerating benefits, it is well worth considering how much one needs the value they bring, weighed against one's team's learning curve and one's business exposure to another source of unwanted behaviors and bugs: the tutorials may make it seem easy to use but how much more to be able to fix it when it goes wrong? Simplicity no longer seems to be the virtue it once was.
A couple of trends intrigue me. One is the degree to which some tools seem to be much keener on making me do things a certain way rather than just letting me perform some simple action I know is possible. We are no longer in the days of make and sh. The other is the degree to which popular tools help me with problems I didn't have while being fussy about things I don't care about: they don't get me much further toward my goal, they just wrap my solutions and workflows in distracting clutter. Are my pain points so different from others'? It is plausible that, for some reason, they are. It is not as if I am a casual anarchist, for example I am very willing to use programming languages that require explicit static type declarations, but for me those clearly bring more value than they impede progress. With my current Java work I am similarly happy to add code comments, unit tests, whatever. And, some larger frameworks are useful: for instance, I thought Robot Framework worth the effort for user interface testing.
While each new project dependency may come with a glossy website enumerating benefits, it is well worth considering how much one needs the value they bring, weighed against one's team's learning curve and one's business exposure to another source of unwanted behaviors and bugs: the tutorials may make it seem easy to use but how much more to be able to fix it when it goes wrong? Simplicity no longer seems to be the virtue it once was.