I get it though, if what you’re selling is “best practices” you’re obviously going to over complicate things. You’re likely also going to be very successful in marketing it to a profession where things are just… bad. I mean, in how many other branches of engineering is it considered natural that things just flat out fail as often as they do in IT? So it’s easy to sell “best practices”. Of course after three decades of peddling various principles and strategies and so on, our business is in even worse state than it was before.
In my country we’ve spent a literal metric fuck ton of money trying to replace some of the COBOL systems powering a lot of our most critical financial systems. From the core or our tax agency to banking. So far no one have been capable of doing it, despite various major contractors applying all sorts of “modern” strategies and tools.
Which might be worth it if something like Clean Code by the book was actually easier to read, maintain or do any form of team work on. I’d wager it’s not just your hardware which is going to have memory issues when you split that code out over 9 files and 3 projects though. It’s very likely that your own memory load struggles to cope, especially if it’s not code you’ve worked on recently.
Management then moves to a model of minimizing outlier behavior to reduce risk of any one dev doing stupid things. However this process tends to squeeze the "some competent dev" types out as they are outliers on the positive side of the scale..
It’s a balancing act of course, but I think a major part of the issue with “best practices” is that there are no best practices for every thing. Clean Code will work well for somethings. If you’re iterating through a list of a thousand objects it’s one and a half time slower than a flat structure. If you were changing 4 properties in every element it might be 20 times less performant though. So obviously this wouldn’t be a good place to split your code out into four different files in 3 different projects. On the flip side something like the single responsibility principle is completely solid for the most part.
Maybe if people like Uncle Bob didn’t respond with “they misunderstood the principle” when faced with criticism we might have some useful ways to work with code in large teams. I’d like to see someone do research which actually proves that the “modern” ways work as intended. As far as I’m aware, nobody has been able to prove that something like Clean Code actually works. You can really say the same thing for something like by the book SCRUM or any form of strategy. It’s all a load of pseudo science until we have had evidence that it actually makes the difference it claims to do.
That being said. I don’t think it’s unreasonable to expect that developers know how a computer works.
To be fair, it's possible that the current systems are just poorly documented. All the best strategies in the world are hopeless against poor documentation/spec work.
Anyway the old thing was build when the public owned their own IT. It’s been something like 25 years since that was privatised and nobody has been capable of replacing that old system, meaning that the old organisation which is now a private company has a monopoly. Which is against our law.
There is really not a lot to it technically. But apparently it’s proving impossible to replace the mainframe way of dealing with it through the CISC input terminal thing. I have no idea why, we’ve had some of our biggest IT suppliers taking turns at cracking it and nobody has been able to so far. I think the ultimate “must not break” deadline was 10 years ago.
This was the “easiest” example. A lot of the others have decades of stuff build on top of them. There is the COBOL core and what has been hard for people to replace here is the bi-temporal data. But on top of the maintain there is a myriad of different Java services (only Java if you’re lucky) which turn the data into something which can be worked with and consumed by well, http.
CP/M programming is a lot of fun, even these days! I have a growing collection of retro machines running CP/M, my latest compiler has a CP/M backend, and I have even written a book about the design of a CP/M compiler: http://t3x.org/t3x/0/book.html