Two days ago software engineer and fellow blogger Tom Hombergs asked on Twitter if software development had grown harder over recent years, to which I replied:
“Incoherent ramblings of a greybeard (without a beard, which is weird; these words rhyme, which is even weirder …), who has seen at least 3 fat-client-thin-client cycles (the standard time unit in software architecture): As usual it depends. Just a few examples:”
For the purpose of this blog post I just deemed it more sophisticated to call them “musings” rather than “incoherent ramblings” while in fact they’re probably just that ;-) So, here goes:
#1 Spring Webflux and the “Everything has to be reactive even if the requirements don’t demand it.” craze is a bane. Just recently, I’ve been helping a client with getting Spring 5’s WebClient to work with a proxy.
Turns out WebClient uses keep-alive and max-idle settings that make some proxies close the connection before yielding a response. So, here I am in 2020 debugging and fiddling about with TCP connections. Leaky abstractions all the way down …
#2 After at least a decade of constantly using it, I still find Spring Security and its half-baked builder pattern for configuring security settings to be utterly baffling. I can never seem to get it right on the first attempt or without consulting Google.
#3 Configuring cloud services such as AWS still is convoluted and cumbersome. Having used CLIs literally for pretty much my whole life (starting with C64 BASIC …) to some extent I also don’t get the appeal of configuring servers with YAML files rather than shell commands.
Yes, they allow for consistent and reproducible builds but again, they tend to suffer from leaky abstractions. However, considering what things used to be like before AWS, it’s not that bad at all. Worst case, your API for provisioning new resources was a grumpy sysadmin …
#4 Then again, just today, I’ve automated Angular dependency updates (‘ng update’) with GitHub Actions and CircleCI. Scheduled update checks -> pull request upon new versions -> automated build and test -> automatically merge update branch. No more tedious manual updates.
#5 Recently, I’ve also been delving more deeply into React and Node.js (in its Feathers incarnation) again (with Angular and Spring Boot being my usual technologies of choice) because client requirements justify using those (embedded systems with rigid memory and CPU constraints).
If you stay clear of the “framework du jour” fad and the fatigue that results from that and just focus on the requirements instead working with these technologies is a pleasant experience: (Mostly) simple, fast, plenty of reusable components, great developer tools.