I wrote a post a month and a half ago in which I was waffling about getting back into Elder Scrolls Online. They had announced that they would be adding “subclassing” (or more accurately, multiclassing), which I thought was intriguing. I had kept everything as it was when I stopped playing. I left the door wide open to walk back through.
Their big patch came out, and I updated the game and tried it. Sure, it launched with a content expansion, but the new zone, with its new mythics and new sets and new achievements and all the rest was secondary to me. I didn’t pay for that. All I cared about was subclassing. I was going to see how that worked out before I dropped money on the expansion.
Now, you can’t just start using other class skill lines. You have to re-level them, even if you’ve maxed them out on other characters. And they level at half the normal speed, which I already thought was tedious. So I got to work, running dolmens in Alik’r and running around Spellscar in Craglorn. I used my high-level training gear for a 66% XP increase, my Mora’s Whispers mythic for another 25%, and scrolls for an extra 50%, 100%, and even one 150% buff.
I spent the next six hours in the game doing nothing but grinding. I finished three skill lines that were almost maxed on a couple other characters, just to unlock them for subclassing, and I got three skill lines fully leveled and morphed. I was working on one more, and had just gotten the last skill to level IV, ready to morph all the skills and level those alternate styles, when it finally hit me.
This wasn’t fun to me. This is the whole game; this combat. This endless click-click, click-click, click-click to the timing of an invisible one-second world clock. The net effect of it is like DDR or Crypt of the Necrodancer or something. And I wasn’t enjoying it. Still. I’ve always thought that the combat was the worst part of the game, and nothing about this has changed.
On top of this, the stress of needing to get all of these skill lines leveled and morphed, and then to follow the emerging meta build how-to videos, and then to take my new builds into old content to see how they were doing and how well I could manage it, and then to start taking it into new content and running down all the new collectibles and achievements… It brought back all the community-gatekept anxiety that was the reason I stopped playing six months ago.
So I quit.
I removed myself from all my guilds. I removed all my non-IRL friends. I left all the Discord servers. I stopped the subscription I had just signed back up for. I uninstalled the game. I quit following all the ESO streamers on YouTube and Twitch. I scrubbed all the videos about it in my watch history so that the algorithm would stop recommending them.
And I gotta say, for the record, that it’s been unexpectedly liberating. It’s been a huge load off my mind. (And I could use the extra bandwidth, let me tell you!)
Then there is red tape. For measure, the UK’s tax code comes in at 22,000 pages, more than any other country in the world. The Federation of Small Businesses estimates that a small company spends 44 hours per year on average on tax administration, at a total annual cost of around £25bn across all small enterprises.
The code itself contains numerous inefficiencies that distort work, growth and investment incentives, including cliff-edges in income tax and business valued-added tax thresholds, and transaction taxes on property and stocks. UK tax expert Dan Neidle outlines these here.
Building also requires hefty paperwork, which slows projects. As Britain Remade found, reopening a 3.3-mile train line to Portishead from Bristol took 79,187 pages of planning documents. Printed out, that’s 14.6 miles of paperwork — 4.5 times the length of the actual railway. The process has taken 16 years so far. (Construction should start soon.)
This is the same mechanism that infects Fortune 500 bluechip manufacturing companies’ IT organizations. There are lots of subgroups dedicated to their own particular subfunction, and this sounds like a great idea on paper. Let’s have a group dedicated to, say, networking. Then the people who know networking will make their expertise available to every project, and those projects won’t need to staff up with people who understand networking. Brilliant!
Except there’s not a single IT job that can exist without at least a basic understanding of how networking works.
And firewall is separate from that.
And DNS is separate from that.
And on and on.
Every subgroup has to remind everyone else that they exist, and justify their existence by imposing extra work on every step of every project. No one will EVER say, “No, my group doesn’t need to be involved with that. That’s a small enough concern and/or low enough risk that you can handle it internally.” So every single project requires years and years of planning and execution, no matter how large or small. So a simple CRUD web site takes 3 years to work through the system.
My dad lost his right leg in a motorcycle accident when he was 21. He never let it slow him down. He hunted and fished with the best of them. He once climbed a 12′ chain link fence with a Y of barbed wire at the top to sneak into a farm pond that he was convinced had some good fish in it. When he would encounter stories like this on TV, he would say, “Another poor cripple story.” There’s some inspiring wisdom in that take, about how to deal with your own situation, if you really think about it. In my own health “journey,” I have come to admire his resolve and stoicism.
AI is the new oil in Fortune 500 companies. Everyone is jockeying for budget to hire consultants and supervise bloated projects using commercial AI products for non-critical-path purposes, rather than developing in-house expertise at creating models with the wealth of open source tools now available and focusing on making specific models for our specific problems.
In my blue chip Fortune 250, I had heard rumors that there was a new, “agile,” internal IT group devoted to eschewing the past 30 years of stagnation, and introducing new tools and methodologies into the business. I had heard they even used Ruby on Rails for something! But I never managed to talk to anyone in the group. They had even been working on something related to AI. Now it no longer matters, as that entire group has been let go, and a whole new group has been started with new staffing.
So we continue to approach IT like it was still the 90’s, troweling layer upon layer of outsourcing and waterfall and legacy systems and processes on top of every new technology that upper management can’t avoid, due to needing to be able to say that we’re using it, in order to make public statements in the interests of the investment banks, to appear that we’re on top of the Current Thing (TM). Many people in engineering are recognizing the opportunity in front of us, and all we can do is watch as it gets treated by the organization as though it were the same as ERP or PLM, which is to say that they’re subjecting this new technology to the same years-long waterfall-and-outsourced development processes of the last 30 years.
As a perfect example of process-oriented approach to IT, every once in awhile, someone deep in the bowels of the machine presses a button in Azure, and a script gets fired off to rifle through every resource in the cloud, and fix what it thinks are problems. On the one hand, I think that’s a great idea to identify things that may have been left around and forgotten about. On the other hand, I think having it do anything automatically is a terrible idea. It should only flag things, for review.
I’ve gotten a couple of emails from an internal portal, instructing me to “scale” two of my virtual machines to different sizes. The first suggestion is to “scale” to a slightly more-expensive size, the second to a teeny-tiny less expensive one. The first recommendation has slightly-faster I/O, and I can’t tell any difference in the second one’s specs. So… why? Why change either one? It’s a net cost increase. Why run this, and issue tickets to do this work, without having any sort of review about the proposed action relative to the purpose and functioning of those resources, and their costs?
Between drafting this and posting it, those tickets got deleted. They were replaced by other tickets that told me to scale my VM’s to competing SKU’s. And then those tickets got deleted.
It’s almost funny. The machines that are popping up — and then disappearing — from this automated insanity are being unused at the moment. So, yes! They should be scaled. Except that they’re being unused because the thing they did got completely broken by changes in another group. Changes which are taking many months to get sorted. Changes that are spawning other months-long processes with other groups to get sorted.
It occurs to me that I should just spin them down while I wait, but they’re a rounding error on my own cloud tab, let alone the overall spend on Azure at the corporate level. None of this effort about these machines makes any sense. They cost less per month than me taking a dump on the company dime. If we’re going to automate all the things, and issue tickets to perform cost-savings measures without review, then at least put an “if” statement in the script such that it only operates on things that cost more than a box of pencils at the office.
I recently sat in a zoom call with about 10 other people, talking about a project that will eventually steal a lot of my thunder by co-opting a big part of something I have been doing, quite successfully for 5 years, using a new database using a different technology. Specifically, we’re talking about recreating my SQL database holding a bunch of engineering data with a Graph database. And, sure, it looks like there might be some advantages, but right now it’s about a wash, though I admit it may make it easier to implement things we aren’t even talking about yet. Maybe. Even if it does, will we ever get to them before the heat death of the universe? I digress. Anyway, after all these years, my successful little project has finally caught the fancy of someone who wants to take over and own the concept, and who has enough connections and political capital to try to make it happen.
Hey! I’ve seen this one before!
Sigh.
We’ve already been talking about this for about a year, and my boss and I only got involved with this team after they had already been working on the idea for a year before that. Using contractors, it had taken them roughly a year to do a proof of concept. I created my own PoC by bootstrapping my own graph DB with a bunch of scripts to convert my existing data, and doing an initial rewrite to get my import scripts and existing web app to interface with it. For comparison, it took me about four man-weeks to validate that this could work, see some of the advantages, and discover, to my surprise, that I couldn’t really argue against the switch. There seemed to be no downsides.
Now that there are several other groups involved, and we’ve finally got a gatekeeper from the ivory tower of corporate IT to walk our project through all the different reviews and approvals and signoffs. In essence, we’re looking good to start bringing up development environments in, oh, I don’t know, maybe another year or something. Honestly, we’re probably 3 years away from a working product. And if and when we finally get all this put together, and successfully run through the IT gauntlet, this new database — which is being designed for any number of arbitrary applications to hook into it — will have become part of the machine, and every other application that may try to use it will become mired in the tar pit when they try to get access to it.
As I sat in the call, I struggled to express how to characterize why this achingly over-complicated structure and process exists. But then I stumbled on this tweet:
I'll tell you this one right now.
Most companies are breathtakingly inefficient.
Because no one gets fired for doing what "we have always done".
This results in companies that are process-oriented, rather than result-oriented.
The purpose of a process-oriented culture is to dilute responsibility so no one can be held accountable for failure.
Now, I had understood the second part of the quote for a long time, but the first part was the expression I was looking for. Process oriented, as opposed to results oriented. The rigamarole I’m going through is process oriented. The “work” we are doing is for the process, not the end result. The end result is an after-thought. A by-product. It’s not the goal.
Out of 10 people on the call, there were just two of us who had the slightest concern about having the working product at the end of the process to serve the needs of the business. Everyone else was there to be a cog in the machine which we will be required to crank to get this done. Diagrams to make. Reviews to complete. Documentation to verify. Web forms to fill out. Spreadsheets to create. Approvals to be granted. Resources to be assigned. Meetings, meetings, and more meetings.
None of them understand what my application does, how it solves a business need, why it’s a critical part of the engineering process now (which is a whole post on its own), or why it’s architected the way it is. None of them care about swapping out the database layer with something else, why that is attractive, or what it may help us do in the future. No one is curious about any of this, because that’s not what they’re paid for. They’re paid to check boxes that some high-dollar consultants told the company had to be checked when doing this kind of work.
At every step in the journey, there are entire departments that exist only to add to the complexity of the final project. Middleware. My god, middleware. Middleware between the app servers and the database. Middleware between the application and other applications. Middleware between the database and other databases. And then, after everything is setup according to all the white papers, every change will need to be approved by committees, and moved through each environment in turn.
Everyone involved from IT can point to “security” as the reason for all the hoops we have to jump through, but I hardly think that’s a fair assessment. The data we’re storing is not sensitive. It is not financial. There is no need for separation of responsibilities. It is not personal. There’s no call for privacy. This isn’t real-time data. There is no need to make it highly available. It’s just historical engineering data. There are no particular “secrets” involved. It’s just data. Mountains of data. It reveals nothing about our IP. It is useless without the code which is tuned with it. And even if it weren’t, it’s also prescribed by our particular hardware and implementation, which someone else wouldn’t be using, and very likely can’t. All in all, it would take a competitor far less time to generate their own data for their own code and hardware from first principles than to figure out what ours means. But we’re going to treat it as though it were literally all of these things, and apply every system of control and management at our disposal to it, because that’s just how things are done.
This whole thing is the literal antithesis of Agile. Which is only appropriate, since this company wrote a whole book on waterfall 25 years ago — which I actually reviewed as part of a consultancy, in a life-is-strange kind of coincidence — and despite using some new lingo here and there, every reporting structure and process in IT is still organized around this methodology.
Everything hinges on having a project number so that all of this internal IT work can be assigned a cost, and the money making departments can be charged. As if this were a thing that needed to be done in order to help the business meet the needs of, you know, their customers. This pernicious, stupid practice of internal “cross charges” effectively ended US leadership in manufacturing decades ago, yet here we are, still not imagining doing it any other way. Corporate America has still never gotten the memo, and now this managerial malfeasance strangles IT right along with engineering.
If you want to adapt to the times — er, adapt to the times 15 years ago — you can’t just throw the word “agile” around occasionally, and call it good. And you can’t even just change process. You have to change organization. The thing that’s implied by the “process oriented culture” is that these systems become entrenched by organizational structures, which give people with no skills or ideas a “kingdom” to rule over.
They do not exist to help in any way. And, boy howdy, they don’t! They don’t look at your project as subject-matter experts and point out things that could be done to help. They only exist to go through their checklists, and force every part of your stack to adhere to every known buzzword, regardless of applicability. They don’t even know why! They can only say no. They can only slow down the process. They can only hinder the implementation of a good idea. Unless you break up this ossification to align with modern principles, every new idea will continue to get put through the same soul-crushing process, waste literal man-decades of time, and take years longer to implement than it should.
Seeing as my old guru turned out to be a con artist, I’ve been looking for new ones. This is Rodney Norman. I’ve gotten a lot of mileage out of this message lately.
It’s Up To You
On a more serious note, there’s a lot stoicism in his videos, and I’m finding this is resonating with a lot of the stuff I’m absorbing these days. There’s also a Zen angle here, which is ironic, since I was getting pretty deep into Zen in college before veering hard back to Christianity. I had hundreds of pages of notes and observations I was thinking about turning into a book about the similarities and overlap when I abandoned the effort to focus on my life after school.
When my health troubles started 4.5 years ago, I told my wife that I wasn’t “that guy.” I’m not the guy who pumps his chest and declares he’s going to beat the odds and be a shining example of positivity and calmness in the face of betrayal, confusion, and pain. And I’m still not. But 4.5 years later, I’m learning some techniques to play that guy in my head, at least.
The Wikipedia page on the Dead Internet Theory covers the general idea: Basically, half the traffic of the internet is fake. But then Wikipedia employs FUD to discourage the idea and make it seem that it’s not as bad as all that. You’re not fooling anyone, Wikipedia. (At least, not any more.) That’s just part of the theory.
Bad AI Bots Everywhere
If you have a Twitter account, it won’t take long for you to see this for yourself in the wild. The problem is astronomical there. Right now, this is test and development of AI. I get that. It’s going to be bad, and “they” know that, but it’s a learning process. Once the bots get good enough to not stand out like this, then they can be used for actual manipulation and influence.
Some day, I hope we get to see behind the curtain, and it becomes public who was doing these things, and why. I mean, to be certain, the CIA and KGB and China’s MSS are all doing it. I wonder if various investment banks are involved, like Blackrock, State Street, et. al., pushing markets around. I also wonder how much companies like Palatir are doing. There are so many competing campaigns running now, and at such scale, I doubt the human mind could really comprehend the full scope of all that is happening.
UPDATE TWO DAYS LATER:
Well, well, well. What do you know? Reddit mods caught Palantir in the act of astroturfing their platform.
“Get out of here, Palantir! This is OUR astroturfing sandbox. Just who do you think you are, anyway?”
So, today, I’m trying to actually use two prepaid credit cards that I’ve gotten from class action lawsuits. One for $12.15, and one for $12.60. (Something about the numbers being so close to each other is another sketchy detail about how all of this works, but I digress.) I tried to load them into Amazon, thinking they would get used up in order, but no. You can only specify one credit card in Amazon, and neither of them have enough money on them to even cover a pack of gum these days.
I briefly toyed with the idea of deleting the details, and forgetting they exist, but then determined I was going to find a way to use them out of sheer spite. However, this raised the question of what happens to the money that gets “awarded” from class-action lawsuits but which never gets spent, thanks to how difficult they make it to do so. According to Claude, the answer is yet another layer of scummy grifting on top of several existing layers: the “fintech” companies that issue the pre-paid cards keep it.
So they get paid twice.
Of course.
Consumer protection laws don’t prevent pre-paid card providers from charging carrying fees, so the pittance you get from the settlement can be clawed back in a matter of months after the fees kick in.
Apparently, the only “fix” here is to “buy” Amazon gift cards with the pre-paid credit cards as soon as you get them, and then use that money when making a purchase. And after doing just that, I now see that I can “recharge my balance” of gift money on Amazon directly, without having to buy a gift card and then redeem it. I feel a little silly, but hey, this is my first rodeo.
After filling in the claim forms, and then filling out the pre-paid card forms, and now dealing with Amazon — trying to resubmit the order in various ways before finally canceling the previous order and starting all over from scratch — and getting dozens of emails about all of this — it’s probably cost me several hours to get and spend this money, but at least I’ve made sure that the tiny bit of money that is supposed to address whatever grievance I supposedly had is actually used by me, and not vacuumed up by yet another scummy late-stage-capitalism parasite.
While going through this, I estimated that half the money awarded probably got lost in all of this (and wound up in the pre-paid card providers’ pockets), but the previously-linked Claude conversation says it’s more like 85%-99%.
I copy-paste all of this for full context, but I want to emphasize this paragraph:
It tried a bunch of things before it had the breakthrough, but as you probably know it always said: “I found it! This is finally the root case of the problem!” but every AI does that on almost every prompt, so it wasn’t anything special. It was just another thing it did that I tested and noticed it worked without also regressing other stuff, and then I looked at it and compared it, and then realized what it did. Then I had to go and delete a bunch of other unnecessary changes that Opus also did that it insisted was good to leave in and it didn’t want to remove, but wasn’t actually pertinent to the issue.
Now, I make this sentiment on various social media sites so often that I have it as a shortcut on Mac and iOS: when I type, “reddits”, it autocompletes to say, “Reddit is a CCP-funded deep state psyop against a very specific demographic, and nothing on it should be taken at face value.” But in this case, it rings authentic. I deal with this most every day at this point.
A few years ago, a few Google searches would dig up StackOverflow answers and personal blog posts that specifically dealt with whatever you were asking about. But within the span of a few years, Google has become almost worthless for searching on programming problems. It’s lucky that LLM’s have come along now, or this work would be that much harder. I’d suggest that Google let their search product slide into terribleness in order to push people to their AI product, but they don’t have one yet, so their awfulness can just be ascribed to basic late-stage capitalism and utterly-predictable monopolistic malfeasance.
Anyway, this last quote is so appropriate. AI can’t figure out if what it did actually worked, but it always says it does, and when you see a move in the right direction, you have to figure out what part made it work, and then delete all the other stuff that the AI broke in the process. In this regard, it is exactly like a guy I used to work with who would break half a dozen things on my servers before he got something working. He never cleaned up his failed attempts. Every time he told me he had done something, I’d ask a few questions about his process, and then just quietly go put things back in order.
I just went through this process over the last weekend. I’m trying to move a codebase from Rails 6 to Rails 8. There’s a lot of changes in the way Rails handles Javascript between these two versions, from the bundling to the running. I’ve gotten left behind on a lot of this. Even when I spun up this Rails 6 app six years ago, I was using the old asset bundling technique from Rails 3/4. I was happy to make the jump to “no-build” in 8 all at once, but my application servers needed upgrading from a version of Ubuntu which is no longer getting security updates. This upgrade forced me into upgrading NodeJS. This upgrade broke the asset building process in Rails because the dreaded SSL upgrade has moved to this part of the stack now. So I moved to Webpacker, which took way too long to work out. I tried to use AI throughout, but it was of almost no help at all.
After finally getting moved to Webpacker, just in time to move to ImportMap, I have had to tackle how Stimulus, Turbo, and Hotwire work. Rails 7 focused on Turbolinks, which utterly broke the Javascript datatable widget, AgGrid, which I use all over the site, so I removed Turbolinks from my Rails 6 app, and never upgraded to 7. Now I’m learning how to do things in the new “Rails way,” and AI has been helpful… in precisely the same way that this Reddit poster describes. I’ve had to run many prompts and tweak and cajole it’s “thinking,” but I finally got a really neat and tiny solution to a question… All while verifying the approach with videos from GoRails. (Which I subscribed to just to make this turn of learning.)
After I had a working function to a particular feature I wanted, I had an “aha!” moment. I could see what all this new tooling and plumbing was about. I felt a little foolish, because it winds up just being a way to move the Javascript you need out of the view code. That’s a Good Thing (TM), but I couldn’t see the forest for the trees until that moment.
And even after this success, I’m plagued with a more philosophical question. The way that Claude factored the feature I wanted was all Javascript. Meaning, once the view was loaded, it dealt with the interactivity without going back through a server-side render step. It relied on the browser doing the DOM manipulation. Which is the “old” way of doing things, right? I asked it to specifically use Turbo streams to render the HTML that the browser could use to simply replace the div, and it said, “Oh, yes, right, that’s the more idiomatic way to do this in Rails,” and gave me a partial that the Stimulus controller use to do the same thing. But now I have a clean, one-file, entirely-Stimulus approach, versus having extra calls to format_for in a controller, a turbo-stream ERB file, and a partial. Seems to me like too much extra to make things idiomatic.
Also, when I asked Claude for this refactor, it broke the feature. So now I have to figure out if I want to fix the turbo-stream approach to keep things “the Rails way,” or just let Stimulus handle the whole thing. I think I will be using turbo-streams to refresh data in my AgGrid tables, but I think I’ll let Stimulus do all the work when it can. It keeps things simpler, and it’s basically what I was doing before anyway.
I want to go back to what I was saying before about how you have to “clean up” after the AI. This is critically important, and it’s a problem in the making that I’m hoping corporate managers figure out before it becomes permanent. If you hire juniors and expect them to produce code like seniors with AI, you’re going to wind up with a bunch of instability because of extraneous code that AI leaves behind. I expect that this problem is too “viral” to survive. I don’t think an actual, useful, non-trivial application could last very long being vibe-coded. It would start to teeter, and people would hit it with more AI, and it would fall over and shatter, and then they’d get to keep all the pieces. I worry that current applications will be patched here and there by juniors who don’t clean up the mess left behind, and these errors will accumulate until the codebase is so broken that…
Oh, for Pete’s sake. What am I even saying!? The same thing will happen here that has been happening for 40 years of corporate IT development: systems get so wonky and unmaintainable and misaligned that new middle managers come in, pitch senior management into doing a massive system replacement, spend twice as much time and three times as much money as they said it would take, launch the system with dismal performance and terrible UI, piss everyone off, polish their resume, get a new job, and leave the company and everyone in it holding the bag with the accretion their terrible decisions made by committee over years.
AI will change absolutely nothing about this. The problem isn’t technology, or code, or languages, or databases, or API’s, or anything else. The problem is people. It’s always BEEN people. I’m not clear that it will ever NOT be about people.
I was born at the perfect time to pursue a career in full-stack software development. I grew up programming 8-bit computers, then learned Unix in college. I entered the workforce at the emergence of Windows for Workgroups and Linux, and I'll be retiring right about the time the AI's make me redundant. Also, the year Social Security goes broke.
Months and months of planning by lots and lots of middle management can save literally hours of programming.
Me
Give a man a program, and you'll frustrate him for a day. Teach a man to program, and you'll frustrate him for a lifetime.
Unknown
I have a mental illness that makes me think that people will change their minds if I present the correct arguments with the appropriate facts and data.
@xxclusionary, on Twitter
I've put all of my skill points into arguing with blinking lights.
Me
But I say unto you, that whosoever looketh on a new piece of Apple gear, to lust after it, hath committed purchase of it already in his heart.
Me
Don't say you're easy on me; you're about as easy as a nuclear war.
Duran Duran, Is There Something I Should Know
I sold the Renoir and the TV set; don't wanna be around when this gets out.